Consul
領事腳本處理程序標準輸出未按記錄顯示在日誌中
我正在編寫一個腳本,用作領事的觀察者配置中的處理程序。
可執行處理程序從標準輸入讀取 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_key
consul 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