如何使用logstash创建一个新字段,其中包含另一个字段的子字符串

wfypjpf4  于 12个月前  发布在  Logstash
关注(0)|答案(1)|浏览(255)

我使用filebeat将日志上传到elasticsearch,我希望在将文档发送到ES之前使用logstash转换文档。我想添加一个名为my.service的字段,它将解析字段log.file. path的值。基本上,我想要的是以下内容:

"log.file.path": "/var/log/myservice.log" 
"my.service": "myservice"

字符串
我在logstash上尝试了以下过滤器,但似乎都不起作用:

filter {
    if ("" in  [log.file.path]){
        grok {
            match => { "log.file.path" => "%{GREEDYDATA}/(?<my.service>).log"}
        }
    }
}

filter {
    if ("" in  [log.file.path]){
        grok {
            match => { "log.file.path" => "%{GREEDYDATA}/%{GREEDYDATA:my.service}.log"}
        }
    }
}

zfycwa2u

zfycwa2u1#

问题是虚线字段名称,在Logstash中嵌套字段需要用方括号指定,只需这样做:

filter {
    if [log][file][path] {
        grok {
            match => { "[log][file][path]" => "%{GREEDYDATA}/%{GREEDYDATA:myservice}.log"}
        }
        mutate {
            rename => {
                "myservice" => "[my][service]"
            }
        }
    }
}

字符串
当下面的JSON文档进来时(作为一行程序)

{
  "log": {
    "file": {
      "path": "/var/log/myservice.log"
    }
  }
}


输出将是

{
  "log": {
    "file": {
      "path": "/var/log/myservice.log"
    }
  },
  "my": {
    "service": "myservice"
  }
}

相关问题