如何使用logstash解析ecs(ElasticCommonSchema)之后的纯文本日志?

zysjyyx4  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(1)|浏览(485)

我使用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应用程序能够分析这些日志。

q5lcpyga

q5lcpyga1#

我想rsyslog已经和 message 字段另一个名为 host 这是一个简单的字符串。然后,当你试图分配一些东西给 [host][ip] 它失败了,因为 [host] 不是对象而是字符串。
你可以试着重新命名原来的 host 它应该可以:
把这个加在你的 grok 过滤器:

mutate {
    rename => {
        "[host]" => "[source][address]"
    }
}

相关问题