我正在编写一个脚本,用作 consul 中观察者配置的处理程序。
这script
类型处理器的文档状态:
可执行处理程序从 stdin 读取 JSON 调用信息。[...] 写入 stdout 的任何内容都会被记录下来。
基于此,我配置了一个脚本处理程序来监视 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)"
我更改了 consul k/v 存储中的值some_key
,并希望在日志中的某个地方看到 stdout 输出。Consul 配置为以信息级别登录文件和系统日志。以下是配置文件的相关部分:
{
"log_level": "INFO",
"enable_syslog": true,
"log_file": "/var/log/consul/",
"log_rotate_duration": "24h",
"log_rotate_max_files": 7
}
我查看了 syslog(即journalct -u consul -f
)和 consul 当前日志文件(即tail -f $(ls -trd /var/log/consul/* | tail -1)
。两个日志工具都正常并显示当前 consul 活动。但我找不到我的脚本输出的任何痕迹。
如果我修改脚本并将输出重定向到任意文件,我就能找到我期望的输出,因此脚本肯定能完成它的工作。
我是否遗漏了配置中的任何内容,导致这些日志无法显示?
答案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
这将允许您以所需的输出级别实时探索代理日志。