Logstash elasticsearch 输出插件 - 从元数据字段填充 api_key 不起作用
Logstash elasticsearch output plugin - Populating api_key from metadata field does not work
我正在使用 logstash 的 elasticsearch 输出插件 post 我的事件到 elasticsearch。我正在使用 api_key 身份验证方法。在我对 api_key 参数值进行硬编码之前,一切正常。例如:
api_key => "xxxxxxxxxxxx:yyyyyyyyyyyyyyyy"
其中 Xs 类似于 id,Ys 类似于使用 create api_key security api.
生成的 api_key
但在我的过滤器中,我将要传递给 api_key
参数的值添加到元数据字段 [@metadata][myapikey]
中。这个想法是在输出插件中使用它,如下所示
output {
elasticsearch {
hosts => ["https://localhost:9200"]
cacert => 'path-to-ca.crt'
index => "my-index-name"
api_key => "%{[@metadata][myapikey]}"
ssl => true
}
}
根据我的理解,如果我们从像 index => "%{[@metadata][some-index-name]}"
这样的元数据字段中提供 index
,这应该可以正常工作。我以前成功地将它用于索引名称。
不确定为什么相同的实现对 api_key
参数不起作用。我已经确保使用 stdout 插件元数据在其中包含正确的值,但是当我 运行 this.
时仍然看到无效的 api_key 值消息
请帮忙。
正在添加完整的管道配置
input {
generator {
lines => [
'{"timestamp" : "26/01/2021", "fruit-ID" : "t6789", "vegetable-ID" : "Veg1-1002", "Status" : "OK", "myapikey" : "3p4oIUr-Qxxxxxxx-rA"}'
]
count => 1
codec => "json"
}
}
filter {
mutate {
add_field => { "[@metadata][myapikey]" => "xxxxxxxxxxx-%{myapikey}" }
remove_field => ["myapikey"]
}
}
output {
elasticsearch {
hosts => ["https://localhost:9200"]
cacert => 'path-to-ca.crt'
index => "my-index-name"
api_key => "%{[@metadata][myapikey]}"
ssl => true
}
}
我想是因为api_key
设置不支持sprintf format。
与 supports that format, api_key
doesn't 的 index
设置相反,Logstash 将原始值 %{[@metadata][myapikey]}
(未解析)作为 API 键发送这显然失败了。
我认为这个设计决定背后的主要原因是 API 键,就像密码一样,不应该是在每个文档中移动的字段。
我正在使用 logstash 的 elasticsearch 输出插件 post 我的事件到 elasticsearch。我正在使用 api_key 身份验证方法。在我对 api_key 参数值进行硬编码之前,一切正常。例如:
api_key => "xxxxxxxxxxxx:yyyyyyyyyyyyyyyy"
其中 Xs 类似于 id,Ys 类似于使用 create api_key security api.
生成的 api_key但在我的过滤器中,我将要传递给 api_key
参数的值添加到元数据字段 [@metadata][myapikey]
中。这个想法是在输出插件中使用它,如下所示
output {
elasticsearch {
hosts => ["https://localhost:9200"]
cacert => 'path-to-ca.crt'
index => "my-index-name"
api_key => "%{[@metadata][myapikey]}"
ssl => true
}
}
根据我的理解,如果我们从像 index => "%{[@metadata][some-index-name]}"
这样的元数据字段中提供 index
,这应该可以正常工作。我以前成功地将它用于索引名称。
不确定为什么相同的实现对 api_key
参数不起作用。我已经确保使用 stdout 插件元数据在其中包含正确的值,但是当我 运行 this.
请帮忙。
正在添加完整的管道配置
input {
generator {
lines => [
'{"timestamp" : "26/01/2021", "fruit-ID" : "t6789", "vegetable-ID" : "Veg1-1002", "Status" : "OK", "myapikey" : "3p4oIUr-Qxxxxxxx-rA"}'
]
count => 1
codec => "json"
}
}
filter {
mutate {
add_field => { "[@metadata][myapikey]" => "xxxxxxxxxxx-%{myapikey}" }
remove_field => ["myapikey"]
}
}
output {
elasticsearch {
hosts => ["https://localhost:9200"]
cacert => 'path-to-ca.crt'
index => "my-index-name"
api_key => "%{[@metadata][myapikey]}"
ssl => true
}
}
我想是因为api_key
设置不支持sprintf format。
与 supports that format, api_key
doesn't 的 index
设置相反,Logstash 将原始值 %{[@metadata][myapikey]}
(未解析)作为 API 键发送这显然失败了。
我认为这个设计决定背后的主要原因是 API 键,就像密码一样,不应该是在每个文档中移动的字段。