【问题标题】:LogStash String message parse to JSON formatLogStash String 消息解析为 JSON 格式
【发布时间】:2021-04-20 14:57:30
【问题描述】:

我正在尝试将我的日志消息解析为 JSON 格式。

我在 LogStash 中有下一条 JSON 消息作为输入:

    {
    ...
    field 1: xxx,
    message: "----------- SCAN SUMMARY -----------\nKnown viruses: 8520944\nEngine version: 0.102.4\nScanned directories: 408\nScanned files: 1688\nInfected files: 0\nTotal errors: 50\nData scanned: 8.93 MB\nData read: 4.42 MB (ratio 2.02:1)\nTime: 22.052 sec (0 m 22 s)\n",
    fieldX: ...
    }

我想将消息字段转换为 JSON 格式:

message: 
{
known_viruses: 8520944,
engine_version: 0.102.4
scanned_directories: 408,
...
}

我尝试过以不同的步骤进行,首先用“\n”剖析线条,但不起作用:

 dissect {
   mapping => {
   "message" => "%{removeField}\n%{viruses}\n%{engine_version}"
   }
 }

也尝试了 whit mutate,但相同(不分裂):

mutate {
    split => ["message", "\n"]
  }
  

还有红宝石(相同):

ruby {
  event["message"] = event["message"].split("\n")
}

知道如何将消息字符串转换为有效的 JSON 格式吗?

【问题讨论】:

    标签: logstash logstash-configuration


    【解决方案1】:

    如果格式始终保持相同的顺序,您可以使用 grok 过滤器插件查看: https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html

    我认为这种模式可以解决问题,如果你想使用时间的数值作为秒,你可以稍微改变模式,以及文件大小......:

    ----------- SCAN SUMMARY -----------\nKnown viruses: %{NUMBER:known_viruses}\nEngine version: %{DATA:engine_version}\nScanned directories: %{NUMBER:scanned_directories}\nScanned files: %{NUMBER:scanned_files}\nInfected files: %{NUMBER:infected_files}\nTotal errors: %{NUMBER:total_errors}\nData scanned: %{DATA:data_scanned}\nData read: %{DATA:data_read}\nTime: %{DATA:time}\n
    

    【讨论】:

    • \n 不需要被删除。请更新答案 :) 它可以与 \n 一起使用,而无需取消它。如果你 scappe 它不起作用。
    • 更新了 sn-p
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    • 2021-07-29
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多