Estou escrevendo um script para ser usado como handler em uma configuração do watcher no consul.
A documentação para manipuladores de script
tipo afirma:
Um manipulador executável lê as informações de invocação JSON de stdin. [...] Qualquer coisa escrita em stdout é registrada.
Com base nisso, configurei um manipulador de script para observar o evento ak/v:
"watches": [
{
"type": "key",
"key": "some_key",
"handler_type": "script",
"handler": "/opt/consul/script/key_handler.sh"
}
]
E criou o script de acordo
#!/bin/bash
read event_payload
echo "The value of the key is $(echo $event_payload | jq -r .Value | base64 -d)"
Alterei o valor de some_key
na loja consul k/v e esperava ver a saída stdout em algum lugar nos logs. O Consul está configurado para logar em um arquivo e no syslog com um nível de informação. Aqui está a parte relevante do arquivo de configuração:
{
"log_level": "INFO",
"enable_syslog": true,
"log_file": "/var/log/consul/",
"log_rotate_duration": "24h",
"log_rotate_max_files": 7
}
Eu olhei no journalct -u consul -f
arquivo de log atual do syslog (ie ) e do consul (ie tail -f $(ls -trd /var/log/consul/* | tail -1)
. Ambos os recursos de log estão ok e mostrando a atividade atual do consul. Mas não consigo encontrar nenhum rastro da saída do meu script.
Se eu modificar o script e redirecionar a saída para um arquivo arbitrário, posso encontrar a saída que estou esperando para que o script definitivamente faça seu trabalho.
Eu perdi alguma coisa na configuração que está impedindo que esses logs apareçam?
Na verdade, encontrei a resposta enquanto escrevia esta pergunta e verificava meus testes antes de postar. Então vou compartilhar só para não sentir que perdi meu tempo.
A saída do manipulador de script de observação é categorizada como nível de depuração pelo cônsul. Não encontrei nenhum documento sobre isso (embora eu possa não ter tentado o suficiente ...), deduzi isso da experiência com a configuração. Você precisa alterar o
log_level
para realmente ver a saída.Uma alternativa se você não quiser alterar o global
log_level
é usarconsul monitor
:Isso permitirá que você explore os logs dos agentes ao vivo com o nível de saída desejado.
Ref: https://www.consul.io/docs/agent/options.html#_log_level