log4j 我的logstash filter grok语法有什么问题?

wpx232ag  于 11个月前  发布在  Logstash
关注(0)|答案(1)|浏览(187)

我正在尝试使用OpenSearch而不是Logstash日志。我有两个日志,但第二个日志不适用于OpenSearch可用字段。
这是我的两个日志,每个日志都有不同的log4j模式。这是第三方解决方案,所以这些日志模式不能改变。

Log1
%d %5p [%c] [%X{txIp}] [%X{mbrNo}] %m%n

Log2
[%-5p][%d{yyyyMMdd HH:mm:ss.SSS}][%t]%c{4}.%M(%L) - %X{reqCommand}|%X{svcTrId}|%m%n

字符串
这是我的logstash.conf过滤器:

filter {
  if [fields][index] == "log1"{
     grok {
       match => {
         "message" => "%{TIMESTAMP_ISO8601:date} %{LOGLEVEL:logLevel} \[%{DATA:class}\] \[%{DATA:txIp}\] \[%{DATA:mbrNo}\] %{GREEDYDATA:message}"
       }
     }
  } else if [fields][index] == "log2" {
     grok {
       match => {
         "message" => "\[%{LOGLEVEL:logLevel}\]\[%{TIMESTAMP_ISO8601:date}\]\[%{DATA:thread}\]%{DATA:class}.%{DATA:method}\(%{DATA:line}\) - %{DATA:reqCommand}\|%{DATA:svcTrId}\|%{GREEDYDATA:message}"
       }
     }
  }

  date {
    match => ["date", "ISO8601"]
  }
}

kt06eoxx

kt06eoxx1#

终于成功了。
这是我的过滤器。

filter {
  if [fields][index] == "log1" {
     grok {
       match => {
         "message" => "%{TIMESTAMP_ISO8601:logTimestamp} %{DATA:logLevel} \[%{DATA:class}\] \[%{DATA:txIp}\] \[%{DATA:mbrNo}\] %{GREEDYDATA:message}"
       }
     }
     date {
       match => ["logTimestamp", "ISO8601"]
       target => "@timestamp"
       timezone => "Asia/Seoul"
     }
  } else if [fields][index] == "log2" {
     grok {
       match => {
         "message" => "\[%{DATA:logLevel}]\[%{YEAR:year}%{MONTHNUM:month}%{MONTHDAY:day} %{TIME:time}\]\[%{DATA:thread}\]%{DATA:class}.%{DATA:method}\(%{DATA:line}\) - %{DATA:reqCommand}\|%{DATA:svcTrId}\|%{GREEDYDATA:message}"
       }
     }
     mutate {
       add_field => {
         "logtimestamp" => "%{year}-%{month}-%{day}T%{time}"
       }
     }
     date {
       match => ["logtimestamp", "ISO8601"]
       target =>  "@timestamp"
       timezone => "Asia/Seoul"
     }

   }
}

字符串

相关问题