如何解决如何使用logstash解析遵循ECS弹性通用模式的纯文本日志?
我正在使用rsyslog将纯文本日志发送到logstash。但是我无法通过grok将数据分配给host.name或host.ip字段。系统通过以下错误提示:
无法将事件索引到Elasticsearch。 {:status => 400,:action => [“ index”,{:_id => nil,:_index =>“ logstash-syslog-2020.09.03”,:routing => nil,:_type =>“ _ doc” },#LogStash :: Event:0x3273b8c],:response => {“ index” => {“ _ index” =>“ logstash-syslog-2020.09.03”,“ _type” =>“ _ doc”,“ _id” = >“ i2hRU3QBeWqyaoMf1lgh”,“状态” => 400,“错误” => {“类型” =>“ mapper_parsing_exception”,“原因” =>“无法为字段[host.ip]动态添加映射。[主机]必须是对象类型,但必须是[文本]。“}}}}
我尝试使用[host] [name],但收到错误消息:
Grok regexp引发了异常{:exception =>“无法将对象''的字段'name'设置为value”。这可能是由于尝试将[foo] [bar] = someValue设置为[foo ]既不是地图也不是字符串“ ...
这是grok配置:
grok {
match => { "message" => "<%{INT:log.syslog.priority}>%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:host.name} %{DATA:process.name}(?:\[%{POSINT:process.pid}\])?: %{GREEDYDATA:syslog_message}" }
}
我的目的是根据ECS标准解析日志消息,以便SIEM应用程序可以分析这些日志。
解决方法
我认为rsyslog已经与host
字段一起发送了另一个名为[host][ip]
的字段,它是一个简单的字符串。然后,当您尝试为[host]
分配内容时,它会失败,因为host
不是对象,而是字符串。
您可以尝试将原始grok
字段重命名为其他字段,并且该字段应该可以正常工作:
将其添加到mutate {
rename => {
"[host]" => "[source][address]"
}
}
过滤器之前
telnet host 5432
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。