Ir para o conteúdo

Como posso recuperar logs do ambiente de gerenciamento do Amazon EKS a partir do CloudWatch Logs?

9 minuto de leitura
0

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:

  1. Abra o console do Amazon CloudWatch.
  2. No painel de navegação, selecione Logs e, depois, selecione Log Insights.
  3. No menu Selecionar grupo(s) de logs, selecione o grupo de logs do cluster que você deseja consultar.
  4. 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
AWS OFICIALAtualizada há 7 meses