EFK_部署文档
说明
- 注意各个组件的版本。
- 这里 Elasticsearch 的版本为:elasticsearch-7.8.0-linux-x86_64.tar.gz。
- IK 的版本为:elasticsearch-analysis-ik-7.8.0.zip。
- Kibana 的版本为:kibana-7.8.0-linux-x86_64.tar.gz。
- FileBeat 的版本为:filebeat-7.17.0-linux-x86_64.tar.gz。
Elasticsearch
把对应的包放到指定的文件夹,解压,命名。
修改 config 里的配置文件 elasticsearch.yml。
- cluster.name: es
- node.name: node-1
- network.host: 0.0.0.0
- cluster.initial_master_nodes: [“node-1”]
修改 config 里的配置文件 jvm.options。
- -Xms512m
- -Xmx512m
修改 /etc/security/ 路径下的配置文件 limits.conf。(文件末尾追加,前面带 * 号)
- soft nproc 65535
- hard nproc 65535
- soft nofile 65535
- hard nofile 65535
- es_user soft nofile 65535
- es_user hard nofile 65535
修改 /etc/ 路径下的配置文件 sysctl.conf。(修改后执行:sysctl -p)
vm.max_map_count=655360
创建新的用户 ekl。(Elasticsearch)不能使用 root 用户启动。(这里直接把对应文件夹下的文件都赋值给了 elk 用户。)
- adduser elk
- passwd elk
- chown -R elk:elk /usr/local/elk/*
- su elk
IK
- 在 Elasticsearch 的 plugins 目录下,创建 ik 文件夹。
- 把 elasticsearch-analysis-ik-7.8.0.zip 放到 ik 文件夹内。
- unzip elasticsearch-analysis-ik-7.8.0.zip (解压)。
- 进入 Elasticsearch 的 bin目录下,执行 ./elasticsearch -d 命令。(后台启动 Elasticsearch )
Kibana
把对应的包放到指定的文件夹,解压,命名。
修改 config 里的配置文件 kibana.yml。
- server.port: 5601
- server.host: “0.0.0.0”
- elasticsearch.hosts: [“ip:端口”]
- i18n.locale: “zh-CN”
进入 Kibana 的 bin 目录下,执行 ./kibana & 命令。(后台启动 Kibana)
FileBeat
- 把对应的包放到指定的文件夹,解压,命名。
- 修改配置文件 filebeat.yml。(进入到文件目录下就能看到)
拦截单条日志
filebeat.inputs:
# 日志类型
- type: log
enabled: true
# 日志路径
paths:
- /home/back/reachx/client/logs/rhx-client-info.log
# 日志形式(elasticsearch 自动生成索引使用)
fields:
index: client-info
# 编码
encoding: utf-8
# 指定日志匹配条件
multiline.pattern: '^\d{4}'
# 定义模式是否被否定
multiline.negate: true
# 日志合并位置
multiline.match: after
# 关闭 filebeat 自动管理索引的生命周期
setup.ilm.enabled: false
# kibana 配置
setup.kibana:
host: "localhost:5601"
# elasticsearch 配置
output.elasticsearch:
enabled: true
hosts: ["localhost:9200"]
# 索引生成
indices:
- index: "client-info-%{+yyyy-MM-dd}"
# 匹配到对应关键字,生成指定索引
when.equals:
fields:
index: "client-info"
# 账号和密码,使用默认的配置
username: "elastic"
password: "changeme"
连接多条配置
filebeat.inputs:
# 日志类型
- type: log
enabled: true
# 日志路径
paths:
- /home/back/reachx/client/logs/rhx-client-info.log
# 日志形式(elasticsearch 自动生成索引使用)
fields:
index: client-info
# 编码
encoding: utf-8
# 指定日志匹配条件
multiline.pattern: '^\d{4}'
# 定义模式是否被否定
multiline.negate: true
# 日志合并位置
multiline.match: after
- type: log
enabled: true
paths:
- /home/back/reachx/client/logs/rhx-client-error.log
fields:
index: client-error
encoding: utf-8
multiline.pattern: '^\d{4}'
multiline.negate: true
multiline.match: after
- type: log
enabled: true
paths:
- /home/back/reachx/file/logs/rhx-file-info.log
fields:
index: file-info
encoding: utf-8
multiline.pattern: '^\d{4}'
multiline.negate: true
multiline.match: after
- type: log
enabled: true
paths:
- /home/back/reachx/file/logs/rhx-file-error.log
fields:
index: file-error
encoding: utf-8
multiline.pattern: '^\d{4}'
multiline.negate: true
multiline.match: after
# 关闭 filebeat 自动管理索引的生命周期
setup.ilm.enabled: false
# kibana 配置
setup.kibana:
host: "localhost:5601"
# elasticsearch 配置
output.elasticsearch:
enabled: true
hosts: ["localhost:9200"]
# 索引生成
indices:
- index: "client-info-%{+yyyy-MM-dd}"
# 匹配到对应关键字,生成指定索引
when.equals:
fields:
index: "client-info"
- index: "client-error-%{+yyyy-MM-dd}"
when.equals:
fields:
index: "client-error"
- index: "file-info-%{+yyyy-MM-dd}"
when.equals:
fields:
index: "file-info"
- index: "file-error-%{+yyyy-MM-dd}"
when.equals:
fields:
index: "file-error"
# 账号和密码,使用默认的配置
username: "elastic"
password: "changeme"
- multiline.pattern: ‘^\d{4}’
- multiline.negate: true
- multiline.match: after
如果不加上述的配置,当日志格式如下:
2023-07-06 15:22:46.358 [http-nio-9091-exec-6] ERROR o.a.c.c.C.[.[.[/client].[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [/client] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: User Token Is Expires] with root cause java.lang.IllegalStateException: User Token Is Expires at com.rhx.client.config.interceptor.LoginInterceptor.preHandle(LoginInterceptor.java:36) at org.springframework.web.servlet.HandlerExecutionChain.applyPreHandle(HandlerExecutionChain.java:148) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1062)
会被解析成一行一行的数据,这个显然不是我们想要的结果。
通过配置:multiline.pattern: ‘^\d{4}’(匹配4个数字年份开头的)来进行控制。使得这一批的数据作为一行解析展示。
后台启动
(nohup ./filebeat -e -c filebeat.yml >/dev/null 2>&1 &)
- 将所有标准输出及标准错误输出到 /dev/null 空设备,即没有任何输出。
- 停止服务,通过 ps -ef |grep filebeat 命令找到对应的进程,通过 kill -9 进行停止。