簡體   English   中英

Logstash elasticsearch output 插件 - 從元數據字段填充 api_key 不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM