【问题标题】:How can I add fields dynamically in Filebeats via the command line tool?如何通过命令行工具在 Filebeats 中动态添加字段?
【发布时间】:2020-11-23 16:27:09
【问题描述】:

我试图通过 Python 调用命令在 Filebeats 中添加两个动态字段。完成一些处理后,字段本身会被填充,因此我无法将其预填充到 .yml 文件中。否则我知道我的.yml 文件中可以包含以下代码:

.
.
processors:
  - add_fields:
      fields:
        field1: "str1"
        field2: "str2"
.
.

由于我无法使用此文件将 field1 或 field2 更改为实际值。我构建了一个如下所示的命令:

filebeat -c /etc/filebeat/config.yml --once --path.data=UUID -E "processors=[{{add_fields: {{fields: [ field1:['foo'], field2:['bar']]}}]"

当我运行此命令时,我收到以下错误: Error: invalid argument "processors=[{add_fields: {fields: [ field1:['foo'], field2:['bar']]}]" for "-E, --E" flag: dictionary expected ',' or '}' when parsing '[{add_fields: {fields: [ field1:['foo'], field2:['bar']]}]'

如何向 Filebeat 动态添加字段?

【问题讨论】:

    标签: elastic-stack filebeat


    【解决方案1】:

    你可以这样使用它:

    filebeat -c /etc/filebeat/config.yml --once --path.data=UUID -E \ 
      processors.0.add_fields.fields={field1:foo} -E processors.0.add_fields.fields={field2:bar}
    

    结果:

    {
      "@timestamp": "2020-11-27T01:33:31.124Z",
      "@metadata": {
        "beat": "filebeat",
        "type": "_doc",
        "version": "7.10.0"
      },
      "fields": {
        "field2": "bar",
        "field1": "foo"
      },
    (...)
    }
    

    可能有一种方法可以破解它以在一个-E 中传递多个字段,但使用我提供的相同方式在 python 脚本中为 filebeat 生成此类参数应该更容易。

    另一种方法是使用两个-c config.yml -c config_dynamic.yml 重载filebeat,其中config_dynamic.yml 在调用filebeat 之前在运行时生成。内容应该只有处理器定义。 Filebeat 将合并两个配置文件,它应该可以工作。

    filebeat_dynamic.yml 的示例:

    processors:
      - add_fields:
          fields:
            field3: boo
    

    通过运行:

    filebeat -c /etc/filebeat/config.yml -c /tmp/filebeat_dynamic.yml --once --path.data=UUID -E \ 
      processors.0.add_fields.fields={field1:foo} -E processors.0.add_fields.fields={field2:bar}
    

    你会得到:

    {
      "@timestamp": "2020-11-27T01:38:36.184Z",
      "@metadata": {
        "beat": "filebeat",
        "type": "_doc",
        "version": "7.10.0"
      },
      "fields": {
        "field2": "bar",
        "field1": "foo",
        "field3": "boo"
      },
    (...)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多