View a markdown version of this page

Enviar logs ao Amazon CloudWatch - Amazon CloudWatch

Enviar logs ao Amazon CloudWatch

O OTel Container Insights coleta e envia logs de contêiner ao Amazon CloudWatch Logs usando o pipeline de logs do OpenTelemetry Collector. O complemento de observabilidade Amazon CloudWatch Observability EKS implanta um coletor do OpenTelemetry como DaemonSet que usa o receptor do log de arquivos para rastrear arquivos de log de contêineres, enriquecê-los com metadados do Kubernetes e exportá-los para o CloudWatch Logs por meio do exportador CloudWatch Logs.

Nenhuma configuração adicional é necessária para coleta básica de logs. A coleta de logs é ativada por padrão quando você segue o Início rápido: OTel Container Insights no Amazon EKS.

Pré-requisitos

Antes de configurar a coleta de logs, verifique se os seguintes requisitos estão sendo atendidos.

  • OTel Container Insights instalado e o complemento amazon-cloudwatch-observability ativo em seu cluster

  • Permissões do IAM: logs:CreateLogGroup, logs:CreateLogStream, logs:PutLogEvents, logs:DescribeLogGroups e logs:DescribeLogStreams (incluídas na política gerenciada pela CloudWatchAgentServerPolicy)

  • Acesso ao nó: o coletor requer acesso a /var/log/pods em cada nó

Grupos de logs e fontes

A tabela a seguir descreve o grupo de logs que o OTel Container Insights cria e a fonte da qual ele coleta.

Grupo de logs Origem Conteúdo
/aws/containerinsights/cluster-name/application /var/log/pods/**/*.log Todos os logs stdout e stderr do contêiner
nota

Os logs do host e do plano de dados estarão disponíveis em uma versão futura.

Como funciona o pipeline de logs do OTel

O OpenTelemetry Collector do complemento executa um pipeline de log com os seguintes componentes.

  • Receptores: o receptor filelog retém os arquivos de log do contêiner de /var/log/pods/.

  • Processadores: o processador k8sattributes enriquece os logs com metadados do Kubernetes. O processador batch agrupa os registros de log antes da exportação. O processador resource acrescenta atributos de recursos.

  • Exportadores: o exportador awscloudwatchlogs envia registros de log para o CloudWatch Logs.

Enriquecimento de logs

O pipeline enriquece cada registro de log com os seguintes atributos.

  • Atributos de recursos do Kubernetes: k8s.pod.name, k8s.namespace.name, k8s.container.name, k8s.node.name e k8s.deployment.name

  • Rótulos de pod: todos os rótulos de pod como atributos k8s.pod.label.*

  • Atributos da nuvem: cloud.region, cloud.account.id e cloud.platform

  • Atributos do cluster: k8s.cluster.name

Personalização da coleta de logs

Você pode personalizar a coleta de logs atualizando os valores de configuração do complemento. As seções a seguir descrevem as opções de personalização comuns.

Desativar coleta de logs

Para desativar totalmente a coleta de logs, atualize a configuração do complemento com os logs de contêiner desativados.

Para desativar a coleta de logs
  • Execute o comando a seguir. Substitua cluster-name pelo nome do cluster do Amazon EKS.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{"containerLogs":{"enabled":false}}' \ --resolve-conflicts OVERWRITE

Definir a retenção de logs

Por padrão, o CloudWatch Logs retém os dados de logs por tempo indeterminado. Para controlar os custos de armazenamento, você pode definir uma política de retenção no grupo de logs.

Para definir a retenção de logs
  • Execute o comando a seguir. Substitua cluster-name pelo nome do cluster do Amazon EKS. Substitua 30 pelo número de dias em que os logs serão retidos.

    aws logs put-retention-policy \ --log-group-name "/aws/containerinsights/cluster-name/application" \ --retention-in-days 30

Verificação

Para verificar se a coleta de logs está funcionando, verifique se os grupos de logs esperados existem e contêm dados.

Para verificar a coleta de logs
  • Execute o comando a seguir. Substitua cluster-name pelo nome do cluster do Amazon EKS.

    aws logs describe-log-groups \ --log-group-name-prefix "/aws/containerinsights/cluster-name" \ --query "logGroups[].{Name:logGroupName,StoredBytes:storedBytes}" \ --output table

    A saída exibe os nomes dos grupos de logs e o número de bytes armazenados. Um valor diferente de zero para StoredBytes confirma que o pipeline está entregando logs.

Solução de problemas

Use as diretrizes a seguir para resolver problemas comuns de coleta de logs.

Grupos de logs não criados após 5 minutos

Sintoma: o grupo de logs /aws/containerinsights/cluster-name/application não aparece no CloudWatch Logs após 5 minutos.

Causa: o coletor não tem as permissões necessárias do IAM para criar grupos e fluxos de logs.

Solução: verifique se o perfil do IAM associado ao coletor tem a política gerenciada pela CloudWatchAgentServerPolicy anexada. Essa política inclui as permissões logs:CreateLogGroup e logs:CreateLogStream.

O grupo de logs da aplicação existe, mas está vazio

Sintoma: o grupo de logs da aplicação existe no CloudWatch Logs, mas não contém fluxos de log nem eventos de logs.

Causa: esse problema ocorre quando os contêineres não estão gravando em stdout ou stderr, ou o receptor do log de arquivos não consegue acessar /var/log/pods/ no nó.

Solução: para resolver esse problema, siga as seguintes etapas:

  1. Verifique se os contêineres da sua aplicação gravam logs em stdout ou stderr.

  2. Verifique se o pod DaemonSet do coletor tem uma montagem de volume para /var/log/pods.

    kubectl get daemonset -n amazon-cloudwatch -o yaml | grep -A 5 "var/log/pods"
  3. Verifique se há erros de acesso ao arquivo nos logs do coletor.

    kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent --tail=50 | grep -i "error\|permission"

Altos custos do CloudWatch Logs

Sintoma: os custos de ingestão ou armazenamento do CloudWatch Logs são maiores do que o esperado.

Causa: namespaces de alto volume (como namespaces de teste de carga ou monitoramento) geram grandes volumes de logs.

Solução: defina uma política de retenção no grupo de logs para excluir automaticamente os logs mais antigos. Para instruções, consulte Definir a retenção de logs.