Configuração avançada para OTel Container Insights no Amazon EKS
Este tópico aborda cenários avançados de configuração do OTel Container Insights no Amazon EKS. Use essas configurações para personalizar a coleta de métricas, filtrar logs, coletar telemetria entre contas, adicionar dimensões personalizadas e ajustar a alocação de recursos para grandes clusters.
Pré-requisitos
Antes de definir as configurações avançadas, verifique se os requisitos a seguir estão sendo atendidos.
-
OTel Container Insights instalado e em status
ACTIVEno cluster do Amazon EKS -
Cluster do Amazon EKS executando a versão 1.28 ou versões posteriores do Kubernetes
-
AWS CLI versão 2.15.0 ou posterior
-
kubectlconfigurado para comunicar-se com o cluster de destino -
Permissões do IAM:
eks:UpdateAddon,eks:DescribeAddoneiam:AttachRolePolicy(necessárias para configuração entre contas)
Padrão de configuração geral
Todas as configurações avançadas seguem o mesmo padrão. Você passa uma configuração JSON para o complemento amazon-cloudwatch-observability usando o comando aws eks
update-addon.
aws eks update-addon \ --cluster-namecluster-name\ --addon-name amazon-cloudwatch-observability \ --configuration-values 'JSON-configuration' \ --resolve-conflicts OVERWRITE
Importante
O sinalizador --resolve-conflicts OVERWRITE substitui qualquer configuração de complemento existente. Para preservar as configurações existentes, mescle-as com sua nova configuração antes de executar o comando.
Filtro de log
Você pode reduzir os custos do CloudWatch Logs excluindo logs que correspondam a critérios específicos. Use a filtragem de logs para eliminar logs detalhados ou de nível de depuração antes que o atendente os envie para o CloudWatch.
Para configurar a filtragem de logs
-
Execute o comando a seguir para atualizar o complemento com uma configuração de filtro de log. Substitua
cluster-namepelo nome do cluster do Amazon EKS.aws eks update-addon \ --cluster-namecluster-name\ --addon-name amazon-cloudwatch-observability \ --configuration-values '{ "otelContainerInsights": { "enabled": true }, "agent": { "config": { "logs": { "metrics_collected": { "kubernetes": { "enhanced_container_insights": true } }, "exclude_filters": [ { "type": "log_level_filter", "log_level": "DEBUG" } ] } } } }' \ --resolve-conflicts OVERWRITE -
Verifique se o status do complemento é
ACTIVEapós a atualização.aws eks describe-addon \ --cluster-namecluster-name\ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text
A configuração exclude_filters remove as entradas de log que correspondem ao nível de log especificado antes que o atendente as envie para o CloudWatch Logs. Isso reduz o volume de ingestão de logs e os custos associados.
Coleta de várias contas
Você pode enviar a telemetria das contas de workload para uma conta de monitoramento central configurando a suposição do perfil do IAM entre contas. Essa abordagem oferece uma visão única das métricas e dos logs de vários clusters do Amazon EKS em diferentes contas da AWS.
Para configurar a coleta de várias contas
Para criar a função entre contas na conta de monitoramento
-
Na conta de monitoramento central, crie um perfil do IAM com uma política de confiança que permita que a conta de workload a assuma. Substitua
workload-account-idpelo ID da conta da AWS de workload.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::workload-account-id:root" }, "Action": "sts:AssumeRole" } ] } -
Vincule a política gerenciada
CloudWatchAgentServerPolicyao perfil entre contas.
Para configurar o complemento para entrega entre contas
-
Na conta de workload, atualize o complemento para assumir o perfil entre contas. Substitua
cluster-namepelo nome do seu cluster do Amazon EKS emonitoring-account-idpelo ID da conta da AWS da conta central de monitoramento.aws eks update-addon \ --cluster-namecluster-name\ --addon-name amazon-cloudwatch-observability \ --configuration-values '{ "otelContainerInsights": { "enabled": true }, "agent": { "config": { "credentials": { "role_arn": "arn:aws:iam::monitoring-account-id:role/CrossAccountCWObservabilityRole" } } } }' \ --resolve-conflicts OVERWRITE -
Verifique se o status do complemento é
ACTIVEapós a atualização.aws eks describe-addon \ --cluster-namecluster-name\ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text
Dimensões de métrica personalizada
Você pode adicionar dimensões personalizadas derivadas dos rótulos do Kubernetes às suas métricas do Container Insights. As dimensões personalizadas permitem filtrar e agrupar métricas em uma granularidade mais precisa, como por equipe, ambiente ou nível de aplicação.
Para adicionar dimensões personalizadas a partir de rótulos do Kubernetes
-
Execute o comando a seguir para configurar as dimensões personalizadas. Substitua
cluster-namepelo nome do seu cluster do Amazon EKS elabel-keypelo rótulo Kubernetes para usar como dimensão.aws eks update-addon \ --cluster-namecluster-name\ --addon-name amazon-cloudwatch-observability \ --configuration-values '{ "otelContainerInsights": { "enabled": true }, "agent": { "config": { "logs": { "metrics_collected": { "kubernetes": { "enhanced_container_insights": true, "metric_dimensions": { "custom_dimensions": ["label-key"] } } } } } } }' \ --resolve-conflicts OVERWRITE -
Verifique se o status do complemento é
ACTIVEapós a atualização.aws eks describe-addon \ --cluster-namecluster-name\ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text
Depois que a configuração entrar em vigor, os rótulos especificados do Kubernetes aparecerão como dimensões nas métricas do Container Insights no CloudWatch.
Ajuste de recursos para clusters grandes
Para clusters grandes, talvez seja necessário aumentar os limites de CPU e memória para o DaemonSet do atendente do CloudWatch. A alocação padrão de recursos funciona bem para clusters pequenos, mas clusters maiores geram mais dados de telemetria e exigem recursos adicionais do atendente.
A tabela a seguir fornece diretrizes de dimensionamento com base no tamanho do cluster.
| Tamanho do cluster | Solicitação de CPU | Limite da CPU | Solicitação de memória | Limite de memória |
|---|---|---|---|---|
| Pequeno (20 nós ou menos) | 100 m | 200 m | 128 milhões | 256 milhões |
| Médio (21 a 100 nós) | 200 m | 400 m | 256 milhões | 512 milhões |
| Grande (mais de 100 nós) | 300 m | 500 m | 384 milhões | 768 milhões |
| Extra grande (mais de 500 nós) | 500 m | 1000 m | 512 milhões | 1 Gi |
Para configurar limites de recursos para o atendente do DaemonSet
-
Execute o comando a seguir para definir os limites e as solicitações de recursos. Substitua
cluster-namepelo nome do seu cluster do Amazon EKS e os valores dos recursos pelos valores da tabela anterior.aws eks update-addon \ --cluster-namecluster-name\ --addon-name amazon-cloudwatch-observability \ --configuration-values '{ "otelContainerInsights": { "enabled": true }, "agent": { "resources": { "requests": { "cpu": "cpu-request", "memory": "memory-request" }, "limits": { "cpu": "cpu-limit", "memory": "memory-limit" } } } }' \ --resolve-conflicts OVERWRITE -
Verifique se o status do complemento é
ACTIVEe se os pods do atendente são reiniciados com a nova alocação de recursos.aws eks describe-addon \ --cluster-namecluster-name\ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text -
Confirme se os pods do atendente estão em execução com os novos limites de recursos.
kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent -o jsonpath='{.items[0].spec.containers[0].resources}'
Verificar as alterações de configuração
Depois de aplicar qualquer configuração avançada, verifique se o complemento está íntegro e se os pods do atendente foram reiniciados com êxito.
Para verificar as alterações de configuração
-
Verifique se o status do complemento é
ACTIVE. Substituacluster-namepelo nome do cluster do Amazon EKS.aws eks describe-addon \ --cluster-namecluster-name\ --addon-name amazon-cloudwatch-observability \ --query "addon.{Status:status,ConfigValues:configurationValues}" \ --output table -
Verifique se os pods do atendente foram reiniciados e se estão no status
Running.kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agentTodos os pods de atendentes devem mostrar o status
Runningcom um horário de reinicialização recente.
Solução de problemas
Use as orientações a seguir para resolver problemas comuns com configurações avançadas.
A atualização do complemento falha com ConfigurationConflict
Sintoma: o comando aws eks update-addon retorna um erro ConfigurationConflict.
Causa: a configuração JSON fornecida por você está malformada ou contém chaves inválidas.
Solução: para resolver esse problema, siga as seguintes etapas:
-
Valide sua configuração JSON usando um linter JSON ou executando o comando a seguir.
echo 'your-json-configuration' | python3 -m json.tool -
Verifique se todas as chaves de configuração são válidas para o complemento
amazon-cloudwatch-observability. -
Tente atualizar novamente com o JSON corrigido.
As métricas entre contas não aparecem na conta de monitoramento
Sintoma: depois que você configurou a coleta de várias contas, as métricas não aparecem na conta de monitoramento central.
Causa: a política de confiança ou as permissões do perfil do IAM entre contas estão incorretas.
Solução: para resolver esse problema, siga as seguintes etapas:
-
Verifique se a política de confiança na conta de monitoramento permite que a conta de workload assuma o perfil.
-
Verifique se o perfil entre contas tem a política
CloudWatchAgentServerPolicygerenciada anexada. -
Verifique se há erros
AssumeRolenos logs do atendente.kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent --tail=100 | grep -i "AssumeRole\|AccessDenied" -
Verifique se o perfil do IAM do atendente na conta de workload tem permissão
sts:AssumeRolepara o ARN do perfil entre contas.