Configurar o atendente do CloudWatch para coletar métricas do cluster
Importante
Se estiver instalando o Container Insights em um cluster do Amazon EKS, recomendamos que use o complemento de observabilidade do EKS do Amazon CloudWatch para a instalação em vez de usar as instruções desta seção. Para mais informações e instruções, consulte Instalar o complemento Amazon CloudWatch Observability do EKS.
Para configurar o Container Insights para coletar métricas, siga as etapas em Configuração de início rápido para o Container Insights no Amazon EKS e no Kubernetes ou siga as etapas nesta seção. Nas etapas a seguir, você configura o atendente do CloudWatch para ser capaz de coletar métricas dos clusters.
Se estiver instalando em um cluster do Amazon EKS e usar as instruções desta seção em ou após 6 de novembro de 2023, você instalará o Container Insights com observabilidade aprimorada para o Amazon EKS no cluster.
Etapa 1: Criar um namespace para o CloudWatch
Use a seguinte etapa para criar um namespace do Kubernetes chamado amazon-cloudwatch
para o CloudWatch. Ignore essas etapas se você já tiver criado esse namespace.
Para criar um namespace para o CloudWatch
-
Insira o comando a seguir.
kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml
Etapa 2: Criar uma conta de serviço no cluster
Use as etapas a seguir para criar uma conta de serviço para o atendente do CloudWatch, se ainda não tiver uma.
Para criar uma conta de serviço para o atendente do CloudWatch
-
Insira o comando a seguir.
kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-serviceaccount.yaml
Se você não seguiu as etapas anteriores, mas já tem uma conta de serviço para o atendente do CloudWatch que deseja usar, deve garantir que ela tenha as regras a seguir. Além disso, no restante das etapas da instalação do Container Insights, você deve usar o nome da conta de serviço em vez de cloudwatch-agent
.
rules: - apiGroups: [""] resources: ["pods", "nodes", "endpoints"] verbs: ["watch", "list"] - apiGroups: [""] resources: ["nodes/proxy"] verbs: ["get"] - apiGroups: [""] resources: ["nodes/stats", "configmaps", “events”] verbs: ["create"] - apiGroups: [""] resources: ["configmaps"] resourceNames: ["cwagent-clusterleader"] verbs: ["get", "update"] - nonResourceURLs: ["/metrics"] verbs: ["get"]
Etapa 3: Criar um ConfigMap para o atendente do CloudWatch
Siga as etapas a seguir para criar um ConfigMap para o atendente do CloudWatch.
Para criar um ConfigMap para o atendente do CloudWatch
-
Faça download do YAML do ConfigMap para o host do cliente
kubectl
executando o seguinte comando:curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-configmap.yaml
-
Edite o arquivo YAML obtido por download da seguinte forma:
-
cluster_name: na seção
kubernetes
, substitua{{cluster_name}}
pelo nome do cluster. Remova os caracteres{{}}
. Se preferir, caso esteja usando um cluster do Amazon EKS, você poderá excluir o campo"cluster_name"
e o valor. Se fizer isso, o atendente do CloudWatch detectará o nome do cluster a partir das etiquetas do Amazon EC2.
-
-
(Opcional) Faça alterações adicionais no ConfigMap com base nos requisitos de monitoramento da seguinte forma:
-
metrics_collection_interval: na seção
kubernetes
, você pode especificar com que frequência o atendente coleta métricas. O padrão é 60 segundos. O intervalo de coleta do cadvisor padrão em kubelet é de 15 segundos, portanto, não defina esse valor para menos de 15 segundos. -
endpoint_override: na seção
logs
, você poderá especificar o endpoint do CloudWatch Logs se desejar substituir o endpoint padrão. Você pode querer fazer isso se estiver publicando de um cluster em uma VPC e quiser que os dados vão para um VPC endpoint. -
force_flush_interval: na seção
logs
, você pode especificar o intervalo para agrupar em lote os eventos de log antes que eles sejam publicados no CloudWatch Logs. O padrão é 5 segundos. -
region: por padrão, o atendente publicou métricas para a Região em que o nó de processamento está localizado. Para substituir isso, você pode adicionar um campo
region
na seçãoagent
: por exemplo,"region":"us-west-2"
. -
Seção statsd: se quiser que o atendente do CloudWatch Logs também execute um StatsD em cada nó de processamento do cluster, você poderá adicionar uma seção
statsd
à seçãometrics
, conforme o exemplo a seguir. Para obter informações sobre outras opções do StatsD para essa seção, consulte Recuperar métricas personalizadas com o StatsD ."metrics": { "metrics_collected": { "statsd": { "service_address":":8125" } } }
Um exemplo completo da seção JSON é o seguinte.
{ "agent": { "region": "us-east-1" }, "logs": { "metrics_collected": { "kubernetes": { "cluster_name": "MyCluster", "metrics_collection_interval": 60 } }, "force_flush_interval": 5, "endpoint_override": "logs.us-east-1.amazonaws.com" }, "metrics": { "metrics_collected": { "statsd": { "service_address": ":8125" } } } }
-
-
Crie o ConfigMap no cluster executando o comando a seguir.
kubectl apply -f cwagent-configmap.yaml
Etapa 4: Implantar o atendente do CloudWatch como um DaemonSet
Para concluir a instalação do atendente do CloudWatch e começar a coletar métricas de contêiner, siga as etapas a seguir.
Para implantar o atendente do CloudWatch como um DaemonSet
-
-
Para não usar o StatsD no cluster, insira o comando a seguir.
kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml
-
Para usar o StatsD, siga estas etapas:
-
Faça download do YAML do DaemonSet para o host do cliente
kubectl
executando o comando a seguir.curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml
-
Remova o comentário da seção
port
no arquivocwagent-daemonset.yaml
da seguinte forma:ports: - containerPort: 8125 hostPort: 8125 protocol: UDP
-
Implante o atendente do CloudWatch no cluster executando o comando a seguir.
kubectl apply -f cwagent-daemonset.yaml
-
-
-
Confirme se o atendente está implantado executando o comando a seguir.
kubectl get pods -n amazon-cloudwatch
Quando for concluído, o atendente do CloudWatch criará um grupo de logs chamado /aws/containerinsights/
e enviará os eventos de log de performance a esse grupo de logs. Se você também configurar o atendente como um listener do StatsD, o atendente também escutará as métricas do StatsD na porta 8125 com o endereço IP do nó no qual o pod do aplicativo está programado.Cluster_Name
/performance
Solução de problemas
Se o atendente não for implantado corretamente, tente o seguinte:
-
Execute o comando a seguir para obter a lista de pods.
kubectl get pods -n amazon-cloudwatch
-
Execute o comando a seguir e verifique os eventos na parte inferior da saída.
kubectl describe pod
pod-name
-n amazon-cloudwatch -
Execute o comando a seguir para verificar os logs.
kubectl logs
pod-name
-n amazon-cloudwatch