本篇文章继续给大家介绍ELFK日志分析,详细请见下面目录。
目录
实战练习(filebeat+logstash+pipeline+ES+kibana)
三、filebeat采集30w记录的nginx日志和不同格式的商品信息,用两个配置文件实现,一个业务一个配置文件
五、编写pipeline配置文件,运行logstash和filebeat
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,收集一些日志数据
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
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
注意,这里模块解析出来的@timestamp与logstash解析出来的有区别,这里解析的是日志中的时间,不是日志写入时间
可以发现字段都被拆分解析出来了
5、使用kibana创建地图
可以根据字段添加地图,但是由于我是本机IP访问的nginx,是私网,所以没有在地图上显示
二、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获取日志数据
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,成功写入了索引
三、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
四、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
五、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
六、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
[root@ELK101 apache-tomcat-9.0.75]# echo {"name":"koten","hobby":["linux","nginx","tomcat"]} > /tmp/hobby.json
企业实战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
二、自定义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="{"clientip":"%h","ClientUser":"%l","authenticated":"%u","AccessTime":"%t","request":"%r","status":"%s","SendBytes":"%b","Query?string":"%q","partner":"%{Referer}i","http_user_agent":"%{User-Agent}i"}"/>
</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
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中验证数据是否存在,看输出是否有删除我们指定的字段
[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出图展示,这些操作之前画图,说明项目流程,项目架构,操作中实时写步骤,以及你维护的具体事宜。
一、画图,展示项目流程
二、项目流程及维护事宜
业务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"
运行前可以先创建模板,加个地理坐标点的映射
运行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万条数据加索引,会占用大量堆内存报错,我们可以增加堆内存
ELK所有集群节点都增加下JVM
[root@ELK102 ~]# egrep -v '^$|^*#' /koten/softwares/elasticsearch-7.17.5/config/jvm.options
-Xms512m
-Xmx512m
......
[root@ELK102 ~]# systemctl restart es7
六、在kibana中分别制作两个的业务的可视化
1、查看索引
2、创建索引模式
3、制作地图可视化
业务1
图片违规了。。。
业务2
图片违规了。。。
我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!