View a markdown version of this page

Implante o OTel Container Insights com o Helm - Amazon CloudWatch

Implante o OTel Container Insights com o Helm

O chart do Helm do Amazon CloudWatch Observability oferece uma opção flexível de implantação para o OTel Container Insights. Ele instala o atendente do CloudWatch (baseado em OTel) com o receptor de log de arquivos do OpenTelemetry para coleta de logs. O chart do Helm é mantido em https://github.com/aws-observability/helm-charts.

Use o chart do Helm quando precisar de um ou mais dos seguintes recursos:

  • Controle fino sobre a configuração do atendente

  • Coleta de logs nativa do OTel usando o receptor de log de arquivos (sem dependência de bits fluentes)

  • Gerenciamento personalizado de certificado TLS por meio do cert-manager

  • Clusters Kubernetes não EKS (ROSA, Kubernetes autogerenciado)

  • Fluxos de trabalho do GitOps com ArgoCD ou Flux

Pré-requisitos

Antes de você implantar o OTel Container Insights com o Helm, verifique se atende aos seguintes requisitos.

  • Um cluster existente do Amazon EKS executando o Kubernetes versão 1.28 ou posterior

  • Helm versão 3.9 ou superior

  • kubectl configurado para comunicar-se com o cluster de destino

  • Permissões do IAM: política gerenciada pela CloudWatchAgentServerPolicy anexada à função do atendente

  • Um provedor do OpenID Connect (OIDC) configurado para perfis do IAM para contas de serviço (IRSA)

  • Acesso à Internet de saída do cluster para os endpoints do CloudWatch

Instale o chart do Helm

Conclua as etapas a seguir para implantar o OTel Container Insights usando o chart do Helm.

Etapa 1: adicione o repositório do Helm

Adicione o repositório do chart do Helm do AWS Observability à sua configuração local do Helm.

Para adicionar o repositório do Helm
  1. Execute o comando a seguir para adicionar o repositório.

    helm repo add aws-observability \ https://aws-observability.github.io/helm-charts
  2. Atualize o repositório para obter as versões mais recentes do chart.

    helm repo update

Etapa 2: criar o perfil do IAM

Cria um perfil do IAM para permitir que o atendente do CloudWatch envie dados ao CloudWatch. Esse perfil usa o IRSA para associar permissões do IAM a uma conta de serviço do Kubernetes.

Para criar um perfil do IAM para uso com o atendente do CloudWatch
  1. Recupere o URL do emissor do OIDC do cluster. Substitua cluster-name pelo nome do cluster do Amazon EKS.

    aws eks describe-cluster \ --name cluster-name \ --query "cluster.identity.oidc.issuer" \ --output text
  2. Crie um perfil do IAM com uma política de confiança para IRSA. Substitua account-id pelo ID da sua conta da AWS e oidc-id pelo ID do provedor OIDC da etapa anterior (a parte após https://oidc.eks.region.amazonaws.com/id/).

    aws iam create-role \ --role-name EKS-CW-Observability-Role \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::account-id:oidc-provider/oidc.eks.region.amazonaws.com/id/oidc-id" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region.amazonaws.com/id/oidc-id:sub": "system:serviceaccount:amazon-cloudwatch:cloudwatch-agent" } } }] }'
  3. Anexe a política gerenciada CloudWatchAgentServerPolicy à função.

    aws iam attach-role-policy \ --role-name EKS-CW-Observability-Role \ --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy

Etapa 3: instale o chart

Instale o chart do Amazon CloudWatch Observability Helm com o OTel Container Insights ativado.

Para instalar o chart do Helm
  • Execute o comando a seguir. Substitua cluster-name pelo nome do seu cluster Amazon EKS, region pela sua região da AWS e account-id pelo ID da sua conta da AWS.

    helm install amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --create-namespace \ --set clusterName=cluster-name \ --set region=region \ --set agent.serviceAccount.name=cloudwatch-agent \ --set "agent.serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=arn:aws:iam::account-id:role/EKS-CW-Observability-Role" \ --set otelContainerInsights.enabled=true
    Importante

    O parâmetro otelContainerInsights.enabled é obrigatório. O OTel Container Insights não está ativado por padrão.

Etapa 4: verificação da instalação

Confirme se a versão do Helm e os pods do atendente foram implantados com sucesso.

