三人行必有我师

通过配置logstash,将六行日志合并为一行呢

Logstash | 作者 shuangshuang | 发布于2019年08月23日 | 阅读数:2057

类似想下面的日志,怎样把请求URL,请求IP,请求方法,请求参数,接口耗时和返回参数,通过logstash配置,合并为一行呢
c5e0384f9bd8a698ad11b2fbbeceb02.png
已邀请:

stone_xy

赞同来自: shuangshuang Reilee

用Logstash的MultiLine codec处理就可以了
示例配置:
input {
file {
path => "/opt/es/tmp/test/*"
codec => multiline {
pattern => ".*请求URL.*"
negate => true
what => "previous"
}
}
}
output {
elasticsearch {
hosts => ["http://10.0.0.200:9200"]
index => "test-index"
}
}

示例数据
[2019-08-23T01:30:00,016][INFO ] 请求URL:www.example.com
[2019-08-23T01:30:00,016][INFO ] 请求IP:192.168.0.122
[2019-08-23T01:30:00,016][INFO ] 请求方法: GET
[2019-08-23T01:30:00,016][INFO ] 请求参数: {"test": "xxx"}
[2019-08-23T01:30:00,016][INFO ] 请求URL:www.example.com
[2019-08-23T01:30:00,016][INFO ] 请求IP:192.168.0.123
[2019-08-23T01:30:00,016][INFO ] 请求方法: POST
[2019-08-23T01:30:00,016][INFO ] 请求参数: {"test": "xxx"}
结果:
      {
"_index" : "test-index",
"_type" : "doc",
"_id" : "rzPOvWwBZFTn6WUnbRUg",
"_score" : 1.0,
"_source" : {
"@version" : "1",
"host" : "ecs-aaaaaa",
"path" : "/opt/es/tmp/test/data.log",
"message" : """
[2019-08-23T01:30:00,016][INFO ] 请求URL:www.example.com
[2019-08-23T01:30:00,016][INFO ] 请求IP:192.168.0.122
[2019-08-23T01:30:00,016][INFO ] 请求方法: GET
[2019-08-23T01:30:00,016][INFO ] 请求参数: {"test": "xxx"}
""",
"@timestamp" : "2019-08-23T09:28:37.641Z",
"tags" : [
"multiline"
]
}
},
其实如果在日志打印的源端处理一下都打印在一起或许是个更好的方式。

shuangshuang

赞同来自:

嗯,我会尝试一下
 

要回复问题请先登录注册