Logstash将不同的日志数据存储到不同的索引库
1.如何将logstash采集的数据存储到不同的索引库
我们可以针对不同的日志数据,在日志数据中增加不同的字段,然后通过条件判断的方式,将不同字段的日志数据存放到不同的日志索引库中。
可以在filter中进行条件判断将不同日志存储到不同的索引库,也可以在outpust中进行条件判断,也能够将不同日志存放到不同的索引库中。
条件判断操作符:
- 比较操作符:==(等于) !=(不等于) <(小于) >(大于) <=(小于等于) >=(大于等于)
- 正则匹配操作符:=~(正则表达式) !~(正则表达式) 前者为匹配正则,后者为不匹配某个正则
- 成员操作符:in(包含) not in (不包含)
- 逻辑操作符:and(与) or(或) nand(非与) xor(非或)
- 一元运算符:!(取反) ()(符合表达式) !()(对复合表达式结果取反)
条件判断语句:
if <表达式> {
<语句>
} else if <表达式> {
<语句>
} else {
<语句>
}
典型的应用场景:
- 项目程序有很多,将每个应用程序的日志存储到不同的索引库,方便添加索引模式,便于开发查询响应日志系统的数据。
- 增加一个应用程序名称的字段,通过字段的不同将数据分别存储到不同的ES索引中。
- 根据环境的不同,可以将所有测试环境的日写入到一个索引库中。
- 增加两个字段,一个是应用程序的名称,一个是所在的环境,通过环境字段将同一环境下的所有程序日志写入到一个索引库,然后根据程序的不同,通过筛选程序名称的字段,获取对应系统的日志。
针对两种常见的应用程序分别来演示,logstash可以在filter中将日志存储到不同的索引,也可以在output中配置,针对这两种配置,也分别演示。
2.将不同的应用程序日志写入到不同的索引库中
通过配置filter实现日志存储到指定索引库。
在filter中实现日志分流存储,就需要用mutate插件了,在日志中增加一个字段,这个字段就是元数据,将元数据设置成索引库的名称,然后output中引用这个元数据的值。
2.1.配置logstash将日志分流
1.配置logstash
[root@elkstack-1 ~]# vim /data/elk/logstash/conf.d/nginx_tomcat.conf
input {
file {
path => "/var/log/test/nginx.log"
add_field => {
"app" => "nginx" #搜集nginx的日志,在日志中增加一个app=nginx的字段
}
}
file {
path => "/var/log/test/tomcat.log"
add_field => {
"app" => "tomcat"
}
}
}
filter {
if [app] in ["nginx","tengine"] {
#判断app的字段值为nginx或者tengine
mutate {
#定义mutate
add_field => {
#增加一个字段
"[@metadata][target_index]" => "nginx-app-%{+YYYY.MM.dd}" #声明字段是元数据,字段名为target_index,值为nginx日志存储的索引库名称
}
}
}
else if [app] == "tomcat" {
#判断app的字段值为tomcat
mutate {
#定义mutate
add_field => {
#增加一个字段
"[@metadata][target_index]" => "tomcat-app-%{+YYYY.MM.dd}" #声明字段是元数据,字段名为target_index,值为tomcat日志存储的索引库名称
}
}
}
else {
#如果所有条件都不满足,那么就存储到下面的这个索引库
mutate {
add_field => {
"[@metadata][target_index]" => "unknown-app-%{+YYYY.MM.dd}" #值为unknown
}
}
}
}
output {
elasticsearch {
hosts => ["192.168.20.11:9200","192.168.20.12:9200","192.168.20.13:9200"]
index => "%{[@metadata][target_index]}" #引用元数据target_index,将对应的日志存储到对应的索引库中
}
}
2.重启logstash
[root@elkstack-1 conf.d]# systemctl restart logstash
2.2.产生日志数据
echo "192.168.10.1 [23/Dec/2021:14:25:54 +0800] GET /login.html 200 Chrome/86.0.4240.198 Safari/537.36" >>/var/log/test/nginx.log
echo "24-Dec-2021 13:11:15.545 INFO [http-nio-7180-exec-3] org.apache.pdfbox.pdmodel.font.PDCIDFontType2.<init> OpenType Layout tables used in font ABCDEE+SimHei are not implemented in PDFBox and will be ignored" >>/var/log/test/tomcat.log
2.3.观察是否生成索引库
2.4.在kibana上关联索引模式
2.5.浏览日志数据
nginx-app索引库中的数据
tomcat-app索引库中的数据