Consul

領事腳本處理程序標準輸出未按記錄顯示在日誌中

  • October 7, 2020

我正在編寫一個腳本,用作領事的觀察者配置中的處理程序。

類型處理程序文件script指出:

可執行處理程序從標準輸入讀取 JSON 呼叫資訊。

$$ … $$任何寫入標準輸出的內容都會被記錄下來。

基於此,我配置了一個腳本處理程序來監視 ak/v 事件:

 "watches": [
   {
     "type": "key",
     "key": "some_key",
     "handler_type": "script",
     "handler": "/opt/consul/script/key_handler.sh"
   }
 ]

並相應地創建了腳本

#!/bin/bash
read event_payload
echo "The value of the key is $(echo $event_payload | jq -r .Value | base64 -d)"

我更改了some_keyconsul k/v 儲存中的值,並希望在日誌中的某處看到 stdout 輸出。Consul 被配置為使用資訊級別登錄文件和系統日誌。這是配置文件的相關部分:

{
   "log_level": "INFO",
   "enable_syslog": true,
   "log_file": "/var/log/consul/",
   "log_rotate_duration": "24h",
   "log_rotate_max_files": 7
}

我查看了系統日誌(即journalct -u consul -f)和領事目前日誌文件(即tail -f $(ls -trd /var/log/consul/* | tail -1)。兩個日誌設施都正常並顯示目前的領事活動。但我找不到任何腳本輸出的痕跡。

如果我修改腳本並將輸出重定向到任意文件,我可以找到我期望的輸出,因此腳本肯定可以完成它的工作。

我是否錯過了配置中阻止這些日誌顯示的任何內容?

在我寫這個問題並在發布之前仔細檢查我的測試時,我實際上找到了答案。所以我只是分享不要覺得我浪費了我的時間。

監視腳本處理程序輸出被 consul 歸類為調試級別。我沒有找到任何文件(儘管我可能沒有足夠努力……),我從體驗設置中推斷出這一點。您需要更改log_level以實際查看輸出。

{
   "log_level": "DEBUG",
}

如果您不想更改全域,另一種方法log_level是使用consul monitor

# Set a token with needed access level if you use ACLs
# export CONSUL_HTTP_TOKEN="<your_token>"
consul monitor --log-level=DEBUG

這將使您能夠以所需的輸出級別實時瀏覽代理日誌。

參考:https ://www.consul.io/docs/agent/options.html#_log_level

引用自:https://serverfault.com/questions/1033983