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-observabilityativo em seu cluster -
Permissões do IAM:
logs:CreateLogGroup,logs:CreateLogStream,logs:PutLogEvents,logs:DescribeLogGroupselogs:DescribeLogStreams(incluídas na política gerenciada pelaCloudWatchAgentServerPolicy) -
Acesso ao nó: o coletor requer acesso a
/var/log/podsem 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/ |
/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
filelogretém os arquivos de log do contêiner de/var/log/pods/. -
Processadores: o processador
k8sattributesenriquece os logs com metadados do Kubernetes. O processadorbatchagrupa os registros de log antes da exportação. O processadorresourceacrescenta atributos de recursos. -
Exportadores: o exportador
awscloudwatchlogsenvia 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.nameek8s.deployment.name -
Rótulos de pod: todos os rótulos de pod como atributos
k8s.pod.label.* -
Atributos da nuvem:
cloud.region,cloud.account.idecloud.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-namepelo nome do cluster do Amazon EKS.aws eks update-addon \ --cluster-namecluster-name\ --addon-name amazon-cloudwatch-observability \ --configuration-values '{"containerLogs":{"enabled":false}}' \ --resolve-conflicts OVERWRITE
Excluir namespaces da coleta de logs
Para excluir namespaces específicos da coleta de logs, use a opção de configuração excludeNamespaces.
Para excluir namespaces da coleta de logs
-
Execute o comando a seguir. Substitua
cluster-namepelo nome do cluster do Amazon EKS. Substitua os valores do namespace pelos namespaces que você deseja excluir.aws eks update-addon \ --cluster-namecluster-name\ --addon-name amazon-cloudwatch-observability \ --configuration-values '{"containerLogs":{"enabled":true,"excludeNamespaces":["kube-system","load-testing","monitoring"]}}' \ --resolve-conflicts OVERWRITE
Incluir somente namespaces específicos
Para coletar logs somente de namespaces específicos, use a opção de configuração includeNamespaces.
Para incluir somente namespaces específicos
-
Execute o comando a seguir. Substitua
cluster-namepelo nome do cluster do Amazon EKS. Substitua os valores do namespace pelos namespaces que você deseja incluir.aws eks update-addon \ --cluster-namecluster-name\ --addon-name amazon-cloudwatch-observability \ --configuration-values '{"containerLogs":{"enabled":true,"includeNamespaces":["production","staging"]}}' \ --resolve-conflicts OVERWRITE
Configurar a análise de logs de várias linhas
Para combinar entradas de logs de várias linhas (como rastreamentos de pilha) em um único registro de log, configure a análise de várias linhas com um padrão de primeira linha.
Para configurar a análise de log de várias linhas
-
Execute o comando a seguir. Substitua
cluster-namepelo nome do cluster do Amazon EKS. Substitua o valorfirstLinePatternpor um padrão regex que corresponda à primeira linha de cada entrada de log.aws eks update-addon \ --cluster-namecluster-name\ --addon-name amazon-cloudwatch-observability \ --configuration-values '{"containerLogs":{"enabled":true,"multilineConfig":{"firstLinePattern":"^\\d{4}-\\d{2}-\\d{2}|^\\[\\d{4}","parseFormat":"auto"}}}' \ --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-namepelo nome do cluster do Amazon EKS. Substitua30pelo 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-days30
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-namepelo 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 tableA saída exibe os nomes dos grupos de logs e o número de bytes armazenados. Um valor diferente de zero para
StoredBytesconfirma 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/ não aparece no CloudWatch Logs após 5 minutos.cluster-name/application
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:
-
Verifique se os contêineres da sua aplicação gravam logs em stdout ou stderr.
-
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" -
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: conclua as etapas a seguir para reduzir custos.
-
Exclua namespaces de alto volume da coleta de logs. Para instruções, consulte Excluir namespaces da coleta de logs.
-
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.