childe / gohangout

使用 golang 模仿的 Logstash。用于消费 Kafka 数据,处理后写入 ES、Clickhouse 等。
MIT License
1.01k stars 234 forks source link

Grok过滤实际使用遇到的问题 #177

Closed ixiaoyi93 closed 2 years ago

ixiaoyi93 commented 2 years ago

image 需求总结起来就是通过 if 判断 fields.project_name == ptjsb-flink 时,进行过滤 log.file.path 路径的 application_1561493907054_1579 字段。

通过如下正则表达式,能够获取到我想要的字段,如下: image

在 gohangout 中的配置,如下:

    - Grok:
        if:
          - EQ($.fields.project_name,"ptjsb-flink")
        src: log.file.path
        target: application_id
        match:
            - '(<application>([\w]+))'
        remove_fields: ['[log][file][path]']

但是从目前的结果来看,这段配置未生效。能帮忙看看吗?感谢大佬

childe commented 2 years ago

src: '[log][file][path]' 应该这样

ixiaoyi93 commented 2 years ago

src: '[log][file][path]' 应该这样

在logstash 里面的配置,

    if [fields][project_name] == "ptjsb-flink" {
        grok {
            match => { "[log][file][path]" => "/data/yarn/local/usercache/flink/appcache/(?<application_id>([\w]+))/" }
            remove_field => "[log][file][path]"
        }

现在我把段搬到gohangout,始终不行呢。在gohangout 配置:

    - Grok:
        if:
          - EQ($.fields.project_name,"ptjsb-flink")
        src: '[log][file][path]'
        target: 'application_id'
        match:
          - '(<application>([\w]+))'
        remove_fields: ['[log][file][path]']

大佬,看看是我哪里配置的有问题吗

childe commented 2 years ago

自己多看下文档以及文档里面的相关的超链接 。

inputs:
  - Stdin:
      codec: json
filters:
    - Grok:
        if:
          - EQ($.fields.project_name,"ptjsb-flink")
        src: '[log][file][path]'
        match:
          - '(?P<application_id>([\w]+))'
        remove_fields: ['[log][file][path]']
outputs:
  - Stdout: {}