我正在编写一个脚本,用作领事的观察者配置中的处理程序。
可执行处理程序从标准输入读取 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
是使用consul monitor
:这将使您能够以所需的输出级别实时浏览代理日志。
参考:https ://www.consul.io/docs/agent/options.html#_log_level