Filebeat:如何从路径创建新字段?

Filebeat: how to create new field from the path?

我想添加从将使用的路径中提取的新字段。我有两条路,见下文。

      paths:
    - /home/*/app/logs/*.log
   # - /home/v209/app/logs/*.log
   # - /home/v146/app/logs/*.log 

  fields:
    campaign: v209
  fields_under_root: true

我想创建新字段 campaign 仅使用 v209 或 v146 之类的文件夹名称任何想法,如何在 filebeads 中执行此操作?

提前致谢!

以下是使用 Filebeat 7.1.3 测试的三个建议解决方案

1) 每个输入活动字段的静态配置

filebeat.inputs:

- type: filestream 
  id: v209
  paths:
    - "/home/v209/app/logs/*.log"
  fields:
    campaign: v209
  fields_under_root: true

- type: filestream 
  id: v146
  paths:
    - "/home/v146/app/logs/*.log"
  fields:
    campaign: v146
  fields_under_root: true

output.console:
  pretty: true

解释:这个解决方法很简单。每个文件输入都会有一个基于静态配置的字段集(活动)。

Pros/Cons:此选项存在每次添加新路径时都必须添加新的活动字段的问题。对于动态环境,这可能会带来严重的操作问题,但实施起来非常简单。

2) 从文件路径动态提取活动名称

processors:
- dissect:
    tokenizer: "/%{key1}/%{campaign}/%{key3}/%{key4}/%{key5}"
    field: "log.file.path"
    target_prefix: ""  
- drop_fields:
    when:
      has_fields: ['key1','key3','key4','key5']
    fields: ['key1','key3','key4','key5']

说明:这些处理器在您的文件流或日志输入消息之上工作。解剖处理器将标记您的路径字符串并提取完整路径的每个元素。 drop_fields 处理器将删除所有不感兴趣的字段,只保留第二个路径元素(活动 ID)。

Pros/Cons:假设您的路径结构是稳定的,使用此解决方案,当新文件出现在 /home/*/app/logs/*.log[ 下时,您无需执行任何操作=16=]

3) 编写脚本

如果您希望设置更自定义的解析逻辑,我建议您试用脚本处理器并按照您的方式进行修改,直到满足您的要求: