Plugins 日志存储字段拆分和合并

Plugins 日志存储字段拆分和合并,plugins,logstash,cisco,mutate,Plugins,Logstash,Cisco,Mutate,一个月前,我开始使用和配置ELK stack,作为我所在IT公司的一个个人项目 在没有任何培训或编码背景的情况下,我的Logstash可以在StarOS和一些IOS设备上接收来自Cisco ASR5K的日志,将其发送到Elasticsearch,并以原始格式存储 我现在正在尝试调整一下我为这个配置创建的字段,我遇到了一些困难,所以我真的希望你能帮助我。欢迎任何反馈 好的,我的问题如下: 我有一个原始格式的日志 <171>Nov 13 18:11:03 evlogd: [local-6

一个月前,我开始使用和配置ELK stack,作为我所在IT公司的一个个人项目

在没有任何培训或编码背景的情况下,我的Logstash可以在StarOS和一些IOS设备上接收来自Cisco ASR5K的日志,将其发送到Elasticsearch,并以原始格式存储

我现在正在尝试调整一下我为这个配置创建的字段,我遇到了一些困难,所以我真的希望你能帮助我。欢迎任何反馈

好的,我的问题如下: 我有一个原始格式的日志

<171>Nov 13 18:11:03 evlogd: [local-60sec3.378] [diameter 92004 error] [8/0/6001 <diactrl:0> flow_id_mgmt.c:743] [software internal system syslog] Flow ID sync with facility 87000 instance 377 failed 82649 times
使用以下自定义模式:

CISCOTIMESTAMPTZ %{CISCOTIMESTAMP}( %{TZ})?
NEXUSTIMESTAMP %{YEAR} %{MONTH} %{MONTHDAY} %{TIME}( %{TZ})?
ASR_TIMESTAMP %{MONTH} %{MONTHDAY} %{TIME}
ASR_TASK %{DATA}
ASR_FACILITY %{DATA}
ASR_EVENT_ID %{DATA}
ASR_LEVEL %{DATA}
ASR_EVENT_LEVEL %{WORD}
ASR_INSTANCE %{DATA}
ASR_CONTEXT %{DATA}
ASR_EVENT %{WORD}
ASR_TYPE %{DATA}
ASR_MGR %{DATA}
ASR_RAW %{GREEDYDATA}
ASR_CALLID %{DATA}
一切都很好(至少对我来说是这样)。日志是匹配的,所以这是一个好的开始

{
         "log_date" => "Nov 15 13:20:07",
--
         "hostname" => "MM-MME",
      "fingerprint" => "9414227242b545335cb679d9905dddf6b8976cf2",
             "task" => "evlogd:",
            "level" => "software internal system syslog",
             "host" => "X.X.X.X",
              "mgr" => "8/0/6001 <diactrl:0> flow_id_mgmt.c:743",
          "message" => "Flow ID sync with facility 87000 instance 75 failed 83718 times\u0000",
       "@timestamp" => 2018-11-15T11:20:07.439Z,
    "instance_info" => "diameter 92004 error",
         "facility" => "local-60sec7.199",
             "type" => "syslog-cisco"
}
应该有大约15-20个结果,比如:

sgsn-gtpc info/debug etc
sessmgr info/debug/error etc
aaamgr info/debug/error etc
我根据以下行动计划进行了尝试: 拆分“实例信息”简介3字段:

ASR_INSTANCE %{WORD}
ASR_INSTANCE_NR %{NUMBER}
ASR_INSTANCE_LVL %{WORD}
并创建一个新的匹配项:

%{ASR_TIMESTAMP:log_date} %{ASR_TASK:task} \[%{ASR_FACILITY:facility}\] \[%{ASR_INSTANCE:instance_info}%{SPACE}%{ASR_INSTANCE_NR:nr}%{SPACE}%{ASR_INSTANCE_LVL:Level}\] \[%{ASR_MGR:mgr}\] \[%{ASR_LEVEL:level}\] %{ASR_RAW:message}
其工作原理(在在线GROK调试器中测试):

现在我想删除“nr”字段,并将[“实例信息”,“级别”]合并到一个字段中。老实说,我不知道该怎么做。 我尝试了mutate插件,但我缺乏了解如何以及在何处插入它的知识

请您在这件事上帮助我,或者提出不同的建议。 配置文件:

我知道,对于你们大多数人来说,我的配置文件可能看起来很恐怖,但这是我能做的最好的了,所以请不要评判我的frankenstein.conf文件。
欢迎对我的问题或配置中的任何行提供任何帮助和建议

你就快到了。您所要做的就是使用mutate/组合所需的数据,并使用mutate/删除不必要的字段

您需要将ASR_INSTANCE_LVL字段名not更改为level,因为您已经有了level字段。比如说,你可以称之为asr_水平

在conf文件的末尾添加相关的mutate

mutate {
   replace => [ "instance_info", "%{instance_info} %{asr_level}" ]
}
 mutate {
   remove_field => ["asr_level", "nr"]
}
你可以看看这个,了解更多细节


祝你好运

谢谢你,姑娘!它现在可以工作:“instance_info”=>“cli调试”
%{ASR_TIMESTAMP:log_date} %{ASR_TASK:task} \[%{ASR_FACILITY:facility}\] \[%{ASR_INSTANCE:instance_info}%{SPACE}%{ASR_INSTANCE_NR:nr}%{SPACE}%{ASR_INSTANCE_LVL:Level}\] \[%{ASR_MGR:mgr}\] \[%{ASR_LEVEL:level}\] %{ASR_RAW:message}
"instance_info": [
    [
      "diameter"
    ]
  ],
  "nr": [
    [
      "92004"
    ]
  ],
  "Level": [
    [
      "error"
mutate {
   replace => [ "instance_info", "%{instance_info} %{asr_level}" ]
}
 mutate {
   remove_field => ["asr_level", "nr"]
}