Logstash数据处理服务将采集的不同日志数据存储到不同的ES索引库

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.观察是否生成索引库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AFAROAUD-1650069970178)(.\ELKStack-图片笔记存放\image-20211224142530193.png)]

2.4.在kibana上关联索引模式在这里插入图片描述

2.5.浏览日志数据

nginx-app索引库中的数据

在这里插入图片描述

tomcat-app索引库中的数据
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44953658/article/details/124208125