Para verificar a instalação do Helm
  1. Verifique se o status de lançamento do Helm mostra deployed.

    helm list -n amazon-cloudwatch
  2. Confirme se o pod do operador está sendo executado.

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=amazon-cloudwatch-observability
  3. Confirme se os pods do atendente do CloudWatch estão em execução em todos os nós.

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent

    Todos os pods de atendentes devem mostrar o status Running.

Opções de configuração da chave

As tabelas a seguir descrevem os principais de chave do chart do Helm que você pode configurar. Passe esses valores usando o sinalizador --set ou um arquivo values.yaml personalizado.

Configurações do cluster

Parâmetro Padrão Descrição
clusterName O nome do cluster do Amazon EKS. Obrigatório.
region A região da AWS onde o cluster é executado. Obrigatório.
otelContainerInsights.enabled false Ativa o OTel Container Insights com o receptor de log de arquivos.

Logs de contêineres (receptor de log de arquivos OTel)

Parâmetro Padrão Descrição
containerLogs.enabled true Permite a coleta de logs de contêineres usando o receptor de log de arquivos OTel.
containerLogs.logGroupName /aws/containerinsights/cluster-name/application O nome do grupo de logs do CloudWatch Logs para logs de contêiner.
containerLogs.logRetentionDays 7 O número de dias em que os logs de contêiner serão retidos no CloudWatch Logs.

Atendente (métricas)

Parâmetro Padrão Descrição
agent.enabled true Ativa o DaemonSet do atendente do CloudWatch para coleta de métricas.
agent.serviceAccount.name cloudwatch-agent O nome da conta de serviço do Kubernetes do atendente.
agent.resources.requests.cpu 100m A solicitação de CPU para o contêiner do atendente.
agent.resources.requests.memory 128Mi A solicitação de memória para o contêiner do atendente.
agent.resources.limits.cpu 200m O limite de CPU para o contêiner do atendente.
agent.resources.limits.memory 256Mi O limite de memória para o contêiner do atendente.

Monitoramento de GPU

Parâmetro Padrão Descrição
agent.config.logs.metrics_collected.kubernetes.enhanced_container_insights true Permite métricas aprimoradas do Container Insights, incluindo métricas de GPU.
dcgmExporter.enabled false Ativa o exportador DCGM para métricas de GPU NVIDIA. Requer nós de GPU NVIDIA.
neuronMonitor.enabled false Ativa o monitor do Neuron para métricas do AWS Inferentia e Trainium.

Gerenciamento de certificado TLS

O operador do CloudWatch Observability exige certificados TLS para comunicação via webhook. Por padrão, o chart gera certificados autoassinados. Você pode usar o cert-manager para gerenciar certificados automaticamente.

Certificados autoassinados (padrão)

Por padrão, o chart do Helm gera um CA autoassinado e emite certificados a partir desse CA. Não é exigida nenhuma configuração adicional. O chart rotaciona automaticamente esses certificados durante as atualizações.

integração do cert-manager

Você pode usar o cert-manager para automatizar a emissão e renovação de certificados. Essa abordagem é útil quando sua organização exige certificados assinados externamente ou gerenciamento centralizado de certificados.

Para configurar a integração do cert-manager
  1. Verifique se o cert-manager está instalado no seu cluster.

    kubectl get pods -n cert-manager
  2. Instale o chart do Helm com o cert-manager ativado. Substitua cluster-name pelo nome do seu cluster Amazon EKS, region pela sua região da AWS e account-id pelo ID da sua conta da AWS.

    helm install amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --create-namespace \ --set clusterName=cluster-name \ --set region=region \ --set agent.serviceAccount.name=cloudwatch-agent \ --set "agent.serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=arn:aws:iam::account-id:role/EKS-CW-Observability-Role" \ --set otelContainerInsights.enabled=true \ --set admissionWebhooks.certManager.enabled=true

Quando o cert-manager está ativado, o chrt cria um recurso Certificate que o cert-manager usa para emitir e gerenciar o certificado TLS do webhook automaticamente.

nota

Você também pode usar o cert-manager com emissores externos, como o HashiCorp Vault. Para configurar um emissor externo, defina admissionWebhooks.certManager.issuerRef.name e admissionWebhooks.certManager.issuerRef.kind para corresponder ao emissor do cert-manager.

Atualize o chart

Atualize o chart do Helm para aplicar novos valores de configuração ou para atualizar para uma versão mais recente do chart.

