过滤插件(Filter)

过滤阶段:将日志格式化处理

常用插件:

• json • kv • grok • geoip • date

过滤插件:通用配置字段

过滤插件都支持的字段:

• add_field 如果过滤成功,添加一个字段到这个事件

• add_tags 如果过滤成功,添加任意数量的标签到这个事件

• remove_field 如果过滤成功,从这个事件移除任意字段

• remove_tag 如果过滤成功,从这个事件移除任意标签

过滤插件:JSON

JSON插件:接收一个json数据,将其展开为Logstash事件中的 数据结构,放到事件顶层。

常用字段:

• source 指定要解析的字段,一般是原始消息message字段

• target 将解析的结果放到指定字段,如果不指定,默认在 事件的顶层

示例:解析HTTP请求

修改logstash配置文件

vim /opt/elk/logstash/conf.d/test.conf

input {
file {
path => "/var/log/test/*.log"
exclude => "1.log"
start_position => "beginning"
tags => "web"
tags => "nginx"
type => "access"
add_field => {
"project" => "microservice"
"app" => "product"
}
}
}
filter {
json {
source => "message"
}
}

output {
elasticsearch {
hosts =>
["192.168.0.11:9200"]
index => "test-%{+YYYY.MM.dd}"
}
#file {
# path => "/tmp/test.log"
# }
}

热加载配置

kill -HUP <logstash pid>

模拟数据:

vim /var/log/test/2.log 
#json格式,如果不是json格式会解析失败
{"remote_addr": "192.168.1.10","url":"/index","status":"200"}

访问kibana:

http://192.168.0.12:5601/

这里只会展示以test-开头所有的索引,因为这里的索引是按照天进行存储的,这样就可以匹配所有的天,这样好处是清理索引历史的日志,就可以针对天删除索引了。也就是删除数据库一样。

可以看到kibana可以根据这些字段查询出我们所需要的数据

可以看到这些字段很重要,这些字段可以标识出日志当中有哪些关键字段,从而根据这些字段查询我们需要的数据。可以看到通过json过滤模块格式化处理解析为顶层的字段

参考连接:

https://blog.csdn.net/qq_34556414/article/details/111251732

过滤插件:KV

KV插件:接收一个键值数据,按照指定分隔符解析为Logstash 事件中的数据结构,放到事件顶层。 常用字段:

• field_split 指定键值分隔符,默认空

示例:解析URL中参数

vim /opt/elk/logstash/conf.d/test.conf

input {
file {
path => "/var/log/test/*.log"
exclude => "1.log"
start_position => "beginning"
tags => "web"
tags => "nginx"
type => "access"
add_field => {
"project" => "microservice"
"app" => "product"
}
}
}
filter {
kv {
field_split => "&?"
}
}

output {
elasticsearch {
hosts =>
["192.168.0.11:9200"]
index => "test-%{+YYYY.MM.dd}"
}
#file {
# path => "/tmp/test.log"
# }
}

热加载配置

kill -HUP <logstash pid>

模拟数据:

vim /var/log/test/2.log 
#键值对
hello?id=1&name=azhe&age=23

访问kibana:

http://192.168.0.12:5601/