对于现在很多的生产环境来说,都会舍弃logstash来使用filebeat,但是日志在kibana显示的时候,格式效果不是很好,这就需要用到es中的ingest node -->官方文档
总的来说,它就是用来代替logstash对日志解析的,能在es进行索引之前,对日志进行一个解析。
话不多说,直接上代码:
这一段代码是在es中添加一个管道,用于筛选出filebeat输出的日志。
curl -X PUT "localhost:9200/_ingest/pipeline/filebeat-log" -H 'Content-Type: application/json' -d'
{
"description" : "describe pipeline",
"processors" : [
{
"grok" : {
"field": "message",
"patterns": ["\\[%{TIMESTAMP_ISO8601:log_time}\\] %{NOTSPACE:thread} %{NOTSPACE:log_level} %{NOTSPACE:java_class} - %{GREEDYDATA:content}"]
}
},
{
"date": { #这一部分是为了使日志时间和本地时间对应的设置。
"field": "log_time",
"formats": ["yyyy-MM-dd HH:mm:ss:SSS"],
"timezone": "Asia/Shanghai",
"target_field": "@timestamp"
}
}
]
}
'
然后在 filebeat.yml 配置文件添加如下内容,为你的管道命名。

这样就完成了所有的工作。这时启动filebeat, 如果如出以下错误信息
ERROR pipeline/output.go:92 Failed to publish events: temporary bulk send failure 1 大概率是因为你发送的日志格式无法与grok表达式匹配,修改processor定义json
cat /etc/nginx/nginx.conf

把原来的format注释掉 换上json格式的访问日志输出 nginx -s reload
网友评论