Como posso recuperar logs do ambiente de gerenciamento do Amazon EKS a partir do CloudWatch Logs?
Quero coletar logs dos componentes que são executados no ambiente de gerenciamento do Amazon Elastic Kubernetes Service (Amazon EKS).
Resolução
Pré-requisito: para visualizar seus eventos de logs no Amazon CloudWatch Logs, você deve ativar os logs do ambiente de gerenciamento do Amazon EKS em seu cluster.
Use o CloudWatch Logs Insights para acessar seus logs do ambiente de gerenciamento do Amazon EKS. Em seguida, consulte os dados de log do ambiente de gerenciamento do Amazon EKS.
Visualize os logs do ambiente de gerenciamento do Amazon EKS
Conclua as etapas a seguir:
- Abra o console do Amazon CloudWatch.
- No painel de navegação, selecione Logs e, depois, selecione Log Insights.
- No menu Selecionar grupo(s) de logs, selecione o grupo de logs do cluster que você deseja consultar.
- Clique em Executar para ver os resultados.
Observação: para exportar os resultados como um arquivo .csv ou copiar os resultados para a área de transferência, selecione Exportar resultados. Altere o exemplo de consulta para obter dados de um caso de uso específico.
Exemplos de consultas para casos de uso comuns do Amazon EKS
Observação: é possível salvar e executar novamente consultas no CloudWatch Logs Insights.
As consultas a seguir são exemplos de casos de uso comuns do Amazon EKS.
Encontre alterações mutantes
Execute a consulta a seguir para encontrar alterações mutantes feitas no aws-auth ConfigMap:
fields @logStream, @timestamp, @message | filter @logStream like /^kube-apiserver-audit/ | filter requestURI like /\/api\/v1\/namespaces\/kube-system\/configmaps/ | filter objectRef.name = "aws-auth" | filter verb like /(create|delete|patch|update)/ | sort @timestamp desc | limit 50
Localize solicitações negadas
Execute a consulta a seguir para encontrar mensagens que apresentem o estado negado:
fields @logStream, @timestamp, @message | filter @logStream like /authenticator/ | filter @message like "denied" | sort @timestamp asc | limit 50
Encontre o nó de um pod programado
Execute a consulta a seguir para encontrar o nó no qual você programou um pod:
fields @timestamp, @message | filter @logStream like /kube-scheduler/ | filter @message like "example-pod-name" | filter @message like "ip-" | sort @timestamp asc | limit 3
Observação: substitua example-pod-name pelo nome do seu pod.
Encontre erros de servidor HTTP 5xx
Execute a consulta a seguir para encontrar erros de servidor HTTP 5xx em solicitações do servidor de API do Kubernetes:
fields @logStream, @timestamp, responseStatus.code, @message | filter @logStream like /^kube-apiserver-audit/ | filter responseStatus.code >= 500 | limit 50
Solucione problemas de ativação de objeto CronJob
Para encontrar as operações de API que cronjob-controller fez, execute a seguinte consulta:
fields @logStream, @timestamp, @message | filter @logStream like /kube-apiserver-audit/ | filter user.username like "system:serviceaccount:kube-system:cronjob-controller" | display @logStream, @timestamp, @message, objectRef.namespace, objectRef.name | sort @timestamp desc | limit 50
Encontre operações replicaset-controller de API
Execute a consulta a seguir para encontrar operações de API feitas por replicaset-controller:
fields @logStream, @timestamp, @message | filter @logStream like /kube-apiserver-audit/ | filter user.username like "system:serviceaccount:kube-system:replicaset-controller" | display @logStream, @timestamp, requestURI, verb, user.username | sort @timestamp desc | limit 50
Encontre e conte códigos de resposta HTTP
Execute a consulta a seguir para contar o número de códigos de resposta HTTP em chamadas feitas ao servidor de API do Kubernetes:
fields @logStream, @timestamp, @message |filter @logStream like /^kube-apiserver-audit/ | stats count(*) as count by responseStatus.code | sort count desc
Exemplo de saída:
responseStatus.code,count 200,35066 201,525 403,125 404,116 101,2
Observação: a saída mostra 35.066 solicitações bem-sucedidas para HTTP 200, 525 recursos criados para HTTP 201 e 125 solicitações proibidas para HTTP 403. Também mostra 116 erros de não encontrado para HTTP 404 e 2 solicitações de protocolo de comutação para HTTP 101.
Encontre alterações feitas em DaemonSets ou complementos
Para encontrar as alterações que você fez nos DaemonSets ou complementos no namespace kube-system, execute a seguinte consulta:
filter @logStream like /^kube-apiserver-audit/ | fields @logStream, @timestamp, @message | filter verb like /(create|update|delete)/ and strcontains(requestURI,"/apis/apps/v1/namespaces/kube-system/daemonsets") | sort @timestamp desc | limit 50
Encontre chamadas de patch, atualização, criação e exclusão
Execute a consulta a seguir para encontrar todas as chamadas de patch, atualização, criação e exclusão relacionadas a uma implantação e pods de implantação específicos:
fields @timestamp, verb, objectRef.name, objectRef.resource, requestObject.message | filter objectRef.name like /example-deployment-name/ | filter objectRef.resource not like /serviceaccounts/ | filter objectRef.resource not like /events/ | filter verb like /create|delete|patch|update/ | sort @timestamp asc
Observação: substitua example-deployment-name pelo nome da sua implantação. Para excluir eventos, é possível remover | filter objectRef.resource not like /events/ da consulta.
Identifique o usuário que excluiu um nó ou recurso
Execute a consulta a seguir para encontrar o usuário que excluiu um nó:
fields @logStream, @timestamp, @message | filter @logStream like /^kube-apiserver-audit/ | filter verb == "delete" and requestURI like "/api/v1/nodes" | sort @timestamp desc | limit 10
Execute a consulta a seguir para encontrar o usuário que excluiu um recurso, como um ConfigMap, pod ou implantação:
fields @timestamp,verb, user.username, user.extra.arn.0, user.extra.canonicalArn.0 | filter objectRef.name like /aws-auth/ | filter verb like /delete/ | sort @timestamp asc
Observação: substitua aws-auth pelo nome do seu pod para encontrar as chamadas de exclusão do seu pod.
Encontre a versão de imagem de uma implantação
Execute a consulta a seguir para encontrar a versão de imagem de uma implantação:
fields @timestamp, verb, objectRef.name, objectRef.resource | filter objectRef.name like /example-deployment-name/ | filter @message like /image/ | filter objectRef.resource like /deployments/ | parse requestObject.spec.template.spec 'image':*, as image | sort @timestamp asc | limit 10000
Observação: substitua example-deployment-name pelo nome da sua implantação.
Identifique eventos em um nó específico
Para localizar um nó que não esteja atualizado, execute a seguinte consulta:
fields @timestamp, @message, @logStream | sort @timestamp asc | filter @message like "node example-node-name hasn't been updated for"
Observação: substitua example-node-name pelo nome do seu nó.
Execute a consulta a seguir para verificar o tempo da última transição dos parâmetros de um nó específico:
fields @timestamp | parse responseObject.status.conditions.0 "lastTransitionTime*" as MemoryPressure | parse responseObject.status.conditions.1 "lastTransitionTime*" as DiskPressure | parse responseObject.status.conditions.2 "lastTransitionTime*" as PIDPressure | parse responseObject.status.conditions.3 "lastTransitionTime*" as ReadyStatus | parse responseObject.status.conditions.3 "lastTransitionTime*" as Timepass | filter objectRef.name like /example-node-name/ | filter verb like /patch/ | filter @message like /lastTransitionTime/ | sort @timestamp asc
Observação: substitua example-node-name pelo nome do seu nó.
Identifique o usuário que isolou um nó
Execute a consulta a seguir para encontrar o usuário que isolou nós específicos ou tornou os nós não programáveis:
fields @timestamp, objectRef.name as node_name, verb,user.username, user.extra.sessionName.0 as name, requestObject.spec.unschedulable as unschedulable_flag| filter @logStream like /kube-apiserver-audit/ | filter @message like /example-node-IP/ | filter verb like /patch/ | filter requestObject.spec.unschedulable like /1/
Observação: substitua example-node-IP pelo endereço IP do seu nó.
Identifique o podIP de um pod excluído
Execute a consulta a seguir para encontrar o podIP de um pod excluído:
fields @timestamp,objectRef.name as pod, requestObject.status.podIP as podIP | filter @logStream like /kube-apiserver-audit/ | filter objectRef.name = "example-pod-name" | filter verb like /patch/ | filter ispresent(requestObject.status.podIP) | sort @timestamp asc
Observação: substitua example-pod-name pelo nome do seu pod.
Encontre a saída de objeto de um pod desconhecido
Execute a consulta a seguir para visualizar a saída describe de um pod excluído sem o nome do pod:
fields @timestamp, requestURI, requestObject.message | filter requestURI like '/api/v1/namespaces/example-namespace/events' | filter responseObject.involvedObject.name like /example-deployment-name/ | sort @timestamp asc
Observação: substitua example-deployment-name pelo nome da sua implantação e example-namespace pelo seu namespace. Se não houver vários objetos com o mesmo nome em vários namespaces, remova a linha que contém filter requestURI like.
Encontre o nó de um pod programado
Execute a consulta a seguir para encontrar o nó no qual você programou um pod:
fields @timestamp, @message | filter @logStream like /kube-scheduler/ | filter @message like "example-pod-name" | filter @message like "ip-" | sort @timestamp asc | limit 3
Observação: substitua example-pod-name pelo nome do seu pod.
Verifique se há uma API de remoção
Observação: se o patching do sistema operacional (SO) do AWS Fargate excluiu seus pods ou nós, a API de remoção aparecerá nos logs de auditoria.
Execute a consulta a seguir para verificar se uma API de remoção aparece em seus logs de auditoria:
filter @logStream like /kube-apiserver-audit/ | fields @timestamp, user.username,user.extra.canonicalArn.0, responseStatus.code, responseObject.status, responseStatus.message | sort @timestamp asc | filter verb == "create" and objectRef.subresource == 'eviction'
Para encontrar o evento da operação da API de remoção, execute a seguinte consulta:
fields @logStream, @timestamp, @message | sort @timestamp asc | filter user.username == "eks:node-manager" and requestURI like "eviction" and requestURI like "pod"
Encontre o ID da tarefa de um pod do Fargate
Execute a consulta a seguir para encontrar o ID da tarefa do pod do Fargate:
fields @timestamp, verb, responseObject.spec.providerID as InstanceID | filter @message like /example-fargate-node-IP/ | filter ispresent(responseObject.spec.providerID)
Observação: substitua example-fargate-node-IP pelo endereço IP do seu nó do Fargate.
Identifique um URL que recebe erros
Execute a consulta a seguir para encontrar um URL que receba mais do que certo número de erros 4## ou 5##:
fields requestURI | filter @logStream like "kube-apiserver-audit-i" | filter count > example-filter-count | stats count(*) as count by requestURI, responseStatus.code | filter responseStatus.code >= 400 | sort count desc
Observação: substitua example-filter-count pelo número mínimo de erros que a saída da consulta deve exibir.
Solucione erros de webhooks
Execute a consulta a seguir para encontrar erros com webhooks:
fields @timestamp, @message | filter @logStream like /kube-apiserver/ and @logStream not like /kube-apiserver-audit/ | filter @message like /failed calling webhook/ | sort @timestamp desc | stats count(*) by bin(1m)
Liste falhas nas verificações de integridade do servidor de API
Execute a consulta a seguir para listar as verificações de integridade do servidor de API que apresentaram falha:
fields @message | sort @timestamp asc | filter @logStream like "kube-apiserver" | filter @logStream not like "kube-apiserver-audit" | filter @message like "healthz check failed"
Conte objetos do Kubernetes e o índice userAgent do CloudWatch Logs
Para contar as solicitações por objetos do Kubernetes e pelo índice userAgent do CloudWatch Logs, execute a seguinte consulta:
fields @timestamp, @message, @logStream | filter @logStream like "kube-apiserver-audit" | display @logStream, requestURI, verb | stats count(*) as count by objectRef.resource, userAgent | sort count desc | display objectRef.resource, userAgent, count
Veja os logs frequentes
Execute a consulta a seguir para ver seus logs mais frequentes:
fields @timestamp, @message, @logStream | filter @logStream not like /kube-apiserver-audit/ | parse @message "*] *" as loggingTimeStamp, loggingMessage | stats count(*) as count by loggingMessage | sort count desc
- Tópicos
- Containers
- Idioma
- Português
Vídeos relacionados


Conteúdo relevante
AWS OFICIALAtualizada há 8 meses