Para atualizar o chart do Helm
  1. Atualize o repositório do Helm para obter as versões mais recentes do chart.

    helm repo update
  2. Execute o comando de atualização com seus valores desejados. Substitua cluster-name pelo nome do seu cluster Amazon EKS, region pela sua região da AWS e account-id pelo ID da sua conta da AWS.

    helm upgrade amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --set clusterName=cluster-name \ --set region=region \ --set agent.serviceAccount.name=cloudwatch-agent \ --set "agent.serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=arn:aws:iam::account-id:role/EKS-CW-Observability-Role" \ --set otelContainerInsights.enabled=true
  3. Verifique se a atualização foi concluída com êxito.

    helm list -n amazon-cloudwatch

    O número da revisão deve ser incrementado e o status deve mostrar deployed.

dica

Para evitar a perda de valores de configuração durante as atualizações, armazene seus valores personalizados em um arquivo values.yaml e passe-o com o sinalizador -f values.yaml.

Desinstale o chart

Para remover o OTel Container Insights do seu cluster, desinstale a versão do Helm.

Para desinstalar o chart do Helm
  1. Execute o comando a seguir para desinstalar a versão.

    helm uninstall amazon-cloudwatch-observability \ --namespace amazon-cloudwatch
  2. Opcionalmente, exclua o namespace caso ele não seja mais necessário.

    kubectl delete namespace amazon-cloudwatch

Depois de desinstalar o chart do Helm, o perfil do IAM e a configuração do provedor OIDC permanecem na sua conta da AWS. Exclua esses recursos separadamente, caso eles não sejam mais necessários.

aws iam detach-role-policy \ --role-name EKS-CW-Observability-Role \ --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy aws iam delete-role \ --role-name EKS-CW-Observability-Role

Verificar os dados no CloudWatch

Depois de instalar o chart do Helm, os dados do Container Insights aparecem no CloudWatch em 3 a 5 minutos.

Verificar as métricas

Para verificar as métricas no CloudWatch
  1. Abra o console do CloudWatch, em https://console.aws.amazon.com/cloudwatch/.

  2. No painel de navegação, selecione Container Insights.

  3. Verifique se seu cluster aparece na lista de clusters e se as métricas de infraestrutura estão sendo preenchidas.

Verificar os logs do

Para verificar se há grupos de logs em seu cluster, execute o seguinte comando. 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[].logGroupName" \ --output table

Solução de problemas

Use as orientações a seguir para resolver problemas comuns ao implantar o OTel Container Insights com o Helm.

Pod do operador em CrashLoopBackOff

Sintoma: quando você executa kubectl get pods -n amazon-cloudwatch, o pod do operador mostra o status CrashLoopBackOff.

Causa: o pod do operador não pode ser iniciado devido a problemas com o certificado TLS ou permissões insuficientes.

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

  1. Verifique se há erros relacionados ao certificado nos logs do pod do operador.

    kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/name=amazon-cloudwatch-observability --tail=50
  2. Verifique se o segredo TLS do webhook existe no namespace.

    kubectl get secrets -n amazon-cloudwatch | grep webhook
  3. Se você usa cert-manager, verifique se o status do recurso Certificate mostra Ready.

    kubectl get certificate -n amazon-cloudwatch
  4. Se o certificado estiver ausente ou for inválido, desinstale e reinstale o chart para regenerar os certificados.

    helm uninstall amazon-cloudwatch-observability -n amazon-cloudwatch

Pods de atendente não programados em todos os nós

Sintoma: o atendente do DaemonSet mostra menos pods do que o número de nós em seu cluster.

Causa: contaminações de nós, restrições de recursos ou seletores de nós impedem que os pods de atendente sejam programados em determinados nós.

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

  1. Verifique o status do DaemonSet para ver se há problemas de programação.

    kubectl get daemonset -n amazon-cloudwatch cloudwatch-agent
  2. Verifique se há pods que não podem ser programados e veja seus eventos.

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent --field-selector=status.phase!=Running
  3. Se os nós tiverem taints, adicione tolerâncias aos valores do chart do Helm. Por exemplo, para tolerar todos os taints, atualize o chart com o seguinte sinalizador.

    helm upgrade amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --reuse-values \ --set "agent.tolerations[0].operator=Exists"
  4. Verifique se os pods do atendente agora são executados em todos os nós.

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent -o wide