Registros do Injest como JSON no Container Optimized OS

Sep 29 2020

Consigo injetar registros no Google Log Viewer com a ajuda do agente de registro stackdriver do Container Optimized OS como JSON.

Ele injeta logs como um valor para mensagem, mas não como carga útil json com a configuração padrão

O que eu tentei?

Mudei a configuração fluentd em /etc/stackdriver/logging.config.d/fluentd-lakitu.conf para o seguinte:

<source>
  @type tail
  format json
  path /var/lib/docker/containers/*/*.log
  <parse>
    @type json
  </parse>
  pos_file /var/log/google-fluentd/containers.log.pos
  tag reform_contain
  read_from_head true
</source>

Mas não é possível enviar logs para o visualizador de log

SO: Container Optimized OS cos-81-12871-1196-0

Respostas

4 KameliaY Sep 30 2020 at 01:57

Encontrei esse problema no Rastreador de problemas públicos do Google, que discute o mesmo problema que você mencionou em seu caso de uso. A equipe de produtos do Google foi notificada sobre essa limitação e está trabalhando nisso. Você só precisa ir até lá e clicar na estrela ao lado do título para obter atualizações sobre o problema e dar-lhe mais visibilidade.

GamerAtmos Dec 28 2020 at 11:20

Como @Kamelia Y mencionou sobre ohttps://issuetracker.google.com/issues/137517429

Há uma menção sobre a solução alternativa usada

<filter cos_containers.**>
@type parser
format json
key_name message
reserve_data false
emit_invalid_record_to_error false
</filter>

O snippet acima analisa os registros em JSON e injeta no Cloud Logging.

Nesta discussão nos Grupos do Google no Stackdriver, discutimos como usá-lo com o script de inicialização.

Aqui está o trecho do script de inicialização.

cp /etc/stackdriver/logging.config.d/fluentd-lakitu.conf /etc/stackdriver/logging.config.d/fluentd-lakitu.conf-save
# Shorter version of the above: cp /etc/stackdriver/logging.config.d/fluentd-lakitu.conf{,-save}
(
head -n -2 /etc/stackdriver/logging.config.d/fluentd-lakitu.conf-save; cat <<EOF
<filter cos_containers.**>
@type parser
format json
key_name message
reserve_data false
emit_invalid_record_to_error false
</filter>
EOF
) > /etc/stackdriver/logging.config.d/fluentd-lakitu.conf
sudo systemctl start stackdriver-logging

Esta imagem pode ser usada para gerar logs JSON aleatórios. https://hub.docker.com/repository/docker/patelathreya/json-random-logger