【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习)

这篇具有很好参考价值的文章主要介绍了【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本篇文章继续给大家介绍ELFK日志分析,详细请见下面目录。

目录

filebeat采集nginx日志

filebeat模块使用

一、Nginx模块

二、tomcat模块

三、filebeat写数据到ES集群自定义索引

四、filebeat自定义字段之nginx写入ES

五、filebeat自定义字段之tomcat写入ES

六、indices模块实现多个input写入不同的ES索引

企业实战filebeat写入ES

一、自定义Nginx日志格式并写入ES

二、自定义tomcat日志格式并写入ES

EFK架构转ELFK架构

文章总结

实战练习(filebeat+logstash+pipeline+ES+kibana)

一、画图,展示项目流程

二、项目流程及维护事宜

三、filebeat采集30w记录的nginx日志和不同格式的商品信息,用两个配置文件实现,一个业务一个配置文件

四、logstash写两个配置文件,监听两个端口

五、编写pipeline配置文件,运行logstash和filebeat

六、在kibana中分别制作两个的业务的可视化


filebeat采集nginx日志

1、安装nginx

[root@ELK101 ~]# curl -s  -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@ELK101 ~]# yum -y install nginx
[root@ELK101 ~]# systemctl enable --now nginx

2、访问nginx,收集一些日志数据

http://10.0.0.101/

3、配置filebeat采集nginx日志并写入ES集群

[root@ELK101 ~]# cat config/02-nginx-to-es.yaml
filebeat.inputs:
- type: log
  paths: ["/var/log/nginx/access.log*"]


output.elasticsearch:
  # hosts: ["http://10.0.0.101:19200","http://10.0.0.102:19200","http://10.0.0.103:19200"] 
  hosts: 
  - "http://10.0.0.101:19200"
  - "http://10.0.0.102:19200"
  - "http://10.0.0.103:19200"

# output.console:
#   pretty: true

4、运行filebeat,通过kibana查看数据

[root@ELK101 ~]# filebeat -e -c config/02-nginx-to-es.yaml
[root@ELK101 ~]# cat /var/log/nginx/access.log |wc -l
9 

【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化

filebeat模块使用

一、Nginx模块

1、启用filebeat的nginx模块

[root@ELK101 ~]# filebeat modules enable nginx
Enabled nginx

2、查看启用的模块

[root@ELK101 ~]# filebeat modules list|head -8
Enabled:
nginx

Disabled:
activemq
apache
auditd
aws

3、编辑filebeat配置文件

[root@ELK101 ~]# cat config/03-nginx-module-es.yaml
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false

output.elasticsearch:
  # hosts: ["http://10.0.0.101:19200","http://10.0.0.102:19200","http://10.0.0.103:19200"] 
  hosts: 
  - "http://10.0.0.101:19200"
  - "http://10.0.0.102:19200"
  - "http://10.0.0.103:19200"

# output.console:
#   pretty: true

4、启用实例,查看kibana中的索引是否解析出了字段

[root@ELK101 ~]# rm -rf /var/lib/filebeat/*
[root@ELK101 ~]# filebeat -e -c config/03-nginx-module-es.yaml

【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化

注意,这里模块解析出来的@timestamp与logstash解析出来的有区别,这里解析的是日志中的时间,不是日志写入时间

【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化

可以发现字段都被拆分解析出来了 

【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化

5、使用kibana创建地图

可以根据字段添加地图,但是由于我是本机IP访问的nginx,是私网,所以没有在地图上显示

【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化

二、tomcat模块

使用filebeat模块采集tomcat日志,这次我们使用二进制部署的filebeat,二进制部署的软件包,可以将它安装在任意的位置

1、下载filebeat二进制软件包,解压软件包

