Logstash Can';t使用grok match正则表达式中的变量创建字段

Logstash Can';t使用grok match正则表达式中的变量创建字段,logstash,logstash-grok,Logstash,Logstash Grok,我目前正在使用logstash、elasticsearch和Kibana6.3.0 我的日志以唯一id路径生成:/tmp/USER\u DATA/FactoryContainer/images/(我的唯一id)/oar/oar\u image\u作业(我的唯一id)。stdout 我想做的是匹配这个唯一的id,并用这个id创建一个字段 我对logstash filter有点生疏,但我不知道为什么它不想使用我的uid并总是在我的字段中返回我%{uid},或者这是一个无法执行操作的错误 我的过滤器:

我目前正在使用logstash、elasticsearch和Kibana6.3.0

我的日志以唯一id路径生成:/tmp/USER\u DATA/FactoryContainer/images/(我的唯一id)/oar/oar\u image\u作业(我的唯一id)。stdout

我想做的是匹配这个唯一的id,并用这个id创建一个字段

我对logstash filter有点生疏,但我不知道为什么它不想使用我的uid并总是在我的字段中返回我%{uid},或者这是一个无法执行操作的错误

我的过滤器:

input {
  file {
    path => "/tmp/USER_DATA/FactoryContainer/images/*/oar/oar_image_job*.stdout"
    start_position => "beginning"
    add_field => { "data_source" => "oar-image-job" }
   }
}

filter {
    grok {
        match => ["path","%{UNIXPATH}%{NUMBER:uid}%{UNIXPATH}"]
    }
    mutate {
        add_field => [ "unique_id" => "%{uid}" ]
    }
}

output {
  if [data_source] == "oar-image-job" {
    elasticsearch {
        index => "oar-image-job-%{+YYYY.MM.dd}"
        hosts => ["localhost:9200"]
        }
    }
}
data_source字段是为了避免这个问题:当您将多个配置文件放在一个目录中以供Logstash使用时,它们都将被连接起来

在grok调试器%{UNIXPATH}%{NUMBER:uid}%{UNIXPATH}中,我的路径返回给我正确的值

指向解决方案的链接:

正确的过滤器:

input {
  file {
    path => "/tmp/USER_DATA/FactoryContainer/images/*/oar/oar_image_job*.stdout"
    start_position => "beginning"
    add_field => { "data_source" => "oar-image-job" }
   }
}

filter {
    grok {
        match => { "path" => [ "/tmp/USER_DATA/FactoryContainer/images/%{DATA:unique_id}/oar/oar_image_job%{DATA}.stdout" ] }
    }

}

output {
  if [data_source] == "oar-image-job" {
    elasticsearch {
        index => "oar-image-job-%{+YYYY.MM.dd}"
    hosts => ["localhost:9200"]
    }
    }
}