[英]Outputting document metadata from ElasticSearch using Logstash output csv plugin
[英]Logstash elasticsearch output plugin - Populating api_key from metadata field does not work
我正在使用 logstash 的 elasticsearch output 插件將我的事件發布到 elasticsearch。 我正在使用 api_key 身份驗證方法。 在我硬編碼 api_key 參數值之前,一切正常。 例如:
api_key => "xxxxxxxxxxxx:yyyyyyyyyyyyyyyy"
其中 Xs 類似於 id 而 Ys 是使用create api_key security api生成的 api_key。
但是在我的過濾器中,我將要傳遞給api_key
參數的值添加到元數據字段[@metadata][myapikey]
中。 這個想法是在 output 插件中使用它,如下所示
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
參數。 我已經確保使用標准輸出插件,元數據中包含正確的值,但是當我運行它時仍然看到無效的 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 格式。
與支持該格式的index
設置相反, api_key
不支持,所以發生的情況是 Logstash 將原始值%{[@metadata][myapikey]}
(未解析)作為 API 密鑰發送,這顯然失敗了。
我認為這個設計決定背后的主要原因是 API 密鑰,就像密碼一樣,不應該是每個文檔中傳輸的字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.