如何通过命令行工具在 Filebeats 中动态添加字段?
How can I add fields dynamically in Filebeats via the command line tool?
我正在尝试通过 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 动态添加字段?
你可以这样使用它:
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"
},
(...)
}
我正在尝试通过 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 动态添加字段?
你可以这样使用它:
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"
},
(...)
}