我使用rsyslog将纯文本日志发送到logstash。但我不能通过grok将数据分配给host.name或host.ip字段。系统发生以下错误:
无法将事件索引到elasticsearch。{:状态=>400,:操作=>[“索引”,{:_id=>nil,:_index=>“logstash-syslog-2020.09.03”,:路由=>nil,:_type=>“_doc”},#logstash::event:0x3273b8c],:response=>{“index”=>{“\u index”=>“logstash-syslog-2020.09.03”,“\u type”=>“\u doc”,“\u id”=>“i2hru3qbewqyaomf1lgh”,“status”=>400,“error”=>{“type”=>“mapper\u parsing\u exception”,“reason”=>“无法为字段[host.ip]动态添加Map。[host]的现有Map必须是object类型,但找到了[text]。“}}
我尝试使用[host][name],但出现错误消息:
grok regexp引发异常{:异常=>“无法将对象“”上的字段'name'设置为值“”。这可能是由于在[foo]不是Map或字符串时尝试设置类似[foo][bar]=somevalues的字段”。。。
以下是grok配置:
grok {
match => { "message" => "<%{INT:log.syslog.priority}>%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:host.name} %{DATA:process.name}(?:\[%{POSINT:process.pid}\])?: %{GREEDYDATA:syslog_message}" }
}
我的目的是根据ecs标准解析日志消息,以便siem应用程序能够分析这些日志。
1条答案
按热度按时间q5lcpyga1#
我想rsyslog已经和
message
字段另一个名为host
这是一个简单的字符串。然后,当你试图分配一些东西给[host][ip]
它失败了,因为[host]
不是对象而是字符串。你可以试着重新命名原来的
host
它应该可以:把这个加在你的
grok
过滤器: