好的想法是十分钱一打,真正无价的是能够实现这些想法的人。

Filebeat 采集 Nginx日志时通过 pipeline 处理,因为 内容包含 " 报错

Elasticsearch | 作者 zj_likang | 发布于2020年09月01日 | 阅读数:4112

Filebeat 采集 Nginx日志时通过 pipeline 处理,因为 日志内容包含 " 报错
 
添加 pipeline 
%{IP:client} - - \[%{HTTPDATE:time}\] "%{WORD:httpmoth} %{NOTSPACE:req} HTTP/%{NUMBER:httpversion}" %{NUMBER:status} %{NUMBER:bytes} %{QS:referer} %{QS:agent} %{QS:xforward}

1598951695(1).jpg

 
使用 pipeline 时filebeat报错内容如下
 
2020-09-01T14:02:35.879+0800    WARN    [elasticsearch] elasticsearch/client.go:385     Cannot index event publisher.Event{Content:beat.Event{Timestamp:time.Time{wall:0xbfcb96deb12928bc, ext:10199156998, loc:(*time.Location)(0x318cf40)}, Meta:{"pipeline":"nginx-log-a"}, Fields:{"fields":{"index_name":"1acd496a-8cbe-4ed4-b7c0-6e671b8f4bd51"},"file_path":"/var/opt/.lstack/log/log-filebeat/nginx.log","json":{},"log_offset":466,"message":"20.201.0.53 - - [20/May/2020:16:45:04 +0800] \"GET /html-dev.tar HTTP/1.1\" 200 46128581 \"-\" \"Wget/1.18 (linux-musl)\" \"-\"","tags":["1acd496a-8cbe-4ed4-b7c0-6e671b8f4bd51"]}, Private:file.State{Id:"", Finished:false, Fileinfo:(*os.fileStat)(0xc0004b6c30), Source:"/var/opt/.lstack/log/log-filebeat/nginx.log", Offset:586, Timestamp:time.Time{wall:0xbfcb96deb1126274, ext:10197664426, loc:(*time.Location)(0x318cf40)}, TTL:-1, Type:"log", Meta:map[string]string(nil), FileStateOS:file.StateOS{Inode:0x6223182, Device:0xfd00}}, TimeSeries:false}, Flags:0x1, Cache:publisher.EventCache{m:common.MapStr(nil)}} (status=400): {"type":"illegal_argument_exception","reason":"Provided Grok expressions do not match field value: [20.201.0.53 - - [20/May/2020:16:45:04 +0800] \"GET /html-dev.tar HTTP/1.1\" 200 46128581 \"-\" \"Wget/1.18 (linux-musl)\" \"-\"]"}
 
意思好像是 表达式和日志内容不匹配。
于是采用默认采集模式,看看采集的内容
 
默认配置下采集的结果:
"message": "8.11.0.29 - - [20/May/2020:16:50:47 +0800] \"GET /dms2/Login.jsp HTTP/1.1\" 404 3650 \"-\" \"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)\" \"-\""
 
分析原因应该是 filebeat在推送ES时 转换成 Json串,特殊字符进行了转义,Es  pipeline 的处理时 配置的 ,把转义字符也当做了字符串处理? 
这是一个bug ?
怎么才能让  pipeline 能正常处理转义字符呢?
 
我未使过 module ,因为我的 filebeat 是给客户使用的,不知道客户会采集什么样的内容(java ,nginx ,文本文件,任意格式文件),是根据用户的配置选择(怎么多行匹配,怎么切割日志内容)去修改 filebeat的热配置文件来完成 设置的 
 
 
 
已邀请:

要回复问题请先登录注册