遇见雨巷 2024-08-11 10:59 采纳率: 0%
浏览 6
已结题

logstash日志解析

为什么logstash解析到的数据,message是个数组,message重复

logstash.conf配置如下:

input {
  beats {
    port => 5044
  }
  file{
    path => ["/var/log/logstash/info.log"]
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}

filter{
    grok{
        match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}  %{LOGLEVEL:loglevel} %{NUMBER:pid} --- \[%{DATA:thread}\] %{JAVACLASS:package}  : %{GREEDYDATA:message}"}
    }
}

output {
    elasticsearch {
        hosts  => ["http://172.17.0.2:9200"]
        index  => "elk"
        codec  => "json"
    }
    stdout {
        codec => rubydebug
    }
}

这是info.log日志文件

img

这logstash解析的日志

img

请问哪里有问题,为什么message是数组。

  • 写回答

2条回答 默认 最新

  • 一直免费一直爽 2024-08-11 10:59
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    在您的Logstash配置中,您尝试使用grok过滤器来解析日志记录中的message字段。这个过滤器可以将字符串转换为一个结构化的数据格式,以便于进一步处理和分析。

    根据您的日志文件内容,可以看到第一条日志记录(第1条)包含两个message项,而其他日志记录只包含一个message项。这意味着在您的配置中,grok过滤器可能没有正确地识别出这些不同的message项。为了确保正确的解析,您可以调整grok过滤器以区分不同的message项:

    grok {
      match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}  %{LOGLEVEL:loglevel} %{NUMBER:pid} --- \[%{DATA:thread}\] %{JAVACLASS:package}  : %{GREEDYDATA:message}" }
    }
    

    此外,如果您希望将所有message项作为一个数组处理,您可以修改grok过滤器的配置如下:

    grok {
      match => { "message" => "%{GREEDYDATA:message}" }
    }
    

    这样,所有的message项都将被合并到一个数组中,而不是单独的元素。请注意,这将改变日志记录的原始结构,并且可能导致不期望的行为。因此,在实际应用中,应谨慎选择是否采用此方法。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月11日
  • 创建了问题 8月11日