首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用grok匹配正则表达式中的变量创建字段

无法使用grok匹配正则表达式中的变量创建字段
EN

Stack Overflow用户
提问于 2018-08-01 23:34:54
回答 1查看 442关注 0票数 0

我目前使用的是logstash、elasticsearch和kibana 6.3.0

我的日志在唯一的id路径下生成:/tmp/USER_DATA/FactoryContainer/images/(我的唯一id)/oar/oar_image_job(我的唯一id).stdout

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

我是logstash过滤器的新手,但我不知道为什么它不想使用我的uid,而总是在我的字段中返回我%{uid},或者这是执行操作失败的错误。

我的过滤器:

代码语言:javascript
复制
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} my path中,返回good值

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-02 23:27:52

解决方案链接:https://discuss.elastic.co/t/cant-create-a-field-with-a-variable-from-a-grok-match-regex/142613/7?u=thesmartmonkey

正确的过滤器:

代码语言:javascript
复制
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"]
    }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51637264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档