[root@ELK101 ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.5-linux-x86_64.tar.gz 
[root@ELK101 ~]# tar xf filebeat-7.17.5-linux-x86_64.tar.gz -C /koten/softwares/

2、安装tomcat、解压软件包并启动

[root@ELK101 ~]# wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.75/bin/apache-tomcat-9.0.75.tar.gz --no-check-certificate
[root@ELK101 ~]# tar xf apache-tomcat-9.0.75.tar.gz -C /koten/softwares/
[root@ELK101 ~]# /koten/softwares/apache-tomcat-9.0.75/bin/startup.sh 

3、访问tomcat获取日志数据

http://10.0.0.101:8080/

4、启用filebeat的tomcat模块

[root@ELK101 apache-tomcat-9.0.75]# cd /koten/softwares/filebeat-7.17.5-linux-x86_64/
[root@ELK101 filebeat-7.17.5-linux-x86_64]# ./filebeat modules enable tomcat
Enabled tomcat

5、配置tomcat模块的配置文件

[root@ELK101 filebeat-7.17.5-linux-x86_64]# egrep -v '^*#|^$' modules.d/tomcat.yml
- module: tomcat
  log:
    enabled: true
    var.input: file
    var.paths:
      - /koten/softwares/apache-tomcat-9.0.75/logs/*.txt    #指定apache的日志

6、编辑filebeat配置文件并启动filebeat

[root@ELK101 filebeat-7.17.5-linux-x86_64]# mkdir config
[root@ELK101 filebeat-7.17.5-linux-x86_64]# cat config/01-modules-to-es.yaml
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: true

output.elasticsearch:
  hosts: 
  - "http://10.0.0.101:19200"
  - "http://10.0.0.102:19200"
  - "http://10.0.0.103:19200"
[root@ELK101 filebeat-7.17.5-linux-x86_64]# rm -rf data/    #删除数据记录
[root@ELK101 filebeat-7.17.5-linux-x86_64]# ./filebeat -e -c config/01-modules-to-es.yaml 

7、查看kibana,成功写入了索引 

【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化

三、filebeat写数据到ES集群自定义索引

虽然写入了索引,但是我们需要自定义索引的名称及其他内容,可以在filebeat中自定义索引模板,还是用我们二进制软件包解压的filebeat。

注意,自定义模板的时候不要有比这个模板匹配范围更广的模板,否则会出问题。

1、编辑filebeat配置文件

[root@ELK101 filebeat-7.17.5-linux-x86_64]# cat config/02-modules-to-es_index.yaml
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: true

output.elasticsearch:
  hosts: 
  - "http://10.0.0.101:19200"
  - "http://10.0.0.102:19200"
  - "http://10.0.0.103:19200"
  # 配置索引的名称
  index: "koten-filebeat-tomcat-access-%{+yyyy.MM.dd}"    

# 禁用索引的生命周期管理
setup.ilm.enabled: false    #为true,我们自定义的将全部失效,还会写入之前随机的索引的模板,将其关闭我们的索引才可以自定义,若关闭了它没有自定义索引,也会创建成功索引,但是创建的索引就没有后面的计数了,而且会提示生命周期错误。
# 设置索引模板名称
setup.template.name: "koten-filebeat-tomcat"
# 设置索引的匹配模式
setup.template.pattern: "koten-filebeat-tomcat*"
# 是否覆盖现有的索引模板,若为true,不管索引模板是否一致都会覆盖,若有多个filebeat实例时,建议关闭,会让ES压力过大
setup.template.overwrite: false
# 配置索引的设置
setup.template.settings:
  # 设置分片数量
  index.number_of_shards: 5
  # 设置分片副本数量。
  index.number_of_replicas: 0

2、执行filebeat,在kibana中查看模板和索引信息

[root@ELK101 filebeat-7.17.5-linux-x86_64]# rm -rf data/
[root@ELK101 filebeat-7.17.5-linux-x86_64]# ./filebeat -e -c config/02-modules-to-es_index.yaml 

【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化

【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化

四、filebeat自定义字段之nginx写入ES

将nginx日志使用filebeat写入ES集群,要求指定索引名称为koten-filebeat-nginx-access-%{+yyyy.MM.dd},分片数为3,副本分片数为0

1、编写filebeat配置文件

[root@ELK101 filebeat-7.17.5-linux-x86_64]# cat config/03-nginx-to-es_index.yaml 
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: true

output.elasticsearch:
  hosts: 
  - "http://10.0.0.101:19200"
  - "http://10.0.0.102:19200"
  - "http://10.0.0.103:19200"
  # 配置索引的名称
  index: "koten-filebeat-nginx-access-%{+yyyy.MM.dd}"    

# 禁用索引的生命周期管理
setup.ilm.enabled: false
# 设置索引模板名称
setup.template.name: "koten-filebeat-nginx"
# 设置索引的匹配模式
setup.template.pattern: "koten-filebeat-nginx*"
# 是否覆盖现有的索引模板,若有多个filebeat实例时,建议关闭,会让ES压力过大
setup.template.overwrite: true
# 配置索引的设置
setup.template.settings:
  # 设置分片数量
  index.number_of_shards: 3
  # 设置分片副本数量。
  index.number_of_replicas: 0

2、设置只启用nginx模块,并修改nginx模块配置信息(也可以不设置只启用nginx模块,可以在filebeat配置文件中固定使用哪个模块)

[root@ELK101 filebeat-7.17.5-linux-x86_64]# ./filebeat modules enable nginx
Enabled nginx
[root@ELK101 filebeat-7.17.5-linux-x86_64]# ./filebeat modules list |head -8
Enabled:
nginx

Disabled:
activemq
apache
auditd
aws

[root@ELK101 filebeat-7.17.5-linux-x86_64]# egrep -v '^*#|^$' modules.d/nginx.yml
- module: nginx
  access:
    enabled: true
    var.paths: ["/var/log/nginx/access.log*"]
  error:
    enabled: true
  ingress_controller:
    enabled: false

3、运行filebeat并在kibana中查看索引信息

[root@ELK101 filebeat-7.17.5-linux-x86_64]# rm -rf data/
[root@ELK101 filebeat-7.17.5-linux-x86_64]# ./filebeat -e -c config/03-nginx-to-es_index.yaml 

【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化

五、filebeat自定义字段之tomcat写入ES

将tomcat日志使用filebeat写入ES集群,要求指定索引名称为koten-filebeat-tomcat-access-%{+yyyy.MM.dd},分片数为5,副本分片数为1

1、编写filebeat配置文件

[root@ELK101 filebeat-7.17.5-linux-x86_64]# cat config/04-tomcat-to-es_index.yaml
filebeat.config.modules:
  path: ${path.config}/modules.d/tomcat.yml    #固定模块,启用的时候就不用只留tomcat了
  reload.enabled: true

output.elasticsearch:
  hosts: 
  - "http://10.0.0.101:19200"
  - "http://10.0.0.102:19200"
  - "http://10.0.0.103:19200"
  # 配置索引的名称
  index: "koten-filebeat-tomcat-access-%{+yyyy.MM.dd}"    

# 禁用索引的生命周期管理
setup.ilm.enabled: false
# 设置索引模板名称
setup.template.name: "koten-filebeat-tomcat"
# 设置索引的匹配模式
setup.template.pattern: "koten-filebeat-tomcat*"
# 是否覆盖现有的索引模板,若有多个filebeat实例时,建议关闭,会让ES压力过大
setup.template.overwrite: true
# 配置索引的设置
setup.template.settings:
  # 设置分片数量
  index.number_of_shards: 5
  # 设置分片副本数量。
  index.number_of_replicas: 1

2、运行filebeat并在kibana中查看索引信息

结论:如果已经存在了索引模板,且与要更新的索引模块在分片数量上有冲突,那么索引模板的信息会更新,但是如果索引名字是之前的话还是会写入之前的索引,原因是修改索引模板后只对修改后生成的索引生效,解决办法就是更改索引名字,新建个新的索引,分片数就与索引模板的一致了,新建索引不再演示

[root@ELK101 filebeat-7.17.5-linux-x86_64]# rm -rf data/
[root@ELK101 filebeat-7.17.5-linux-x86_64]# ./filebeat -e -c config/04-tomcat-to-es_index.yaml 

【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化

 【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化

六、indices模块实现多个input写入不同的ES索引

1、编写配置文件

[root@ELK101 filebeat-7.17.5-linux-x86_64]# cat config/05-log-to-es.yaml
filebeat.inputs:
- type: log
  paths: ["/tmp/apps.log"]
  tags: "apps"

- type: log
  paths: ["/tmp/hobby.json"]
  tags: "json"

output.elasticsearch:
  hosts: 
  - "http://10.0.0.101:19200"
  - "http://10.0.0.102:19200"
  - "http://10.0.0.103:19200"

  indices:
    - index: "koten-filebeat-indices-json-%{+yyyy.MM.dd}"
      when.contains:
        tags: "json"
    - index: "koten-filebeat-indices-apps-%{+yyyy.MM.dd}"
      when.contains:
        tags: "apps"

setup.ilm.enabled: false
setup.template.name: "koten-filebeat-indices"
setup.template.pattern: "koten-filebeat-indices*"
setup.template.overwrite: true
setup.template.settings:
  index.number_of_shards: 10
  index.number_of_replicas: 0

2、启动filebeat

[root@ELK101 filebeat-7.17.5-linux-x86_64]# ./filebeat -e -c config/05-log-to-es.yaml 

3、写入日志信息,观察创建的索引信息

[root@ELK101 apache-tomcat-9.0.75]# echo apps > /tmp/apps.log

【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化

[root@ELK101 apache-tomcat-9.0.75]# echo {"name":"koten","hobby":["linux","nginx","tomcat"]} > /tmp/hobby.json

【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化

企业实战filebeat写入ES

模块的缺陷其实也有,比如tomcat模块并不会解析出来字段,在企业中我们不用模块写入,我们都是直接定义Nginx和tomcat,包括一些公司自研产品的日志格式,定义成自己想要的json格式,然后由filebeat解析json格式直接写入ES就行,如果想要解析出公网ip的经纬度,再写入logstash再写入ES中,我们接下来演示下自定义nginx和tomcat日志写入ES,自建产品可以直接将日志写成json格式也可以写成别的格式通过logstash转。

一、自定义Nginx日志格式并写入ES

1、先清空下之前的nginx日志

[root@ELK101 apache-tomcat-9.0.75]# > /var/log/nginx/access.log 
[root@ELK101 apache-tomcat-9.0.75]# > /var/log/nginx/error.log 

2、 修改nginx配置文件、检查语法、重启nginx,访问http://10.0.0.101/获取日志

[root@ELK101 apache-tomcat-9.0.75]# cat /etc/nginx/nginx.conf
   log_format koten_nginx_json '{"@timestamp":"$time_iso8601",'
                  '"host":"$server_addr",'
                  '"clientip":"$remote_addr",'
                  '"SendBytes":$body_bytes_sent,'
                  '"responsetime":$request_time,'
                  '"upstreamtime":"$upstream_response_time",'
                  '"upstreamhost":"$upstream_addr",'
                  '"http_host":"$host",'
                  '"uri":"$uri",'
                  '"domain":"$host",'
                  '"xff":"$http_x_forwarded_for",'
                  '"referer":"$http_referer",'
                  '"tcp_xff":"$proxy_protocol_addr",'
                  '"http_user_agent":"$http_user_agent",'
                  '"status":"$status"}';

    access_log  /var/log/nginx/access.log  koten_nginx_json;
[root@ELK101 apache-tomcat-9.0.75]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@ELK101 apache-tomcat-9.0.75]# systemctl restart nginx

3、编写filebeat配置文件

[root@ELK101 filebeat-7.17.5-linux-x86_64]# cat config/06-nginx-to-es.yaml
filebeat.inputs:
- type: log
  paths: ["/var/log/nginx/access.log"]
  processors:
  - decode_json_fields:
      fields: ["message"]
      target: ""

output.elasticsearch:
  hosts: 
  - "http://10.0.0.101:19200"
  - "http://10.0.0.102:19200"
  - "http://10.0.0.103:19200"
  # 配置索引的名称
  index: "koten-filebeat-nginx-access-%{+yyyy.MM.dd}-1"    

# 禁用索引的生命周期管理
setup.ilm.enabled: false
# 设置索引模板名称
setup.template.name: "koten-filebeat-nginx"
# 设置索引的匹配模式
setup.template.pattern: "koten-filebeat-nginx*"
# 是否覆盖现有的索引模板,若有多个filebeat实例时,建议关闭,会让ES压力过大
setup.template.overwrite: true
# 配置索引的设置
setup.template.settings:
  # 设置分片数量
  index.number_of_shards: 3
  # 设置分片副本数量。
  index.number_of_replicas: 0

4、运行filebeat,观察索引信息与索引下文档 

[root@ELK101 filebeat-7.17.5-linux-x86_64]# rm -rf /data
[root@ELK101 filebeat-7.17.5-linux-x86_64]# ./filebeat -e -c config/06-nginx-to-es.yaml

【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化

【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化

二、自定义tomcat日志格式并写入ES

1、先清空下之前的tomcat日志

[root@ELK101 apache-tomcat-9.0.75]# > logs/*.txt

2、 修改tomcat配置文件、重启tomcat,访问http://10.0.0.101:8080获取日志

[root@ELK101 filebeat-7.17.5-linux-x86_64]# cat /koten/softwares/apache-tomcat-9.0.75/conf/server.xml
......
 	<Host name="localhost"  appBase="webapps"
                unpackWARs="true" autoDeploy="true">

		<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
            prefix="tomcat.oldboyedu.com_access_log" suffix=".txt"
pattern="{&quot;clientip&quot;:&quot;%h&quot;,&quot;ClientUser&quot;:&quot;%l&quot;,&quot;authenticated&quot;:&quot;%u&quot;,&quot;AccessTime&quot;:&quot;%t&quot;,&quot;request&quot;:&quot;%r&quot;,&quot;status&quot;:&quot;%s&quot;,&quot;SendBytes&quot;:&quot;%b&quot;,&quot;Query?string&quot;:&quot;%q&quot;,&quot;partner&quot;:&quot;%{Referer}i&quot;,&quot;http_user_agent&quot;:&quot;%{User-Agent}i&quot;}"/>

          </Host>
      </Engine>
    </Service>
  </Server>
[root@ELK101 filebeat-7.17.5-linux-x86_64]# /koten/softwares/apache-tomcat-9.0.75/bin/shutdown.sh 
[root@ELK101 filebeat-7.17.5-linux-x86_64]# /koten/softwares/apache-tomcat-9.0.75/bin/startup.sh 

3、编写filebeat配置文件

[root@ELK101 filebeat-7.17.5-linux-x86_64]# cat config/07-tomcat-to-es.yaml
filebeat.inputs:
- type: log
  paths: ["/koten/softwares/apache-tomcat-9.0.75/logs/*.txt"]
  processors:
  - decode_json_fields:
      fields: ["message"]
      target: ""

output.elasticsearch:
  hosts: 
  - "http://10.0.0.101:19200"
  - "http://10.0.0.102:19200"
  - "http://10.0.0.103:19200"
  # 配置索引的名称
  index: "koten-filebeat-tomcat-access-%{+yyyy.MM.dd}-1"    

# 禁用索引的生命周期管理
setup.ilm.enabled: false
# 设置索引模板名称
setup.template.name: "koten-filebeat-tomcat"
# 设置索引的匹配模式
setup.template.pattern: "koten-filebeat-tomcat*"
# 是否覆盖现有的索引模板,若有多个filebeat实例时,建议关闭,会让ES压力过大
setup.template.overwrite: true
# 配置索引的设置
setup.template.settings:
  # 设置分片数量
  index.number_of_shards: 5
  # 设置分片副本数量。
  index.number_of_replicas: 1

4、运行filebeat,观察索引信息与索引下文档 

[root@ELK101 filebeat-7.17.5-linux-x86_64]# rm -rf data/
[root@ELK101 filebeat-7.17.5-linux-x86_64]# ./filebeat -e -c config/07-tomcat-to-es.yaml 

【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化

 【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化

EFK架构转ELFK架构

当我们的efk不能满足需求时,例如有一些字段信息,我们想要移除,用到logstash,我们就选择将logstash加入到我们的架构中

1、修改logstash配置文件,启动logstash

[root@ELK102 ~]# cat config_logstash/16-filebeat-to-es.conf 
input {
  beats {
    port => 8888
  }
}  


filter {
   mutate {
     remove_field => [ "@version","agent","host","input","ecs","log","tags" ]
   }
}



output {
  if [apps] == "nginx" {
    elasticsearch {
      hosts => ["10.0.0.101:19200","10.0.0.102:19200","10.0.0.103:19200"]
      index => "koten-if-nginx-%{+yyyy.MM.dd}"
    } 
  } else if [apps] == "tomcat" {
    elasticsearch {
      hosts => ["10.0.0.101:19200","10.0.0.102:19200","10.0.0.103:19200"]
      index => "koten-if-tomcat-%{+yyyy.MM.dd}"
    }
  }

  stdout {
     codec => rubydebug 
  } 
}
[root@ELK102 ~]# logstash -rf config_logstash/16-filebeat-to-es.conf

2、采集nginx日志

[root@ELK101 filebeat-7.17.5-linux-x86_64]# cat config/08-nginx-to-logstash.yaml
filebeat.inputs:
- type: log
  paths: ["/var/log/nginx/access.log"]
  processors:
  - decode_json_fields:
      fields: ["message"]
      target: ""
  - add_fields:
      target: ""
      fields:
        apps: nginx

output.logstash:
  hosts: ["10.0.0.102:8888"]

[root@ELK101 filebeat-7.17.5-linux-x86_64]# rm -rf data/
[root@ELK101 filebeat-7.17.5-linux-x86_64]# ./filebeat -e -c config/08-nginx-to-logstash.yaml 

3、采集tomcat日志

[root@ELK101 filebeat-7.17.5-linux-x86_64]# cat config/09-tomcat-to-logstash.yaml
filebeat.inputs:
- type: log
  paths: ["/koten/softwares/apache-tomcat-9.0.75/logs/*.txt"]
  fields:
    apps: tomcat
  fields_under_root: true  #放在顶部字段
  json.keys_under_root: true  #将message进行json解析,且不保留原有数据
  json.add_error_key: true  #如果解析格式出错,会打印错误
  #  用上面和下面的办法进行json解析都可以
  #  processors:
  #  - decode_json_fields:
  #      fields: ["message"]
  #      target: ""

output.logstash:
  hosts: ["10.0.0.102:8888"]

[root@ELK101 filebeat-7.17.5-linux-x86_64]# rm -rf tomcat/
[root@ELK101 filebeat-7.17.5-linux-x86_64]# ./filebeat -e -c config/09-tomcat-to-logstash.yaml --path.data tomcat   #再次运行filebeat实例需要指定新的数据目录

4、在kibana中验证数据是否存在,看输出是否有删除我们指定的字段

【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化

[root@ELK102 ~]# logstash -rf config_logstash/16-filebeat-to-es.conf
......
{
            "message" => "{\"@timestamp\":\"2023-05-31T21:17:40+08:00\",\"host\":\"10.0.0.101\",\"clientip\":\"10.0.0.1\",\"SendBytes\":4833,\"responsetime\":0.000,\"upstreamtime\":\"-\",\"upstreamhost\":\"-\",\"http_host\":\"10.0.0.101\",\"uri\":\"/index.html\",\"domain\":\"10.0.0.101\",\"xff\":\"-\",\"referer\":\"-\",\"tcp_xff\":\"-\",\"http_user_agent\":\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57\",\"status\":\"200\"}",
           "clientip" => "10.0.0.1",
            "tcp_xff" => "-",
       "upstreamhost" => "-",
            "referer" => "-",
                "uri" => "/index.html",
             "status" => "200",
          "SendBytes" => 4833,
    "http_user_agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57",
          "http_host" => "10.0.0.101",
         "@timestamp" => 2023-05-31T16:11:34.711Z,
             "domain" => "10.0.0.101",
               "apps" => "nginx",
                "xff" => "-",
       "responsetime" => 0,
       "upstreamtime" => "-"
}
......
{
         "ClientUser" => "-",
       "Query?string" => "",
         "AccessTime" => "[01/Jun/2023:00:07:12 +0800]",
             "status" => "200",
          "SendBytes" => "11230",
            "partner" => "-",
    "http_user_agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57",
         "@timestamp" => 2023-05-31T16:11:36.664Z,
           "clientip" => "10.0.0.1",
               "apps" => "tomcat",
      "authenticated" => "-",
            "request" => "GET / HTTP/1.1"
}
......

文章总结

文章讲解了filebeat采集日志时,nginx,tomcat,自建产品日志的一些场景和措施,将efk架构转成elfk架构,与logstash中的grok、date、geoip、muate、user_agent、drop、json等插件结合使用,讲解了filebeat可以对logstash和elasticsearsh进行输出,接下来还有一个实战练习,可以对这些内容进行练习巩固。

实战练习(filebeat+logstash+pipeline+ES+kibana)

使用filebeat采集自己生成的近30万条记录的nginx日志与采集不同格式的商品日志,写入logstash分析经纬度,日期处理,客户端设备分析,过滤无用的字段,要求使用logstash的pipline技术实现,使用kibana出图展示,这些操作之前画图,说明项目流程,项目架构,操作中实时写步骤,以及你维护的具体事宜。

一、画图,展示项目流程

【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化

【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化

二、项目流程及维护事宜

业务1:30万条数据都是nginx原本日志格式,通过filbeat将数据转到logstash,logstash排除多余字段,转换的时候加上geoip,解析公网的IP地址,用于kibana进行数据分析

业务2:商品数据是不同的格式,bulk是有多余字段,为节省logstash压力,我们选择通过filebeat过滤create字段,转到logstash之后再进行字段过滤再进行进一步的解析,有txt格式用字段分割的可以打上tags或指定其他字段用if语句进行判断,logstash排除多余字段,转换的时候加上geoip,解析公网的IP地址,用于kibana进行数据分析

注意:业务1数据量大,添加索引的时候可能需要加大es堆内存,之前设置的是256m,视情况调整;可以先测试下输出,看下两个业务的ip解析出来是什么字段,再进行geoip解析经纬度。

总结:由于需求用到pipeline,所以我们在logstash写两个配置文件,一个业务一个;logstash也是两个配置文件,一个业务一个;kibana可视化我们制作geoip的地图,其他的可以点点点自行添加

三、filebeat采集30w记录的nginx日志和不同格式的商品信息,用两个配置文件实现,一个业务一个配置文件

业务1配置文件

[root@ELK101 ~]# cat config/09-nginx-to-logstash.yaml
filebeat.inputs:
- type: log
  paths:
    - /tmp/all_nginx.txt    #提前准备好30w条nginx原生记录

output.logstash:
  hosts: ["10.0.0.102:8888"]

业务2配置文件

[root@ELK101 ~]# cat config/10-txt-bulk-json-to-logstash.yaml
filebeat.inputs:
- type: log
  paths: ["/tmp/shop/*.txt"]
  processors:
  - add_fields:
      target: ""
      fields:
        apps: txt

- type: log
  paths: ["/tmp/shop/*.bulk"]
  tags: "bulk"
  processors:
  - add_fields:
      target: ""
      fields:
        apps: bulk
  - drop_event:
      when:
        contains:
          message: "create"

- type: log
  paths: ["/tmp/shop/*.json"]
  tags: "json"
  processors:
  - add_fields:
      target: ""
      fields:
        apps: json

output.logstash:
  hosts: ["10.0.0.102:8889"]

四、logstash写两个配置文件,监听两个端口

业务1配置文件

[root@ELK102 ~]# cat config_logstash/17-filebeat-to-es.conf
input {
  beats {
    port => 8888
  }
}  


filter {
   grok{
     match => {
       "message" => "%{COMMONAPACHELOG}"
     }
   }

   mutate {
     remove_field => [ "@version","agent","host","input","ecs","log" ]
   }

   geoip {
     source =>  "clientip"
   }
}



output {
    elasticsearch {
      hosts => ["10.0.0.101:19200","10.0.0.102:19200","10.0.0.103:19200"]
      index => "koten-if-nginx-%{+yyyy.MM.dd}-01"
    } 
}

业务2配置文件

[root@ELK102 ~]# cat config_logstash/18-filebeat-to-es.conf
input { 
  beats {
    port => 8889
  }
}

filter {
   if [apps] == "txt" {
       mutate {
          split => { "message" => "," }
       }

       mutate {
         add_field => {
	       ip_addr => "%{[message][1]}"
           title => "%{[message][3]}"
           price => "%{[message][5]}"
           brand => "%{[message][7]}"
           item => "%{[message][9]}"
           group => "%{[message][11]}"
           author => "%{[message][13]}"
         }
      }
    } else if [apps] == "bulk" {
     
      json {
        source =>  "message"
      }
 
    } else if [apps] == "json" {
 
       json {
         source =>  "message"
       }
    }
   mutate {
     remove_field => [ "@version","agent","host","input","ecs","log","tags" ]
   }
   geoip {
     source =>  "ip_addr"
   }
}



output { 
    elasticsearch {
      hosts => ["10.0.0.101:19200","10.0.0.102:19200","10.0.0.103:19200"]
      index => "koten-shop-%{+yyyy.MM.dd}-01"
    } 
}

五、编写pipeline配置文件,运行logstash和filebeat

编写pipeline配置文件

[root@ELK102 ~]# egrep -v '^$|^*#' /etc/logstash/pipelines.yml 
- pipeline.id: nginx
  path.config: "/root/config_logstash/17-filebeat-to-es.conf"
- pipeline.id: shop
  path.config: "/root/config_logstash/18-filebeat-to-es.conf"

运行前可以先创建模板,加个地理坐标点的映射 

【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化

【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化 【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化 

运行logstash

[root@ELK102 ~]# logstash

等待logstash运行起来运行filebeat,注意要指定数据目录

[root@ELK101 ~]# filebeat -e -c config/09-nginx-to-logstash.yaml --path.data nginx
[root@ELK101 ~]# filebeat -e -c config/10-txt-bulk-json-to-logstash.yaml --path.data txt-bulk-json

由于我们业务1,30万条数据加索引,会占用大量堆内存报错,我们可以增加堆内存 

【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化

ELK所有集群节点都增加下JVM

[root@ELK102 ~]# egrep -v '^$|^*#' /koten/softwares/elasticsearch-7.17.5/config/jvm.options
-Xms512m
-Xmx512m
......
[root@ELK102 ~]# systemctl restart es7

六、在kibana中分别制作两个的业务的可视化

1、查看索引

【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化

2、创建索引模式 

【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化

【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习),运维知识分享,# 大神运维知识,elasticsearch,filebeat,tomcat,nginx,运维,kibana,数据可视化3、制作地图可视化

业务1

图片违规了。。。

业务2 

图片违规了。。。


我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!文章来源地址https://www.toymoban.com/news/detail-752331.html

到了这里,关于【运维知识大神篇】超详细的ELFK日志分析教程7(filebeat常用模块+filebeat采集固定格式日志+自定义日志格式写入ES+EFK架构转ELFK架构+两个业务实战练习)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker搭建最新ELFK分布式日志收集系统(elasticsearch+logstash+filebeats+kibana7.16.1)

    随着分布式项目的集群部署,日志的存储也分散开来,在日后出现问题进行日志定位时就会出现很困难,服务器很多会做负载均衡,这样最终请求所落在的服务器也随机起来,所以好的方式就是集中收集起来,不需要一台一台服务器去查,方便查看。 ELFK是Elasticsearch+Logstash+F

    2024年02月08日
    浏览(49)
  • 基于Filebeat、Kafka搭建ELK日志分析平台详细步骤

    写在前头:公司一直没有搭建一个支持实时查询日志的平台,平常看日志都得去服务器下载,大大降低开发效率,前段时间有大佬同事搭建了一款日志平台,支持sit,uat等各个环境的日志实时查询,大大提高bug定位速度。因对其感兴趣特向大佬请教,学习记录下搭建流程。 选

    2024年02月06日
    浏览(52)
  • 【运维知识大神篇】运维人必学的Docker教程1(Docker安装部署+Docker镜像管理+容器管理常用命令+搭建docker的本地yum源+windows系统安装docker环境)

    本篇文章开始给大家介绍Docker,这个是我非常喜欢的一个服务,介绍给大家,希望大家也能喜欢! 目录 何为容器 Docker环境安装部署 一、yum安装(CentOS7.9) 二、rpm包安装(CentOS) 三、卸载docker环境 四、安装指定的docker版本 五、Ubuntu安装docker环境 六、使用deb安装docker 七、

    2024年01月18日
    浏览(110)
  • 【运维知识大神篇】运维人必学的Docker教程6(Docker-Compose使用详解+Linux特性管理+macvlan技术+consul实现大规模跨主机通信overlay+私有仓库harbor)

    本篇文章继续给大家介绍Docker的有关内容,包括docker启动特权容器及利用特权修改内核参数,Attach和Exec区别,Docker-compose使用详解,Linux特性管理,macvlan技术实现docker跨主机通信,使用consul工具实现大规模跨主机通信overlay(基于vxlan实现),Docker相关参数说明,测试使用的

    2024年02月20日
    浏览(49)
  • ELK、ELFK日志分析系统

    ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。 1.1.1 ElasticSearch ElasticSearch是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索引擎,用来存储各类日志。 E

    2024年02月13日
    浏览(50)
  • ELK日志分析系统和ELFK

    目录 什么要做日志分析平台 一、 Elasticsearch elasticsearch核心概念 二、Logstash Logstash 的主要组件 三、Kibana 介绍 功能 ELK搭建 四、Filebeat Filebeat工作方式 Filebeat工作原理 五、Filebeat和Logstash 为什么使用filebeat收集日志更好 Filebeat结合Logstash的好处 六、ELK+Filebeat+Kafka+Zookeeper ELK 是

    2023年04月08日
    浏览(35)
  • ELK 企业级日志分析系统 ELFK

    ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。 使用ELK日志文件系统的原因:日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了

    2024年02月07日
    浏览(42)
  • ELFK日志分析系统并使用Filter对日志数据进行处理

    Node1节点(2C/4G):node1/192.168.154.10 Elasticsearch Node2节点(2C/4G):node2/192.168.154.11 Elasticsearch Apache节点:apache/192.168.154.12 Logstash Kibana Apache Filebeat节点:filebeat/192.168.154.13 Filebeat 先在Filebeat节点添加网页文件 浏览器访问http://192.168.154.13/test.html获取日志 1.安装 Filebeat 2.设置 f

    2024年02月06日
    浏览(43)
  • 【ELFK】之Filebeat

    1、Filebeat是什么? Filebeat适用于转发和集中数据的轻量级传送工具 ,Filebeat监视了指定的日志文件或位置,收集日志事件,并将他们转发到Elasticsearch或Logstash进行索引。 **Filebeat的工作方式:**启动Filebeat时,它将启动一个或多个输入,这些输入将在为日志数据指定的位置中查

    2024年02月06日
    浏览(29)
  • 【ELFK】Filebeat+ELK 部署

    Filebeat+ELK 部署 在 Filebeat 节点上操作 环境准备 1)安装 Filebeat #上传软件包 filebeat-6.2.4-linux-x86_64.tar.gz 到/opt目录 解压 rpm 默认会安装到/etc/ 目录下;tar安装的filebeat 文件要移动到/user/local/ 下  2)设置 filebeat 的主配置文件 先备份再修改 修改filebeat.yml 配置文件 1 1 1 1 1 启动

    2024年04月15日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包