Consul 脚本处理程序 stdout 未按记录显示在日志中

Consul 脚本处理程序 stdout 未按记录显示在日志中

我正在编写一个脚本,用作 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

这将允许您以所需的输出级别实时探索代理日志。

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

相关内容