最近发现ELK页面等有了较大的改动,重新配置了遍最新版
注:软件版本必须一致,这里配置现发布的最新版本 7.15.1-1
注:conf文件中格式使用空格,空2格,不要用tab 不要用tab 不要用tab
1.配置JDK环境 (略)
#################以下为 直接使用logstash获取日志#################
2.安装配置elasticsearch.x86_64
[root@localhost yum.repos.d]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
[root@localhost yum.repos.d]# cat elasticsearch.repo
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md
[root@localhost yum.repos.d]# yum clean all
[root@localhost yum.repos.d]# yum makecache fast
[root@localhost yum.repos.d]# yum -y install elasticsearch.x86_64
[root@localhost /]# systemctl enable elasticsearch
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
[root@localhost /]# systemctl start elasticsearch
[root@localhost /]# systemctl status elasticsearch
● elasticsearch.service - Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: disabled)
Active: active (running) since 三 2021-11-03 17:04:35 CST; 7s ago
Docs: https://www.elastic.co
Main PID: 15439 (java)
CGroup: /system.slice/elasticsearch.service
├─15439 /usr/share/elasticsearch/jdk/bin/java -Xshare:auto -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -XX:+AlwaysPreTouch -Xss1m -Djava....
└─15638 /usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller
11月 03 17:04:20 localhost.localdomain systemd[1]: Starting Elasticsearch...
11月 03 17:04:35 localhost.localdomain systemd[1]: Started Elasticsearch.
[root@localhost /]# netstat -ntlp |grep java
tcp6 0 0 127.0.0.1:9200 :::* LISTEN 15439/java
tcp6 0 0 ::1:9200 :::* LISTEN 15439/java
tcp6 0 0 127.0.0.1:9300 :::* LISTEN 15439/java
tcp6 0 0 ::1:9300 :::* LISTEN 15439/java
#9200作为Http协议,主要用于外部通讯
#9300作为Tcp协议,ES集群之间是通过9300进行通讯
[root@localhost /]# vim /etc/elasticsearch/elasticsearch.yml
[root@localhost /]# cat /etc/elasticsearch/elasticsearch.yml | grep -v '^#'
cluster.name: elk001
node.name: node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 10.2.33.102
http.port: 9200
discovery.seed_hosts: ["10.2.33.102", "[::1]"]
cluster.initial_master_nodes: ["node-1"]
[root@localhost /]# systemctl restart elasticsearch
[root@localhost ~]# curl http://10.2.33.102:9200
{
"name" : "node-1",
"cluster_name" : "elk001",
"cluster_uuid" : "hTUer8_jQRSYE-cwg55mSw",
"version" : {
"number" : "7.15.1",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "83c34f456ae29d60e94d886e455e6a3409bba9ed",
"build_date" : "2021-10-07T21:56:19.031608185Z",
"build_snapshot" : false,
"lucene_version" : "8.9.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
属性名 | 说明 |
---|---|
cluster.name | 配置elasticsearch的集群名称。 |
node.name | 节点名,es会默认随机指定一个名字,用户可自行配置。 |
path.data | 设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号分隔。 |
path.logs | 设置日志文件的存储路径,默认是es根目录下的logs文件夹。 |
path.conf | 设置配置文件的存储路径,tar或zip包安装默认在es根目录下的config文件夹,rpm安装默认在 |
path.plugins | 设置插件的存放路径,默认是es根目录下的plugins文件夹。 |
bootstrap.memory_lock | 设置为true可以锁住ES使用的内存,避免内存进行swap。 |
network.host | 设置bind_host和publish_host,设置为0.0.0.0允许所有外网访问。 |
http.port | 设置对外服务的http端口,默认为9200。 |
transport.tcp.port | 集群结点之间通信端口,默认为9300。 |
discovery.zen.ping.timeout | 设置ES自动发现节点连接超时的时间,默认为3S。 |
discovery.zen.minimum_master_nodes | 主结点数量的最少值 ,此值的公式为:(master_eligible_nodes / 2) + 1 ,比如:有3个符合要求的主结点,那么这里要设置为2。 |
discovery.seed_hosts | 集群发现,配置该节点会与哪些候选地址进行通信,hostname,ip,ip+port,比如:[“127.0.0.1:9300”]。 |
cluster.initial_master_nodes | 当你第一次启动全新的Elasticsearch集群时,会有一个集群引导(cluster bootstrapping)步骤,这个步骤会确定一个在第一次选举中投票被计数的、并且可以成为master节点的集合。在开发模式,如果没有配置 discovery settings,该步骤由节点自身自动执行。因为这种自动引导本质上是不安全的,当您在生产模式下启动一个全新的集群时,你必须显式指定那些可以成为master节点的名称或者IP地址,这些节点应该在第一次选举中计算选票数。 |
3.安装配置logstash.x86_64
logstash目录结构
类型 | 描述 | 默认值 | 如何定义配置 |
---|---|---|---|
home | logstash安装的默认主目录 | /usr/share/logstash | |
bin | logstash的二进制脚本程序和logstash-plugin插件安装脚本 | /usr/share/logstash/bin | |
settings | 配置文件,包括logstash.yml、jvm选项配置、启动选项配置 | /etc/logstash | path.settings |
conf | logstash数据收集配置 | /etc/logstash/conf.d/*.conf | /etc/logstash/pipelines.yml |
logs | 日志文件 | /var/log/logstash | path.logs |
plugins | 插件目录 | /usr/share/logstash/plugins | path.plugins |
data | 数据持久化目录 | /var/lib/logstash | path.data |
logstash配置文件
logstash.yml:定义logstash的基础配置信息(启动和执行)
pipeline.yml:定义数据收集规则的配置信息(配置处理流水线数据)
jvm.options:定义JVM的总堆空间的最小值和最大值,也就是内存使用量,默认是1g
log4j2.properties:log4j2库的相关设置
startup.options:定义logstash启动时的相关配置
logstash.yml的详解:
配置参数 | 解析 | 默认值 |
---|---|---|
node.name |
节点名称定义 | 主机名 |
path.data |
持久化数据目录定义 | LOGSTASH_HOME/data |
pipeline.id |
pipeline的id号 | main |
pipeline.java_execution |
使用java执行引擎 | false |
pipeline.workers |
定义在过滤筛选和输出阶段的进程数量 | 默认为cpu的核心数 |
pipeline.batch.size |
定义在筛选和输出之前单次处理数据量大小,通常和jvm的堆内存值相关,值越大,jvm内存配置也需要更大 | 125 |
pipeline.batch.delay |
批处理数据的时间延迟,在数据量不达标时的延迟时间,单位为毫秒 | 50 |
pipeline.unsafe_shutdown |
在关机状态强制关闭logstash在处理的数据,会导致数据丢失 | false |
path.config |
pipeline的相关配置,通常在pipeline.yml中配置好 | |
http.host |
监听配置 | "127.0.0.1" |
http.port |
监听端口 | 9600 |
path.logs |
日志路径 | LOGSTASH_HOME/logs |
log.format |
日志格式 | 文本 |
path.plugins |
插件定义 |
安装步骤&事例如下:
[root@localhost yum.repos.d]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
[root@localhost yum.repos.d]# cat logstash.repo
[logstash-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
[root@localhost /]# yum -y install logstash.x86_64
[root@localhost /]# cat /etc/logstash/conf.d/system.conf
input{
file {
path => "/data/rsync/nginx/*"
type => "nginxlog"
start_position => "beginning"
stat_interval => "3"
}
file{
path => "/var/log/secure"
type => "securelog"
start_position => "beginning"
stat_interval => "2"
}
}
output {
if [type] == "nginxlog" {
elasticsearch{
hosts => ["10.2.33.102:9200"]
index => "nginx-%{+YYYY.MM.dd}"
}
}
if [type] == "securelog" {
elasticsearch{
hosts => ["10.2.33.102:9200"]
index => "secure-%{+YYYY.MM.dd}"
}
}
}
[root@localhost /]# chmod -R 777 /var/log/messages
[root@localhost /]# systemctl enable logstash
Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service.
[root@localhost /]# systemctl start logstash
[root@localhost /]# systemctl status logstash
● logstash.service - logstash
Loaded: loaded (/etc/systemd/system/logstash.service; enabled; vendor preset: disabled)
Active: active (running) since 三 2021-11-03 17:41:57 CST; 5s ago
Main PID: 18344 (java)
CGroup: /system.slice/logstash.service
└─18344 /usr/share/logstash/jdk/bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djruby.comp...
11月 03 17:41:57 localhost.localdomain systemd[1]: Started logstash.
11月 03 17:41:57 localhost.localdomain systemd[1]: Starting logstash...
11月 03 17:41:57 localhost.localdomain logstash[18344]: Using bundled JDK: /usr/share/logstash/jdk
11月 03 17:41:57 localhost.localdomain logstash[18344]: OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
[root@localhost /]# netstat -ntlp |grep java
tcp6 0 0 127.0.0.1:9600 :::* LISTEN 18344/java
tcp6 0 0 127.0.0.1:9200 :::* LISTEN 15439/java
tcp6 0 0 ::1:9200 :::* LISTEN 15439/java
tcp6 0 0 127.0.0.1:9300 :::* LISTEN 15439/java
tcp6 0 0 ::1:9300 :::* LISTEN 15439/java
4.安装配置kibana.x86_64
[root@localhost /]# yum -y install kibana.x86_64
[root@localhost /]# cat /etc/kibana/kibana.yml |grep -v "^#" |grep -v "^$"
server.port: 5601
server.host: "10.2.33.102"
elasticsearch.hosts: ["http://10.2.33.102:9200"]
[root@localhost /]# systemctl enable kibana
Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.
[root@localhost /]# systemctl start kibana
[root@localhost /]# systemctl status kibana
● kibana.service - Kibana
Loaded: loaded (/etc/systemd/system/kibana.service; enabled; vendor preset: disabled)
Active: active (running) since 三 2021-11-03 17:48:32 CST; 3s ago
Docs: https://www.elastic.co
Main PID: 18942 (node)
CGroup: /system.slice/kibana.service
├─18942 /usr/share/kibana/bin/../node/bin/node /usr/share/kibana/bin/../src/cli/dist --logging.dest="/var/log/kibana/kibana.log" --pid.file="/run/kibana/kibana.pid"
└─18955 /usr/share/kibana/node/bin/node --preserve-symlinks-main --preserve-symlinks /usr/share/kibana/src/cli/dist --logging.dest="/var/log/kibana/kibana.log" --pid.file="/run/kibana/kibana.pid"
11月 03 17:48:32 localhost.localdomain systemd[1]: Started Kibana.
11月 03 17:48:32 localhost.localdomain systemd[1]: Starting Kibana...
[root@localhost /]# netstat -ntlp |grep 5601
tcp 0 0 10.2.33.102:5601 0.0.0.0:* LISTEN 18955/node
5.登陆配置
http://10.2.33.102:5601
#################以下为用filebeat获取日志,传输#################
1、需要在客户端服务器上安装filebeat,采集传输日志文件
yum源repo同上略过
[root@localhost /]# yum -y install filebeat.x86_64
[root@localhost nginx]# cat /etc/filebeat/filebeat.yml
# ============================== Filebeat inputs ===============================
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/*.log
tags: ["nginx-web"]
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
# ======================= Elasticsearch template setting =======================
setup.template.settings:
index.number_of_shards: 1
setup.kibana:
output.elasticsearch:
hosts: ["localhost:9200"]
processors:
- add_host_metadata:
when.not.contains.tags: forwarded
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~
# ================================== Logging ===================================
#logging.level: debug
# ============================= X-Pack Monitoring ==============================
#monitoring.enabled: false
# ============================== Instrumentation ===============================
#instrumentation:
#enabled: false
#hosts:
# - http://localhost:8200
#api_key:
# ================================= Migration ==================================
#migration.6_to_7.enabled: true
配置文件详解:
type: log #input类型为log
enable: true #表示是该log类型配置生效
paths: #指定要监控的日志,目前按照Go语言的glob函数处理。没有对配置目录做递归处理,比如配置的如果是:
- /var/log/* /*.log #则只会去/var/log目录的所有子目录中寻找以".log"结尾的文件,而不会寻找/var/log目录下以".log"结尾的文件。
recursive_glob.enabled: #启用全局递归模式,例如/foo/**包括/foo, /foo/*, /foo/*/*
encoding:#指定被监控的文件的编码类型,使用plain和utf-8都是可以处理中文日志的
exclude_lines: ['^DBG'] #不包含匹配正则的行
include_lines: ['^ERR', '^WARN'] #包含匹配正则的行
harvester_buffer_size: 16384 #每个harvester在获取文件时使用的缓冲区的字节大小
max_bytes: 10485760 #单个日志消息可以拥有的最大字节数。max_bytes之后的所有字节都被丢弃而不发送。默认值为10MB (10485760)
exclude_files: ['\.gz$'] #用于匹配希望Filebeat忽略的文件的正则表达式列表
ingore_older: 0 #默认为0,表示禁用,可以配置2h,2m等,注意ignore_older必须大于close_inactive的值.表示忽略超过设置值未更新的
文件或者文件从来没有被harvester收集
close_* #close_ *配置选项用于在特定标准或时间之后关闭harvester。 关闭harvester意味着关闭文件处理程序。 如果在harvester关闭
后文件被更新,则在scan_frequency过后,文件将被重新拾取。 但是,如果在harvester关闭时移动或删除文件,Filebeat将无法再次接收文件
,并且harvester未读取的任何数据都将丢失。
close_inactive #启动选项时,如果在制定时间没有被读取,将关闭文件句柄
读取的最后一条日志定义为下一次读取的起始点,而不是基于文件的修改时间
如果关闭的文件发生变化,一个新的harverster将在scan_frequency运行后被启动
建议至少设置一个大于读取日志频率的值,配置多个prospector来实现针对不同更新速度的日志文件
使用内部时间戳机制,来反映记录日志的读取,每次读取到最后一行日志时开始倒计时使用2h 5m 来表示
close_rename #当选项启动,如果文件被重命名和移动,filebeat关闭文件的处理读取
close_removed #当选项启动,文件被删除时,filebeat关闭文件的处理读取这个选项启动后,必须启动clean_removed
close_eof #适合只写一次日志的文件,然后filebeat关闭文件的处理读取
close_timeout #当选项启动时,filebeat会给每个harvester设置预定义时间,不管这个文件是否被读取,达到设定时间后,将被关闭
close_timeout 不能等于ignore_older,会导致文件更新时,不会被读取如果output一直没有输出日志事件,这个timeout是不会被启动的,
至少要要有一个事件发送,然后haverter将被关闭
设置0 表示不启动
clean_inactived #从注册表文件中删除先前收获的文件的状态
设置必须大于ignore_older+scan_frequency,以确保在文件仍在收集时没有删除任何状态
配置选项有助于减小注册表文件的大小,特别是如果每天都生成大量的新文件
此配置选项也可用于防止在Linux上重用inode的Filebeat问题
clean_removed #启动选项后,如果文件在磁盘上找不到,将从注册表中清除filebeat
如果关闭close removed 必须关闭clean removed
scan_frequency #prospector检查指定用于收获的路径中的新文件的频率,默认10s
tail_files:#如果设置为true,Filebeat从文件尾开始监控文件新增内容,把新增的每一行文件作为一个事件依次发送,
而不是从文件开始处重新发送所有内容。
symlinks:#符号链接选项允许Filebeat除常规文件外,可以收集符号链接。收集符号链接时,即使报告了符号链接的路径,
Filebeat也会打开并读取原始文件。
backoff: #backoff选项指定Filebeat如何积极地抓取新文件进行更新。默认1s,backoff选项定义Filebeat在达到EOF之后
再次检查文件之间等待的时间。
max_backoff: #在达到EOF之后再次检查文件之前Filebeat等待的最长时间
backoff_factor: #指定backoff尝试等待时间几次,默认是2
harvester_limit:#harvester_limit选项限制一个prospector并行启动的harvester数量,直接影响文件打开数
tags #列表中添加标签,用过过滤,例如:tags: ["json"]
fields #可选字段,选择额外的字段进行输出可以是标量值,元组,字典等嵌套类型
默认在sub-dictionary位置
filebeat.inputs:
fields:
app_id: query_engine_12
fields_under_root #如果值为ture,那么fields存储在输出文档的顶级位置
multiline.pattern #必须匹配的regexp模式
multiline.negate #定义上面的模式匹配条件的动作是 否定的,默认是false
假如模式匹配条件'^b',默认是false模式,表示讲按照模式匹配进行匹配 将不是以b开头的日志行进行合并
如果是true,表示将不以b开头的日志行进行合并
multiline.match # 指定Filebeat如何将匹配行组合成事件,在之前或者之后,取决于上面所指定的negate
multiline.max_lines #可以组合成一个事件的最大行数,超过将丢弃,默认500
multiline.timeout #定义超时时间,如果开始一个新的事件在超时时间内没有发现匹配,也将发送日志,默认是5s
max_procs #设置可以同时执行的最大CPU数。默认值为系统中可用的逻辑CPU的数量。
name #为该filebeat指定名字,默认为主机的hostname
注:/etc/logstash/conf.d 下可配置多个文件
2、在logstash上配置第二个nginx.conf 接收filebeat传输过来的数据
[root@elk001 conf.d]# pwd
/etc/logstash/conf.d
[root@elk001 conf.d]# ll
总用量 8
-rw-r--r-- 1 root root 174 11月 8 16:54 nginx.conf
-rw-r--r-- 1 root root 538 11月 8 16:29 system.conf
[root@elk001 conf.d]# cat nginx.conf
input{
beats{
host => "10.2.33.102"
port => "5044"
}
}
output {
elasticsearch{
hosts => ["10.2.33.102:9200"]
index => "nginx-web-%{+YYYY.MM.dd}"
}
}
[root@elk001 conf.d]# systemctl restart logstash
3、登陆http://10.2.33.102:5601查看新增的文件
#################filebeat-redis-logstash-elasticsearch-kibana #################
架构图:
说明:(测试就把除了filebeat都装一台上了,生产环境请自分配)
1,前端服务器只启动轻量级日志收集工具filebeat(不需要JDK环境)
2,收集的日志不经过处理直接发送到redis消息队列
3,redis消息队列只是暂时存储日志数据,不需要进行持久化(防止数据丢失)
4,logstash从redis消息队列读取数据并且按照一定规则进行过滤然后存储至elasticsearch
5,通过kibana进行图形化展示
redis在其中的作用:
存储日志,全部日志集中一起,打好标签,便于操作管理,可以是nginx,apache,tomcat等其他只要产生都可以存储,只要打上标签,logstash在input时就会分好类
提高冗余性,若redis后面的全部宕机了,也不至于数据丢失
加快日志的读取速度,防止大批量日志的时候logstash无法及时处理
redis配置安装(略)
bind 0.0.0.0
protected-mode no
requirepass redis123456
一些配置上面已有,忽略,直接修改配置文件,如下:
修改filebeat配置文件,redis作为日志的输出对象,需要添加,放置不同的redis库,设置不同的key方便使用
[root@localhost filebeat]# cat /etc/filebeat/filebeat.yml
# ============================== Filebeat inputs ===============================
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/*.log
tags: ["nginx-web"]
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
# ======================= Elasticsearch template setting =======================
setup.template.settings:
index.number_of_shards: 1
setup.kibana:
output.redis:
hosts: ["10.2.33.102:6379"]
password: "redis123456"
key: "nginx-web"
data_type: "list"
db: 4
processors:
- add_host_metadata:
when.not.contains.tags: forwarded
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~
# ================================== Logging ===================================
#logging.level: debug
# ============================= X-Pack Monitoring ==============================
#monitoring.enabled: false
# ============================== Instrumentation ===============================
#instrumentation:
#enabled: false
#hosts:
# - http://localhost:8200
#api_key:
# ================================= Migration ==================================
#migration.6_to_7.enabled: true
修改logstash配置文件,根据filebeat中设置的redis存储进行读取:
[root@elk001 conf.d]# cat redis.conf
input{
redis {
host => "10.2.33.102"
port => 6379
password => "redis123456"
key => "nginx-web"
data_type => "list"
db => 4
}
}
output {
elasticsearch {
hosts => ["10.2.33.102:9200"]
index => "redis-%{+YYYY.MM.dd}"
}
}
注:修改配置文件注意要重启服务
redis查看数据
[root@elk001 conf.d]# redis-cli
127.0.0.1:6379> auth redis123456
OK
127.0.0.1:6379> select 4
OK
127.0.0.1:6379[4]> keys *
1) "nginx-web"
#################filebeat-kafka-logstash-elasticsearch-kibana #################
未完待续。。。