

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Soluções de observabilidade
<a name="AMG_solutions"></a>

Você pode usar o Amazon Managed Grafana para monitorar sistemas ou aplicativos. AWS fornece soluções para ajudá-lo a criar uma configuração básica de monitoramento para diferentes tipos de sistemas de computação. Essas soluções usam o Amazon Managed Service for Prometheus e o Amazon Managed Grafana para monitorar as soluções do Amazon EKS que fornecem informações sobre sua aplicação ou serviço.

Há soluções para monitorar a **infraestrutura do Amazon EKS**, uma **aplicação de Máquina virtual Java (JVM)** executada no Amazon EKS e uma **aplicação Apache Kafka** executada na JVM no Amazon EKS.

**Topics**
+ [Monitorando o Amazon EKS](solution-eks.md)
+ [Monitorar aplicações JVM](solution-jvm.md)
+ [Monitorar a aplicação do Kafka](solution-kafka.md)

# Solução para monitorar a infraestrutura do Amazon EKS com o Amazon Managed Grafana
<a name="solution-eks"></a>

O monitoramento da infraestrutura do Amazon Elastic Kubernetes Service é um dos cenários mais comuns para os quais o Amazon Managed Grafana é usado. Esta página descreve um modelo que oferece uma solução para esse cenário. A solução pode ser instalada usando [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) ou com o [Terraform](https://www.terraform.io/).

Essa solução configura:
+ O espaço de trabalho do Amazon Managed Service for Prometheus armazena métricas do cluster do Amazon EKS e cria um coletor gerenciado para extrair as métricas e enviá-las para esse espaço de trabalho. Para obter mais informações, consulte [Métricas de ingestão com coletores AWS gerenciados](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector.html).
+ Coleta de registros do seu cluster Amazon EKS usando um CloudWatch agente. Os registros são armazenados e consultados pelo Amazon Managed Grafana. CloudWatch Para obter mais informações, consulte [Logging for Amazon EKS](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/kubernetes-eks-logging.html).
+ Seu espaço de trabalho do Amazon Managed Grafana para extrair esses logs e métricas e criar dashboards e alertas para ajudar a monitorar o cluster.

Aplicar essa solução criará dashboards e alertas que vão:
+ Avaliar a integridade geral do cluster do Amazon EKS.
+ Mostrar a integridade e a performance do ambiente de gerenciamento do Amazon EKS.
+ Mostrar a integridade e a performance do plano de dados do Amazon EKS.
+ Exibir insights sobre as workloads do Amazon EKS em namespaces do Kubernetes.
+ Exibir o uso de recursos em todos os namespaces, incluindo uso de CPU, memória, disco e rede.

## Sobre esta solução
<a name="solution-eks-about"></a>

Essa solução configura um espaço de trabalho do Amazon Managed Grafana para fornecer métricas para o cluster Amazon EKS. As métricas são usadas para gerar dashboards e alertas.

As métricas ajudam você a operar clusters do Amazon EKS com mais eficiência, fornecendo insights sobre a integridade e a performance do ambiente de gerenciamento e do plano de dados Kubernetes. Você pode entender o cluster do Amazon EKS desde o nível do nó até os pods e o nível do Kubernetes, incluindo o monitoramento detalhado do uso de recursos.

A solução fornece recursos antecipatórios e corretivos:
+ Os recursos **antecipatórios** incluem:
  + Gerenciar a eficiência dos recursos orientando as decisões de programação. Por exemplo, para fornecer desempenho e confiabilidade SLAs aos seus usuários internos do cluster Amazon EKS, você pode alocar recursos suficientes de CPU e memória para suas cargas de trabalho com base no rastreamento do uso histórico.
  + Previsões de uso: com base na utilização atual dos recursos de cluster do Amazon EKS, como nós, [volumes persistentes com suporte do Amazon EBS](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html) ou [Application Load Balancers](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html), você pode planejar com antecedência, por exemplo, um novo produto ou projeto com demandas semelhantes.
  + Detecte possíveis problemas com antecedência: por exemplo, ao analisar as tendências de consumo de recursos no nível do namespace do Kubernetes, você pode entender a sazonalidade do uso da workload.
+ Os recursos **corretivos** incluem:
  + Diminua o tempo médio de detecção (MTTD) de problemas na infraestrutura e no nível da workload do Kubernetes. Por exemplo, ao examinar o dashboard de solução de problemas, você pode testar rapidamente hipóteses sobre o que deu errado e eliminá-las.
  + Determine em que parte da pilha um problema está acontecendo. Por exemplo, o plano de controle do Amazon EKS é totalmente gerenciado AWS e determinadas operações, como atualizar uma implantação do Kubernetes, podem falhar se o servidor da API estiver sobrecarregado ou a conectividade for afetada.

A imagem a seguir mostra um exemplo da pasta do dashboard da solução.

![\[Uma imagem mostrando um exemplo de uma pasta de dashboard do Grafana criada usando essa solução.\]](http://docs.aws.amazon.com/pt_br/grafana/latest/userguide/images/eks-solution-dashboard-folder.png)


Você pode escolher um dashboard para ver mais detalhes, por exemplo, escolher visualizar os recursos de computação para workloads mostrará um dashboard, conforme o mostrado na imagem a seguir.

![\[Uma imagem mostrando um exemplo de um dashboard do Grafana mostrando o uso da CPU criada usando essa solução.\]](http://docs.aws.amazon.com/pt_br/grafana/latest/userguide/images/eks-solution-dashboard-resource-usage.png)


As métricas são extraídas com um intervalo de extração de um minuto. Os dashboards mostram métricas agregadas a um minuto, cinco minutos ou mais, com base na métrica específica.

Os logs também são mostrados em dashboards para que você possa consultar e analisar os logs para encontrar as causas raiz dos problemas. A imagem a seguir mostra um dashboard de logs.

![\[Uma imagem mostrando um exemplo de um dashboard do Grafana com logs criado usando essa solução.\]](http://docs.aws.amazon.com/pt_br/grafana/latest/userguide/images/eks-solution-dashboard-logs.png)


Para obter uma lista das métricas rastreadas por essa solução, consulte [Lista de métricas monitoradas](#solution-eks-metrics).

Para obter uma lista dos alertas criados por essa solução, consulte [Lista de alertas criados](#solution-eks-alerts).

## Custos
<a name="solution-eks-costs"></a>

Essa solução cria e usa recursos no seu espaço de trabalho. Você será cobrado pelo uso padrão dos recursos criados, incluindo:
+ Acesso dos usuários ao espaço de trabalho do Amazon Managed Grafana. Para obter mais informações sobre preços, consulte [Preço do Amazon Managed Grafana](https://aws.amazon.com/grafana/pricing/).
+ Ingestão e armazenamento de métricas do Amazon Managed Service for Prometheus, incluindo o uso do Agentless Collector do Amazon Managed Service for Prometheus e análise de métricas (processamento de exemplos de consultas). A quantidade de métricas usadas por essa solução depende da configuração e do uso do cluster do Amazon EKS.

  Você pode visualizar as métricas de ingestão e armazenamento no Amazon Managed Service for Prometheus CloudWatch usando Para obter mais informações, consulte as [CloudWatchmétricas](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-CW-usage-metrics.html) no Guia do usuário do *Amazon Managed Service for* Prometheus.

  Você pode estimar o custo usando a Calculadora de Preços na página de [preços do Amazon Managed Service for Prometheus](https://aws.amazon.com/prometheus/pricing/). A quantidade de métricas dependerá do número de nós no cluster e das métricas que as aplicações produzem.
+ CloudWatch Ingestão, armazenamento e análise de registros. Por padrão, a retenção de logs está configurada para nunca expirar. Você pode ajustar isso em CloudWatch. Para obter mais informações sobre preços, consulte [Amazon CloudWatch Pricing](https://aws.amazon.com/cloudwatch/pricing/).
+ Custos de rede. Você pode incorrer em cobranças AWS de rede padrão para tráfego entre zonas de disponibilidade, regiões ou outros tipos de tráfego.

As calculadoras de preços, disponíveis na página de preços de cada produto, podem ajudar a entender os possíveis custos de sua solução. As informações a seguir podem ajudar a obter um custo básico para a solução em execução na mesma zona de disponibilidade do cluster do Amazon EKS.


| Produto | Métrica da calculadora | Valor | 
| --- | --- | --- | 
| Amazon Managed Service for Prometheus | Série ativa | 8.000 (base) 15.000 (por nó) | 
|  | Intervalo médio da coleta | 60 (segundos) | 
| Amazon Managed Service for Prometheus (coletor gerenciado) | Número de coletores | 1 | 
|  | Número de exemplos | 15 (base) 150 (por nó) | 
|  | Número de regras | 161 | 
|  | Intervalo médio de extração de regras | 60 (segundos) | 
| Amazon Managed Grafana | Número de editores e administradores ativos | 1 (ou mais, com base em seus usuários) | 
| CloudWatch (Registros) | Logs padrão: dados ingeridos | 24,5 GB (base) 0,5 GB (por nó) | 
|  | Registro Storage/Archival (registros padrão e vendidos) | Sim para armazenar logs: supondo uma retenção de um mês | 
|  | Dados de logs esperados verificados | Cada consulta de insights de logs do Grafana verificará todo o conteúdo do log do grupo durante o período de tempo especificado. | 

Esses números são os números base para uma solução que executa o EKS sem software adicional. Isso fornecerá uma estimativa dos custos básicos. Também exclui os custos de uso da rede, que variam de acordo com o espaço de trabalho Amazon Managed Grafana, o espaço de trabalho do Amazon Managed Service for Prometheus e o cluster Amazon EKS estarem na mesma zona de disponibilidade e VPN. Região da AWS

**nota**  
Quando um item nesta tabela inclui um valor `(base)` e um valor por recurso (por exemplo, `(per node)`), você deve adicionar o valor base ao valor por recurso multiplicado pelo número que você tem desse recurso. Por exemplo, em **Média de séries temporais ativas**, insira um número que seja `8000 + the number of nodes in your cluster * 15,000`. Se você tiver dois nós, você vai inserir `38,000`, que é `8000 + ( 2 * 15,000 )`.

## Pré-requisitos
<a name="solution-eks-prerequisites"></a>

Essa solução exige que você tenha realizado as ações a seguir antes de usá-la.

1. Você deve ter ou **criar um cluster do Amazon Elastic Kubernetes Service** que deseja monitorar, e o cluster deve ter pelo menos um nó. O cluster deve ter o acesso ao endpoint do servidor de API definido para incluir acesso privado (ele também pode permitir acesso público).

   O [modo de autenticação](https://docs.aws.amazon.com/eks/latest/userguide/grant-k8s-access.html#set-cam) deve incluir acesso à API (pode ser definido como `API` ou `API_AND_CONFIG_MAP`). Isso permite que a implantação da solução use entradas de acesso.

   O seguinte deve ser instalado no cluster (verdadeiro por padrão ao criar o cluster por meio do console, mas deve ser adicionado se você criar o cluster usando a AWS API ou AWS CLI): AWS CNI, CoreDNS e Kube-proxy. AddOns

   *Salve o nome do cluster para especificar posteriormente*. Isso pode ser encontrado nos detalhes do cluster no console do Amazon EKS.
**nota**  
Para obter detalhes sobre como criar um cluster do Amazon EKS, consulte [Conceitos básicos do Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html).

1. Você deve **criar um espaço de trabalho do Amazon Managed Service for Prometheus** no mesmo espaço de trabalho do seu cluster Amazon Conta da AWS EKS. Para obter detalhes, consulte [Create a workspace](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-create-workspace.html) no *Guia do usuário do Amazon Managed Service for Prometheus*.

   *Salve o ARN do espaço de trabalho do Amazon Managed Service for Prometheus para especificar posteriormente.*

1. Você deve **criar um espaço de trabalho Amazon Managed Grafana com** o Grafana versão 9 ou mais recente, da mesma Região da AWS forma que seu cluster Amazon EKS. Para obter detalhes sobre como criar um espaço de trabalho, consulte [Criar um espaço de trabalho do Amazon Managed Grafana](AMG-create-workspace.md).

   A função do espaço de trabalho deve ter permissões para acessar o Amazon Managed Service para Prometheus e Amazon. CloudWatch APIs A maneira mais fácil de fazer isso é usar [as permissões gerenciadas pelo serviço](AMG-manage-permissions.md) e selecionar o Amazon Managed Service para Prometheus e. CloudWatch Você também pode adicionar manualmente [AmazonGrafanaCloudWatchAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonGrafanaCloudWatchAccess)as políticas [AmazonPrometheusQueryAccess](https://docs.aws.amazon.com/prometheus/latest/userguide/security-iam-awsmanpol.html#AmazonPrometheusQueryAccess)e à sua função do IAM do workspace.

   *Salve o ID e o endpoint do espaço de trabalho do Amazon Managed Grafana para especificar posteriormente.* O ID está no formato `g-123example`. O ID e o endpoint podem ser encontrados no console do Amazon Managed Grafana. O endpoint é o URL do espaço de trabalho e inclui o ID. Por exemplo, .`https://g-123example.grafana-workspace.<region>.amazonaws.com/`

1. Se você estiver implantando a solução com o Terraform, deverá criar um **bucket do Amazon S3** que possa ser acessado pela sua conta. Isso será usado para armazenar arquivos de estado do Terraform da implantação.

   *Salve o ID do bucket do Amazon S3 para especificar posteriormente.*

1. Para visualizar as regras de alerta do Amazon Managed Service for Prometheus, você deve habilitar o [Grafana Alerting](v10-alerting-use-grafana-alerts.md) para o espaço de trabalho do Amazon Managed Grafana.

   Adicionalmente, o Amazon Managed Grafana deve ter as permissões a seguir para os recursos do Prometheus. Você deve adicioná-los às políticas gerenciadas pelo serviço ou pelo cliente descritas em [Permissões e políticas do Amazon Managed Grafana para AWS fontes de dados](AMG-manage-permissions.md).
   + `aps:ListRules`
   + `aps:ListAlertManagerSilences`
   + `aps:ListAlertManagerAlerts`
   + `aps:GetAlertManagerStatus`
   + `aps:ListAlertManagerAlertGroups`
   + `aps:PutAlertManagerSilences`
   + `aps:DeleteAlertManagerSilence`

**nota**  
Embora não seja estritamente necessário configurar a solução, você deve configurar a autenticação de usuário no espaço de trabalho do Amazon Managed Grafana antes que os usuários possam acessar os dashboards criados. Para obter mais informações, consulte [Autenticar usuários nos espaços de trabalho do Amazon Managed Grafana](authentication-in-AMG.md).

## Usar esta solução
<a name="solution-eks-use"></a>

Essa solução configura a AWS infraestrutura para oferecer suporte a relatórios e métricas de monitoramento de um cluster Amazon EKS. Você pode instalá-la usando o [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) ou com o [Terraform](https://www.terraform.io/).

------
#### [ Using AWS CDK ]

Uma forma pela qual essa solução é fornecida a você é como um AWS CDK aplicativo. Você fornecerá informações sobre os recursos que deseja usar e a solução criará o extrator, os logs e os dashboards para você.

**nota**  
As etapas aqui pressupõem que você tenha um ambiente com o AWS CLI, e AWS CDK, e o [Node.js e o](https://nodeja.org/) [NPM](https://docs.npmjs.com/) instalados. Você usará `make` e `brew` para simplificar a criação e outras ações comuns.

**Para usar essa solução para monitorar um cluster Amazon EKS com AWS CDK**

1. Certifique-se de ter concluído todas as etapas dos [pré-requisitos](#solution-eks-prerequisites).

1. Faça download de todos os arquivos da solução do Amazon S3. Os arquivos estão localizados em `s3://aws-observability-solutions/EKS/OSS/CDK/v3.0.0/iac`, e você pode fazer o download deles com o comando do Amazon S3 a seguir. Execute esse comando em uma pasta no ambiente de linha de comandos.

   ```
   aws s3 sync s3://aws-observability-solutions/EKS/OSS/CDK/v3.0.0/iac/ .
   ```

   Você não precisa modificar esses arquivos.

1. No ambiente de linha de comandos (na pasta em que você fez o download dos arquivos da solução), execute os comandos a seguir.

   Defina as variáveis de ambiente necessárias. Substitua *REGION**AMG\$1ENDPOINT*,*EKS\$1CLUSTER*, e *AMP\$1ARN* por seu Região da AWS endpoint de espaço de trabalho Amazon Managed Grafana (no formulário)`http://g-123example.grafana-workspace.us-east-1.amazonaws.com`, nome do cluster Amazon EKS e ARN do espaço de trabalho Amazon Managed Service for Prometheus.

   ```
   export AWS_REGION=REGION
   export AMG_ENDPOINT=AMG_ENDPOINT
   export EKS_CLUSTER_NAME=EKS_CLUSTER
   export AMP_WS_ARN=AMP_ARN
   ```

1. Você deve criar um token de conta de serviço com acesso ADMIN para chamar HTTP da Grafana. APIs Para obter detalhes, consulte [Use contas de serviço para se autenticar com o HTTP da Grafana APIs](service-accounts.md). Você pode usar o AWS CLI com os seguintes comandos para criar o token. Você precisará *GRAFANA\$1ID* substituir o pelo ID do seu espaço de trabalho Grafana (ele estará no formulário). `g-123example` Essa chave vai expirar após 7.200 segundos, ou 2 horas. Você pode alterar a hora (`seconds-to-live`), se necessário. A implantação leva menos de uma hora.

   ```
   GRAFANA_SA_ID=$(aws grafana create-workspace-service-account \
     --workspace-id GRAFANA_ID \
     --grafana-role ADMIN \
     --name grafana-operator-key \
     --query 'id' \
     --output text)
     
   # creates a new token for calling APIs
   export AMG_API_KEY=$(aws grafana create-workspace-service-account-token \
     --workspace-id $managed_grafana_workspace_id \
     --name "grafana-operator-key-$(date +%s)" \
     --seconds-to-live 7200 \
     --service-account-id $GRAFANA_SA_ID \
     --query 'serviceAccountToken.key' \
     --output text)
   ```

   Disponibilize a chave de API para o AWS CDK adicionando-a AWS Systems Manager com o comando a seguir. *AWS\$1REGION*Substitua pela região em que sua solução será executada (no formulário`us-east-1`).

   ```
   aws ssm put-parameter --name "/observability-aws-solution-eks-infra/grafana-api-key" \
       --type "SecureString" \
       --value $AMG_API_KEY \
       --region AWS_REGION \
       --overwrite
   ```

1. Execute o comando `make` a seguir, que vai instalar todas as outras dependências do projeto.

   ```
   make deps
   ```

1. Por fim, execute o AWS CDK projeto:

   ```
   make build && make pattern aws-observability-solution-eks-infra-$EKS_CLUSTER_NAME deploy
   ```

1. [Opcional] Depois que a criação da pilha for concluída, você poderá usar o mesmo ambiente para criar mais instâncias da pilha para outros clusters do Amazon EKS na mesma região, desde que preencha os outros pré-requisitos de cada um (incluindo espaços de trabalho separados do Amazon Managed Grafana e do Amazon Managed Service for Prometheus). Você precisará redefinir os comandos `export` com os novos parâmetros.

Quando a criação da pilha for concluída, o espaço de trabalho Amazon Managed Grafana será preenchido com um dashboard mostrando as métricas para o cluster do Amazon EKS. Levará alguns minutos para que as métricas sejam mostradas, pois o extrator começa a coletar métricas.

------
#### [ Using Terraform ]

Uma forma pela qual essa solução é fornecida a você é como uma solução Terraform. Você fornecerá informações sobre os recursos que deseja usar e a solução criará o extrator, os logs e os dashboards para você.

**Para usar essa solução para monitorar um cluster do Amazon EKS com o Terraform**

1. Certifique-se de ter concluído todas as etapas dos [pré-requisitos](#solution-eks-prerequisites).

1. Faça download de todos os arquivos da solução do Amazon S3. Os arquivos estão localizados em `s3://aws-observability-solutions/EKS/OSS/Terraform/v3.0.0/`, e você pode fazer o download deles com o comando do Amazon S3 a seguir. Execute esse comando em uma pasta no ambiente de linha de comandos e, em seguida, altere o diretório para a pasta da qual você implantará.

   ```
   aws s3 sync s3://aws-observability-solutions/EKS/OSS/Terraform/v3.0.0/ .
   cd eks-monitoring
   ```

   Você não precisa modificar esses arquivos.

1. No ambiente de linha de comandos (na pasta em que você fez o download dos arquivos da solução), execute os comandos a seguir.

   Defina as variáveis de ambiente necessárias. Substitua*REGION*,*AMG\$1ENDPOINT*,*EKS\$1CLUSTER*,*AMP\$1ARN*, e*S3\$1ID*, por Região da AWS onde você deseja que novos recursos sejam implantados (por exemplo,`us-east-1`), o endpoint do espaço de trabalho Amazon Managed Grafana (no formulário`http://g-123example.grafana-workspace.us-east-1.amazonaws.com`), o nome do cluster Amazon EKS, o ARN do espaço de trabalho Amazon Managed Service for Prometheus e o ID do bucket do Amazon S3.

   ```
   export TF_VAR_aws_region=REGION
   export TF_VAR_amg_endpoint=AMG_ENDPOINT
   export TF_VAR_eks_cluster_name=EKS_CLUSTER
   export TF_VAR_amp_ws_arn=AMP_ARN
   export TF_VAR_s3_bucket_id=S3_ID
   ```

1. Você deve criar um token de conta de serviço com acesso ADMIN para chamar HTTP da Grafana. APIs Para obter detalhes, consulte [Use contas de serviço para se autenticar com o HTTP da Grafana APIs](service-accounts.md). Você pode usar o AWS CLI com os seguintes comandos para criar o token. Você precisará *GRAFANA\$1ID* substituir o pelo ID do seu espaço de trabalho Grafana (ele estará no formulário). `g-123example` Essa chave vai expirar após 7.200 segundos, ou 2 horas. Você pode alterar a hora (`seconds-to-live`), se necessário. A implantação leva menos de uma hora.

   ```
   GRAFANA_SA_ID=$(aws grafana create-workspace-service-account \
     --workspace-id GRAFANA_ID \
     --grafana-role ADMIN \
     --name grafana-operator-key \
     --query 'id' \
     --output text)
     
   # creates a new token for running Terraform
   export TF_VAR_grafana_api_key=$(aws grafana create-workspace-service-account-token \
     --workspace-id $managed_grafana_workspace_id \
     --name "grafana-operator-key-$(date +%s)" \
     --seconds-to-live 7200 \
     --service-account-id $GRAFANA_SA_ID \
     --query 'serviceAccountToken.key' \
     --output text)
   ```
**nota**  
Na primeira etapa acima, a criação de uma conta de serviço para o espaço de trabalho não é necessária caso já tenha uma conta de serviço. Nesse caso, *\$1GRAFANA\$1SA\$1ID* substitua o pelo ID da sua conta de serviço.

1. Execute o comando `terraform` a seguir para inicializar o Terraform com a solução.

   ```
   terraform init -reconfigure \
   -backend-config="bucket=${TF_VAR_s3_bucket_id}" \
   -backend-config="region=${TF_VAR_aws_region}" \
   -backend-config="key=state/${TF_VAR_eks_cluster_name}/terraform.tfstate"
   ```

1. Por fim, implante o projeto do Terraform:

   ```
   terraform apply
   ```

Quando a criação da solução for concluída, o espaço de trabalho do Amazon Managed Grafana será preenchido com um dashboard mostrando as métricas para o cluster do Amazon EKS. Levará alguns minutos para que as métricas sejam mostradas, pois o extrator começa a coletar métricas.

------

## Lista de métricas monitoradas
<a name="solution-eks-metrics"></a>

Essa solução cria um extrator que coleta as métricas do cluster do Amazon EKS. Essas métricas são armazenadas no Amazon Managed Service for Prometheus e exibidas nos dashboards do Amazon Managed Grafana. Por padrão, o extrator coleta todas as [métricas compatíveis com o Prometheus](https://docs.aws.amazon.com/prometheus/latest/userguide/prom-compatible-metrics.html) que são expostas pelo cluster. Instalar um software no cluster que produza mais métricas aumentará as métricas coletadas. Se quiser, você pode reduzir o número de métricas [atualizando o extrator com uma configuração que filtra as métricas](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html#AMP-collector-configuration).

As métricas a seguir são rastreadas com essa solução, em uma configuração básica do cluster do Amazon EKS sem nenhum software adicional instalado.


| Métrica | Descrição e Objetivo | 
| --- | --- | 
|  `aggregator_unavailable_apiservice`  |  Cujos indicadores estão marcados como indisponíveis, detalhados por APIService nome. APIServices   | 
|  `apiserver_admission_webhook_admission_duration_seconds_bucket`  |  Histograma de latência do webhook de admissão em segundos, identificado por nome e dividido para cada operação e recurso e tipo de API (validar ou admitir).  | 
|  `apiserver_current_inflight_requests`  |  Número máximo do limite de solicitações em andamento usadas atualmente desse apiserver por tipo de solicitação no último segundo.  | 
|  `apiserver_envelope_encryption_dek_cache_fill_percent`  |  Porcentagem dos slots de cache atualmente ocupados pelo cache DEKs.  | 
|  `apiserver_flowcontrol_current_executing_requests`  |  Número de solicitações no estágio de execução inicial (para um WATCH) ou em qualquer estágio de execução (para um não WATCH) no subsistema da API Priority and Fairness.  | 
|  `apiserver_flowcontrol_rejected_requests_total`  |  Número de solicitações no estágio de execução inicial (para um WATCH) ou em qualquer estágio de execução (para um não WATCH) no subsistema da API Priority and Fairness que foram rejeitadas.  | 
|  `apiserver_flowcontrol_request_concurrency_limit`  |  Número nominal de lugares de execução configurados para cada nível de prioridade.  | 
|  `apiserver_flowcontrol_request_execution_seconds_bucket`  |  O histograma compartimentado da duração do estágio inicial (para um WATCH) ou de qualquer estágio (para um não WATCH) da execução da solicitação no subsistema da API Priority and Fairness.  | 
|  `apiserver_flowcontrol_request_queue_length_after_enqueue_count`  |  A contagem do estágio inicial (para um WATCH) ou de qualquer estágio (para um não WATCH) da execução da solicitação no subsistema da API Priority and Fairness.  | 
|  `apiserver_request`  |  Indica uma solicitação do servidor de API.  | 
|  `apiserver_requested_deprecated_apis`  |  Medidor das obsoletas APIs que foram solicitadas, divididas por grupo de API, versão, recurso, sub-recurso e removed\$1release.  | 
|  `apiserver_request_duration_seconds`  |  Distribuição da latência de resposta em segundos para cada verbo, valor de simulação, grupo, versão, recurso, sub-recurso, escopo e componente.  | 
|  `apiserver_request_duration_seconds_bucket`  |  O histograma compartimentado da distribuição da latência de resposta em segundos para cada verbo, valor de simulação, grupo, versão, recurso, sub-recurso, escopo e componente.  | 
|  `apiserver_request_slo_duration_seconds`  |  A distribuição da latência de resposta do objetivo do serviço (SLO) em segundos para cada verbo, valor de simulação, grupo, versão, recurso, sub-recurso, escopo e componente.  | 
|  `apiserver_request_terminations_total`  |  Número de solicitações que o apiserver encerrou como autodefesa.  | 
|  `apiserver_request_total`  |  Contador de solicitações do apiserver divididas para cada verbo, valor de simulação, grupo, versão, recurso, escopo, componente e código de resposta HTTP.  | 
|  `container_cpu_usage_seconds_total`  |  Tempo cumulativo de CPU consumido.  | 
|  `container_fs_reads_bytes_total`  |  Contagem cumulativa de bytes lidos.  | 
|  `container_fs_reads_total`  |  Contagem cumulativa de leituras concluídas.  | 
|  `container_fs_writes_bytes_total`  |  Contagem cumulativa de bytes gravados.  | 
|  `container_fs_writes_total`  |  Contagem cumulativa de gravações concluídas.  | 
|  `container_memory_cache`  |  Memória total em cache da página.  | 
|  `container_memory_rss`  |  Tamanho do RSS.  | 
|  `container_memory_swap`  |  Uso alternado de contêineres.  | 
|  `container_memory_working_set_bytes`  |  Conjunto de trabalho atual.  | 
|  `container_network_receive_bytes_total`  |  Contagem cumulativa de bytes recebidos.  | 
|  `container_network_receive_packets_dropped_total`  |  Contagem cumulativa de pacotes descartados durante o recebimento.  | 
|  `container_network_receive_packets_total`  |  Contagem cumulativa de pacotes recebidos.  | 
|  `container_network_transmit_bytes_total`  |  Contagem cumulativa de bytes transmitidos.  | 
|  `container_network_transmit_packets_dropped_total`  |  Contagem cumulativa de pacotes descartados durante a transmissão.  | 
|  `container_network_transmit_packets_total`  |  Contagem cumulativa de pacotes transmitidos.  | 
|  `etcd_request_duration_seconds_bucket`  |  O histograma compartimentado da latência da solicitação etcd em segundos para cada operação e tipo de objeto.  | 
|  `go_goroutines`  |  Número de goroutines que existem atualmente.  | 
|  `go_threads`  |  Número de threads de sistema operacional criados.  | 
|  `kubelet_cgroup_manager_duration_seconds_bucket`  |  O histograma compartimentado da duração em segundos para operações do gerenciador de cgroups. Dividido por método.  | 
|  `kubelet_cgroup_manager_duration_seconds_count`  |  Duração em segundos para operações do gerenciador de cgroups. Dividido por método.  | 
|  `kubelet_node_config_error`  |  Essa métrica será true (1) se o nó estiver enfrentando um erro relacionado à configuração; caso contrário, será false (0).  | 
|  `kubelet_node_name`  |  O nome do nó. A contagem é sempre 1.  | 
|  `kubelet_pleg_relist_duration_seconds_bucket`  |  O histograma compartimentado da duração em segundos para listar novamente os pods no PLEG.  | 
|  `kubelet_pleg_relist_duration_seconds_count`  |  A contagem da duração em segundos para listar novamente os pods no PLEG.  | 
|  `kubelet_pleg_relist_interval_seconds_bucket`  |  O histograma compartimentado do intervalo em segundos entre a nova listagem no PLEG.  | 
|  `kubelet_pod_start_duration_seconds_count`  |  A contagem da duração em segundos desde que o kubelet detecta um pod pela primeira vez até o pod começar a funcionar.  | 
|  `kubelet_pod_worker_duration_seconds_bucket`  |  O histograma compartimentado da duração em segundos para sincronizar um único pod. Detalhado por tipo de operação: criar, atualizar ou sincronizar.  | 
|  `kubelet_pod_worker_duration_seconds_count`  |  A contagem da duração em segundos para sincronizar um único pod. Detalhado por tipo de operação: criar, atualizar ou sincronizar.  | 
|  `kubelet_running_containers`  |  Número de contêineres em execução no momento.  | 
|  `kubelet_running_pods`  |  Número de pods que têm uma sandbox de pods em execução.  | 
|  `kubelet_runtime_operations_duration_seconds_bucket`  |  O histograma compartimentado da duração em segundos das operações de runtime. Dividido por tipo de operação.  | 
|  `kubelet_runtime_operations_errors_total`  |  Número cumulativo de erros de operação no runtime por tipo de operação.  | 
|  `kubelet_runtime_operations_total`  |  Número cumulativo de operações no runtime por tipo de operação.  | 
|  `kube_node_status_allocatable`  |  A quantidade de recursos alocáveis para pods (depois de reservar alguns para daemons do sistema).  | 
|  `kube_node_status_capacity`  |  A quantidade total de recursos disponíveis para um nó.  | 
|  `kube_pod_container_resource_limits (CPU)`  |  O número de recursos de limite solicitados por um contêiner.  | 
|  `kube_pod_container_resource_limits (Memory)`  |  O número de recursos de limite solicitados por um contêiner.  | 
|  `kube_pod_container_resource_requests (CPU)`  |  O número de recursos de solicitação requeridos por um contêiner.  | 
|  `kube_pod_container_resource_requests (Memory)`  |  O número de recursos de solicitação requeridos por um contêiner.  | 
|  `kube_pod_owner`  |  Informações sobre o proprietário do pod.  | 
|  `kube_resourcequota`  |  As cotas de recursos no Kubernetes impõem limites de uso de recursos, como CPU, memória e armazenamento em namespaces.  | 
|  `node_cpu`  |  As métricas de uso da CPU para um nó, incluindo o uso por núcleo e o uso total.  | 
|  `node_cpu_seconds_total`  |  Segundos CPUs gastos em cada modo.  | 
|  `node_disk_io_time_seconds`  |  A quantidade cumulativa de tempo gasto executando I/O operações em disco por um nó.  | 
|  `node_disk_io_time_seconds_total`  |  A quantidade total de tempo gasto executando I/O operações em disco pelo nó.  | 
|  `node_disk_read_bytes_total`  |  O número total de bytes lidos do disco pelo nó.  | 
|  `node_disk_written_bytes_total`  |  O número total de bytes gravados no disco pelo nó.  | 
|  `node_filesystem_avail_bytes`  |  A quantidade de espaço disponível em bytes no sistema de arquivos de um nó em um cluster do Kubernetes.  | 
|  `node_filesystem_size_bytes`  |  O tamanho total do sistema de arquivos no nó.  | 
|  `node_load1`  |  A média de carga de 1 minuto do uso da CPU de um nó.  | 
|  `node_load15`  |  A média de carga de 15 minutos do uso da CPU de um nó.  | 
|  `node_load5`  |  A média de carga de 5 minutos do uso da CPU de um nó.  | 
|  `node_memory_Buffers_bytes`  |  A quantidade de memória usada para o armazenamento em cache do buffer pelo sistema operacional do nó.  | 
|  `node_memory_Cached_bytes,`  |  A quantidade de memória usada para o armazenamento em cache do disco pelo sistema operacional do nó.  | 
|  `node_memory_MemAvailable_bytes`  |  A quantidade de memória disponível para uso por aplicações e caches.  | 
|  `node_memory_MemFree_bytes`  |  A quantidade de memória livre disponível no nó.  | 
|  `node_memory_MemTotal_bytes`  |  A quantidade total de memória física disponível no nó.  | 
|  `node_network_receive_bytes_total`  |  O número total de bytes recebidos pela rede pelo nó.  | 
|  `node_network_transmit_bytes_total`  |  O número total de bytes transmitidos pela rede pelo nó.  | 
|  `process_cpu_seconds_total`  |  Tempo total da CPU do usuário e do sistema gasto em segundos.  | 
|  `process_resident_memory_bytes`  |  Tamanho de memória residente em bytes.  | 
|  `rest_client_requests_total`  |  Número de solicitações HTTP, particionadas por código de status, método e host.  | 
|  `rest_client_request_duration_seconds_bucket`  |  O histograma compartimentado da latência da solicitação em segundos. Dividido por verbo e host.  | 
|  `storage_operation_duration_seconds_bucket`  |  O histograma compartimentado da duração das operações de armazenamento.  | 
|  `storage_operation_duration_seconds_count`  |  A contagem da duração das operações de armazenamento.  | 
|  `storage_operation_errors_total`  |  Número cumulativo de erros durante as operações de armazenamento.  | 
|  `up`  |  Uma métrica que indica se o destino monitorado (por exemplo, nó) está ativo e funcionando.  | 
|  `volume_manager_total_volumes`  |  O número total de volumes gerenciados pelo gerenciador de volumes.  | 
|  `workqueue_adds_total`  |  Número total de adições tratadas pela fila de trabalho.  | 
|  `workqueue_depth`  |  Profundidade atual da fila de trabalho.  | 
|  `workqueue_queue_duration_seconds_bucket`  |  O histograma compartimentado de quanto tempo em segundos um item permanece na fila de trabalho antes de ser solicitado.  | 
|  `workqueue_work_duration_seconds_bucket`  |  O histograma compartimentado de quanto tempo, em segundos, leva o processamento de um item da fila de trabalho.  | 

## Lista de alertas criados
<a name="solution-eks-alerts"></a>

As tabelas a seguir listam os alertas criados por essa solução. Os alertas são criados como regras no Amazon Managed Service for Prometheus e exibidos no espaço de trabalho do Amazon Managed Grafana.

Você pode modificar as regras, incluindo adicionar ou excluir regras, [editando o arquivo de configuração de regras](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-rules-edit.html) no espaço de trabalho do Amazon Managed Service for Prometheus.

Esses dois alertas são alertas especiais que são tratados de forma um pouco diferente dos alertas típicos. Em vez de alertar sobre um problema, eles fornecem informações que são usadas para monitorar o sistema. A descrição inclui os detalhes sobre como usar esses alertas.


| Alerta | Descrição e uso | 
| --- | --- | 
| `Watchdog` | Este é um alerta destinado a garantir que todo o pipeline de alertas esteja funcionando. Este alerta está sempre disparando, portanto, ele deve estar sempre disparando no Alertmanager, e sempre em um receptor. Você pode integrar isso ao seu mecanismo de notificação para enviar uma notificação quando esse alerta *não* estiver sendo disparado. Por exemplo, você pode usar a **DeadMansSnitch**integração em PagerDuty. | 
| `InfoInhibitor` | Este é um alerta usado para inibir alertas de informações. Por si só, os alertas com nível de informações podem ser muito ruidosos, mas são relevantes quando combinados com outros alertas. Esse alerta dispara sempre que há um alerta `severity=info`, e para de disparar quando outro alerta com uma severidade de `warning` ou `critical` começa a ser disparado no mesmo namespace. Esse alerta deve ser roteado para um receptor nulo e configurado para inibir alertas com `severity=info`. | 

Os alertas a seguir fornecem informações ou avisos sobre o sistema.


| Alerta | Gravidade | Description | 
| --- | --- | --- | 
|  `NodeNetworkInterfaceFlapping`  | warning |  A interface de rede está mudando de status com frequência  | 
|  `NodeFilesystemSpaceFillingUp`  | warning |  O sistema de arquivos vai ficar sem espaço nas próximas 24 horas.  | 
|  `NodeFilesystemSpaceFillingUp`  | critical |  O sistema de arquivos vai ficar sem espaço nas próximas 4 horas.  | 
|  `NodeFilesystemAlmostOutOfSpace`  | warning |  O sistema de arquivos tem menos de 5% de espaço livre.  | 
|  `NodeFilesystemAlmostOutOfSpace`  | critical |  O sistema de arquivos tem menos de 3% de espaço livre.  | 
|  `NodeFilesystemFilesFillingUp`  | warning |  O sistema de arquivos vai ficar sem inodes nas próximas 24 horas.  | 
|  `NodeFilesystemFilesFillingUp`  | critical |  O sistema de arquivos vai ficar sem inodes nas próximas 4 horas.  | 
|  `NodeFilesystemAlmostOutOfFiles`  | warning |  O sistema de arquivos tem menos de 5% de inodes disponíveis.  | 
|  `NodeFilesystemAlmostOutOfFiles`  | critical |  O sistema de arquivos tem menos de 3% de inodes disponíveis.  | 
|  `NodeNetworkReceiveErrs`  | warning |  A interface de rede está relatando muitos erros de recebimento.  | 
|  `NodeNetworkTransmitErrs`  | warning |  A interface de rede está relatando muitos erros de transmissão.  | 
|  `NodeHighNumberConntrackEntriesUsed`  | warning |  O número de entradas do conntrack está chegando perto do limite.  | 
|  `NodeTextFileCollectorScrapeError`  | warning |  Falha na extração do coletor de arquivos de texto do Node Exporter.  | 
|  `NodeClockSkewDetected`  | warning |  Distorção do relógio detectada.  | 
|  `NodeClockNotSynchronizzing`  | warning |  O relógio não está sincronizando.  | 
|  `NodeRAIDDegraded`  | critical |  A matriz RAID está degradada  | 
|  `NodeRAIDDiskFailure`  | warning |  Dispositivo com falha na matriz RAID  | 
|  `NodeFileDescriptorLimit`  | warning |  O Kernel vai esgotar o limite de descritores de arquivo em breve.  | 
|  `NodeFileDescriptorLimit`  | critical |  O Kernel vai esgotar o limite de descritores de arquivo em breve.  | 
|  `KubeNodeNotReady`  | warning |  O Node não está pronto.  | 
|  `KubeNodeUnreachable`  | warning |  O Node está inacessível.  | 
|  `KubeletTooManyPods`  | info |  O Kubelet está funcionando com capacidade máxima.  | 
|  `KubeNodeReadinessFlapping`  | warning |  O status de prontidão do nó está oscilando.  | 
|  `KubeletPlegDurationHigh`  | warning |  O Pod Lifecycle Event Generator do Kubelet está demorando muito para ser listado novamente.  | 
|  `KubeletPodStartUpLatencyHigh`  | warning |  A latência de inicialização do pod do Kubelet é muito alta.  | 
|  `KubeletClientCertificateExpiration`  | warning |  O certificado do cliente Kubelet está prestes a expirar.  | 
|  `KubeletClientCertificateExpiration`  | critical |  O certificado do cliente Kubelet está prestes a expirar.  | 
|  `KubeletServerCertificateExpiration`  | warning |  O certificado do servidor Kubelet está prestes a expirar.  | 
|  `KubeletServerCertificateExpiration`  | critical |  O certificado do servidor Kubelet está prestes a expirar.  | 
|  `KubeletClientCertificateRenewalErrors`  | warning |  O Kubelet não conseguiu renovar seu certificado de cliente.  | 
|  `KubeletServerCertificateRenewalErrors`  | warning |  O Kubelet não conseguiu renovar seu certificado de servidor.  | 
|  `KubeletDown`  | critical |  O destino desapareceu da descoberta do destino do Prometheus.  | 
|  `KubeVersionMismatch`  | warning |  Diferentes versões semânticas dos componentes do Kubernetes em execução.  | 
|  `KubeClientErrors`  | warning |  O cliente do servidor da API do Kubernetes está apresentando erros.  | 
|  `KubeClientCertificateExpiration`  | warning |  O certificado do cliente está prestes a expirar.  | 
|  `KubeClientCertificateExpiration`  | critical |  O certificado do cliente está prestes a expirar.  | 
|  `KubeAggregatedAPIErrors`  | warning |  A API agregada do Kubernetes relatou erros.  | 
|  `KubeAggregatedAPIDown`  | warning |  A API agregada do Kubernetes está inativa.  | 
|  `KubeAPIDown`  | critical |  O destino desapareceu da descoberta do destino do Prometheus.  | 
|  `KubeAPITerminatedRequests`  | warning |  O apiserver do kubernetes encerrou \$1\$1 \$1value \$1 humanizePercentage \$1\$1 de suas solicitações recebidas.  | 
|  `KubePersistentVolumeFillingUp`  | critical |  O volume persistente está sendo preenchido.  | 
|  `KubePersistentVolumeFillingUp`  | warning |  O volume persistente está sendo preenchido.  | 
|  `KubePersistentVolumeInodesFillingUp`  | critical |  O inode de volume persistente está sendo preenchido.  | 
|  `KubePersistentVolumeInodesFillingUp`  | warning |  Os inodes de volume persistente estão sendo preenchidos.  | 
|  `KubePersistentVolumeErrors`  | critical |  O volume persistente está tendo problemas com o provisionamento.  | 
|  `KubeCPUOvercommit`  | warning |  O cluster comprometeu demais as solicitações de recursos de CPU.  | 
|  `KubeMemoryOvercommit`  | warning |  O cluster comprometeu demais as solicitações de recursos de memória.  | 
|  `KubeCPUQuotaOvercommit`  | warning |  O cluster comprometeu demais as solicitações de recursos de CPU.  | 
|  `KubeMemoryQuotaOvercommit`  | warning |  O cluster comprometeu demais as solicitações de recursos de memória.  | 
|  `KubeQuotaAlmostFull`  | info |  A cota de namespaces vai ficar cheia.  | 
|  `KubeQuotaFullyUsed`  | info |  A cota de namespaces foi totalmente usada.  | 
|  `KubeQuotaExceeded`  | warning |  A cota de namespaces excedeu os limites.  | 
|  `CPUThrottlingHigh`  | info |  Os processos estão com o controle de utilização elevado da CPU.  | 
|  `KubePodCrashLooping`  | warning |  O pod está em um loop de falha.  | 
|  `KubePodNotReady`  | warning |  O pod não está no estado pronto há mais de 15 minutos.  | 
|  `KubeDeploymentGenerationMismatch`  | warning |  Incompatibilidade de geração de implantação devido à possível reversão  | 
|  `KubeDeploymentReplicasMismatch`  | warning |  A implantação não correspondeu ao número esperado de réplicas.  | 
|  `KubeStatefulSetReplicasMismatch`  | warning |  StatefulSet não correspondeu ao número esperado de réplicas.  | 
|  `KubeStatefulSetGenerationMismatch`  | warning |  StatefulSet incompatibilidade de geração devido à possível reversão  | 
|  `KubeStatefulSetUpdateNotRolledOut`  | warning |  StatefulSet a atualização não foi lançada.  | 
|  `KubeDaemonSetRolloutStuck`  | warning |  DaemonSet o lançamento está travado.  | 
|  `KubeContainerWaiting`  | warning |  Contêiner de pods esperando por mais de uma hora  | 
|  `KubeDaemonSetNotScheduled`  | warning |  DaemonSet os pods não estão programados.  | 
|  `KubeDaemonSetMisScheduled`  | warning |  DaemonSet os pods estão programados incorretamente.  | 
|  `KubeJobNotCompleted`  | warning |  Trabalho não concluído a tempo  | 
|  `KubeJobFailed`  | warning |  Falha ao concluir o trabalho.  | 
|  `KubeHpaReplicasMismatch`  | warning |  O HPA não correspondeu ao número desejado de réplicas.  | 
|  `KubeHpaMaxedOut`  | warning |  O HPA está sendo executado com o máximo de réplicas  | 
|  `KubeStateMetricsListErrors`  | critical |  kube-state-metrics está enfrentando erros nas operações da lista.  | 
|  `KubeStateMetricsWatchErrors`  | critical |  kube-state-metrics está enfrentando erros nas operações do relógio.  | 
|  `KubeStateMetricsShardingMismatch`  | critical |  kube-state-metrics a fragmentação está configurada incorretamente.  | 
|  `KubeStateMetricsShardsMissing`  | critical |  kube-state-metrics faltam fragmentos.  | 
|  `KubeAPIErrorBudgetBurn`  | critical |  O servidor da API está consumindo muito orçamento de erro.  | 
|  `KubeAPIErrorBudgetBurn`  | critical |  O servidor da API está consumindo muito orçamento de erro.  | 
|  `KubeAPIErrorBudgetBurn`  | warning |  O servidor da API está consumindo muito orçamento de erro.  | 
|  `KubeAPIErrorBudgetBurn`  | warning |  O servidor da API está consumindo muito orçamento de erro.  | 
|  `TargetDown`  | warning |  Um ou mais destinos estão inativos.  | 
|  `etcdInsufficientMembers`  | critical |  Membros insuficientes do cluster etcd.  | 
|  `etcdHighNumberOfLeaderChanges`  | warning |  Número alto de alterações do líder do cluster etcd.  | 
|  `etcdNoLeader`  | critical |  O cluster etcd não tem um líder.  | 
|  `etcdHighNumberOfFailedGRPCRequests`  | warning |  Número alto de solicitações de gRPC com falha do cluster etcd.  | 
|  `etcdGRPCRequestsSlow`  | critical |  As solicitações de gRPC do cluster etcd estão lentas.  | 
|  `etcdMemberCommunicationSlow`  | warning |  A comunicação dos membros do cluster etcd está lenta.  | 
|  `etcdHighNumberOfFailedProposals`  | warning |  Número alto de propostas sem êxito do cluster etcd.  | 
|  `etcdHighFsyncDurations`  | warning |  Durações elevadas de fsync do cluster etcd.  | 
|  `etcdHighCommitDurations`  | warning |  O cluster etcd tem durações de confirmação maiores do que as esperadas.  | 
|  `etcdHighNumberOfFailedHTTPRequests`  | warning |  O cluster etcd falhou nas solicitações HTTP.  | 
|  `etcdHighNumberOfFailedHTTPRequests`  | critical |  Número alto de solicitações HTTP com falha do cluster etcd.  | 
|  `etcdHTTPRequestsSlow`  | warning |  As solicitações de HTTP do cluster etcd estão lentas.  | 
|  `HostClockNotSynchronizing`  | warning |  O relógio host não está sincronizando.  | 
|  `HostOomKillDetected`  | warning |  Detectada a eliminação por memória insuficiente do host.  | 

## Solução de problemas
<a name="solution-eks-troubleshooting"></a>

Há algumas coisas que podem fazer com que a configuração do projeto falhe. Certifique-se de verificar o seguinte:
+ Você deve concluir todos os [pré-requisitos](#solution-eks-prerequisites) antes de instalar a solução.
+ O cluster deve ter pelo menos um nó antes de tentar criar a solução ou acessar as métricas.
+ O cluster do Amazon EKS deve ter os complementos `AWS CNI`, `CoreDNS` e `kube-proxy` instalados. Se eles não estiverem instalados, a solução não funcionará corretamente. Eles são instalados por padrão ao criar o cluster por meio do console. Talvez seja necessário instalá-los se o cluster tiver sido criado por meio de um AWS SDK.
+ O tempo limite de instalação dos pods do Amazon EKS expirou. Isso poderá acontecer se não houver capacidade suficiente de nós disponível. Há várias causas para esses problemas, incluindo:
  + O cluster do Amazon EKS foi inicializado com o Fargate em vez do Amazon EC2. Esse projeto requer o Amazon EC2.
  + Os nós estão [corrompidos](https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html) e, portanto, indisponíveis.

    Você pode usar `kubectl describe node NODENAME | grep Taints` para verificar os taints. Em seguida, `kubectl taint node NODENAME TAINT_NAME-` para remover os taints. Certifique-se de incluir `-` após o nome do taint.
  + Os nós atingiram o limite de capacidade. Nesse caso, você pode criar um novo nó ou aumentar a capacidade.
+ Você não vê nenhum dashboard no Grafana: você está usando o ID incorreto do espaço de trabalho do Grafana.

  Execute o seguinte comando para obter informações sobre o Grafana:

  ```
  kubectl describe grafanas external-grafana -n grafana-operator
  ```

  Você pode verificar os resultados do URL correto do espaço de trabalho. Se não for o que você espera, implante novamente com o ID do espaço de trabalho correto.

  ```
  Spec:
    External:
      API Key:
        Key:   GF_SECURITY_ADMIN_APIKEY
        Name:  grafana-admin-credentials
      URL:     https://g-123example.grafana-workspace.aws-region.amazonaws.com
  Status:
    Admin URL:  https://g-123example.grafana-workspace.aws-region.amazonaws.com
    Dashboards:
      ...
  ```
+ Você não vê nenhum dashboard no Grafana: você está usando uma chave de API expirada.

  Para procurar esse caso, você precisará obter o operador do Grafana e verificar se há erros nos logs. Obtenha o nome do operador do Grafana com este comando:

  ```
  kubectl get pods -n grafana-operator
  ```

  Isso retornará o nome do operador, por exemplo:

  ```
  NAME                               READY   STATUS    RESTARTS   AGE
  grafana-operator-1234abcd5678ef90   1/1     Running   0          1h2m
  ```

  Use o nome do operador no seguinte comando:

  ```
  kubectl logs grafana-operator-1234abcd5678ef90 -n grafana-operator
  ```

  Mensagens de erro como as seguintes indicam uma chave de API expirada:

  ```
  ERROR   error reconciling datasource    {"controller": "grafanadatasource", "controllerGroup": "grafana.integreatly.org", "controllerKind": "GrafanaDatasource", "GrafanaDatasource": {"name":"grafanadatasource-sample-amp","namespace":"grafana-operator"}, "namespace": "grafana-operator", "name": "grafanadatasource-sample-amp", "reconcileID": "72cfd60c-a255-44a1-bfbd-88b0cbc4f90c", "datasource": "grafanadatasource-sample-amp", "grafana": "external-grafana", "error": "status: 401, body: {\"message\":\"Expired API key\"}\n"}
  github.com/grafana-operator/grafana-operator/controllers.(*GrafanaDatasourceReconciler).Reconcile
  ```

  Nesse caso, crie uma chave de API e implante a solução novamente. Se o problema persistir, você pode forçar a sincronização usando o seguinte comando antes da nova implantação:

  ```
  kubectl delete externalsecret/external-secrets-sm -n grafana-operator
  ```
+ *Instalações do CDK*: o parâmetro SSM não está presente. Se você encontrar um erro como a seguir, execute `cdk bootstrap` e tente novamente.

  ```
  Deployment failed: Error: aws-observability-solution-eks-infra-$EKS_CLUSTER_NAME: SSM 
  parameter /cdk-bootstrap/xxxxxxx/version not found. Has the environment been 
  bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/
  guide/bootstrapping.html)
  ```
+ A implantação poderá falhar se o provedor OIDC já existir. Você verá um erro como o seguinte (neste caso, para instalações do CDK):

  ```
  | CREATE_FAILED | Custom::AWSCDKOpenIdConnectProvider | OIDCProvider/Resource/Default
  Received response status [FAILED] from custom resource. Message returned: 
  EntityAlreadyExistsException: Provider with url https://oidc.eks.REGION.amazonaws.com/id/PROVIDER ID already exists.
  ```

  Neste caso, acesse o portal do IAM, exclua o provedor OIDC e tente novamente.
+ *Instalações do Terraform*: você vê uma mensagem de erro que inclui `cluster-secretstore-sm failed to create kubernetes rest client for update of resource` e `failed to create kubernetes rest client for update of resource`.

  Esse erro normalmente indica que o operador externo de segredos não está instalado ou habilitado no cluster do Kubernetes. Ele é instalado como parte da implantação da solução, mas às vezes não está pronto quando a solução precisa.

  Você pode verificar se está instalado com o seguinte comando:

  ```
  kubectl get deployments -n external-secrets
  ```

  Se estiver instalado, poderá levar um tempo para que o operador esteja totalmente pronto para ser usado. Você pode verificar o status das definições de recursos personalizados (CRDs) necessárias executando o seguinte comando:

  ```
  kubectl get crds|grep external-secrets
  ```

  Esse comando deve listar os CRDs relacionados ao operador de segredos externos, incluindo `clustersecretstores.external-secrets.io` `externalsecrets.external-secrets.io` e. Se não estiverem na lista, aguarde mais alguns minutos e verifique novamente.

  Depois de CRDs registrados, você pode executar `terraform apply` novamente para implantar a solução.

# Solução para monitorar aplicações JVM com o Amazon Managed Grafana
<a name="solution-jvm"></a>

As aplicações criadas com Máquinas virtuais Java (JVM) têm necessidades de monitoramento especializadas. Esta página descreve um modelo que fornece uma solução para monitorar aplicações baseadas em JVM em execução no cluster Amazon EKS. A solução pode ser instalada usando [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html).

**nota**  
Essa solução fornece monitoramento para uma aplicação JVM. Se sua aplicação JVM for especificamente uma aplicação Apache Kafka, você pode optar por usar a [solução de monitoramento Kafka](solution-kafka.md) , que inclui monitoramento JVM e Kafka.

Essa solução configura:
+ O espaço de trabalho do Amazon Managed Service for Prometheus armazena métricas da Máquina virtual Java (JVM) do cluster Amazon EKS.
+ Coleta de métricas específicas da JVM usando o CloudWatch agente, bem como um complemento do CloudWatch agente. As métricas são configuradas para serem enviadas para o espaço de trabalho do Amazon Managed Service for Prometheus.
+ Seu espaço de trabalho do Amazon Managed Grafana para extrair essas métricas e criar painéis para ajudar a monitorar o cluster.

**nota**  
Essa solução fornece métricas de JVM para sua aplicação em execução no Amazon EKS, mas não inclui métricas do Amazon EKS. Além disso, você pode usar a [solução observabilidade para monitorar o Amazon EKS](solution-eks.md) para ver métricas e alertas do seu cluster Amazon EKS.

## Sobre esta solução
<a name="solution-jvm-about"></a>

Esta solução configura um espaço de trabalho do Amazon Managed Grafana para fornecer métricas para sua aplicação da Máquina virtual Java (JVM). As métricas são usadas para gerar painéis que ajudam você a operar sua aplicação com mais eficiência, fornecendo insights sobre a integridade e o desempenho da aplicação.

A imagem a seguir mostra um exemplo de um dos painéis criados por essa solução.

![\[Uma imagem mostrando um exemplo de uma pasta de dashboard do Grafana criada usando essa solução.\]](http://docs.aws.amazon.com/pt_br/grafana/latest/userguide/images/jvm-solution-overview.png)


As métricas são extraídas com um intervalo de extração de um minuto. Os dashboards mostram métricas agregadas a um minuto, cinco minutos ou mais, com base na métrica específica.

Para obter uma lista das métricas rastreadas por essa solução, consulte [Lista de métricas monitoradas](#solution-jvm-metrics).

## Custos
<a name="solution-jvm-costs"></a>

Essa solução cria e usa recursos no seu espaço de trabalho. Você será cobrado pelo uso padrão dos recursos criados, incluindo:
+ Acesso dos usuários ao espaço de trabalho do Amazon Managed Grafana. Para obter mais informações sobre preços, consulte [Preço do Amazon Managed Grafana](https://aws.amazon.com/grafana/pricing/).
+ Ingestão e armazenamento de métricas do Amazon Managed Service for Prometheus e análise de métricas (processamento de exemplos de consultas). O número de métricas usadas por essa solução depende da configuração e do uso da aplicação.

  Você pode visualizar as métricas de ingestão e armazenamento no Amazon Managed Service for Prometheus CloudWatch usando Para obter mais informações, consulte as [CloudWatchmétricas](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-CW-usage-metrics.html) no Guia do usuário do *Amazon Managed Service for* Prometheus.

  Você pode estimar o custo usando a Calculadora de Preços na página de [preços do Amazon Managed Service for Prometheus](https://aws.amazon.com/prometheus/pricing/). A quantidade de métricas dependerá do número de nós no cluster e das métricas que as aplicações produzem.
+ Custos de rede. Você pode incorrer em cobranças AWS de rede padrão para tráfego entre zonas de disponibilidade, regiões ou outros tipos de tráfego.

As calculadoras de preços, disponíveis na página de preços de cada produto, podem ajudar a entender os possíveis custos de sua solução. As informações a seguir podem ajudar a obter um custo básico para a solução em execução na mesma zona de disponibilidade do cluster do Amazon EKS.


| Produto | Métrica da calculadora | Valor | 
| --- | --- | --- | 
| Amazon Managed Service for Prometheus | Série ativa | 50 (por pod de aplicação) | 
|  | Intervalo médio da coleta | 60 (segundos) | 
| Amazon Managed Grafana | Número de editores e administradores ativos | 1 (ou mais, com base em seus usuários) | 

Esses números são os números base para uma aplicação JVM em execução no Amazon EKS. Isso fornecerá uma estimativa dos custos básicos. Conforme você adiciona pods a sua aplicação, os custos aumentam, conforme mostrado. Esses custos excluem os custos de uso da rede, que variam com base no fato de o espaço de trabalho Amazon Managed Grafana, o espaço de trabalho do Amazon Managed Service for Prometheus e o cluster Amazon EKS estarem na mesma zona de disponibilidade e VPN. Região da AWS

## Pré-requisitos
<a name="solution-jvm-prerequisites"></a>

Essa solução exige que você tenha realizado as ações a seguir antes de usá-la.

1. Você deve ter ou **criar um cluster do Amazon Elastic Kubernetes Service** que deseja monitorar, e o cluster deve ter pelo menos um nó. O cluster deve ter o acesso ao endpoint do servidor de API definido para incluir acesso privado (ele também pode permitir acesso público).

   O [modo de autenticação](https://docs.aws.amazon.com/eks/latest/userguide/grant-k8s-access.html#set-cam) deve incluir acesso à API (pode ser definido como `API` ou `API_AND_CONFIG_MAP`). Isso permite que a implantação da solução use entradas de acesso.

   O seguinte deve ser instalado no cluster (verdadeiro por padrão ao criar o cluster por meio do console, mas deve ser adicionado se você criar o cluster usando a AWS API ou AWS CLI): Amazon EKS Pod Identity Agent, AWS CNI, CoreDNS, Kube-proxy e Amazon EBS CSI Driver AddOns (o driver CSI do Amazon EBS não é tecnicamente necessário para a solução, mas é necessário para alguns aplicativos AddOn JVM).

   *Salve o nome do cluster para especificar posteriormente*. Isso pode ser encontrado nos detalhes do cluster no console do Amazon EKS.
**nota**  
Para obter detalhes sobre como criar um cluster do Amazon EKS, consulte [Conceitos básicos do Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html).

1. Você deve estar executando uma aplicação em Máquinas virtuais Java no seu cluster Amazon EKS.

1. Você deve **criar um espaço de trabalho do Amazon Managed Service for Prometheus** no mesmo espaço de trabalho do seu cluster Amazon Conta da AWS EKS. Para obter detalhes, consulte [Create a workspace](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-create-workspace.html) no *Guia do usuário do Amazon Managed Service for Prometheus*.

   *Salve o ARN do espaço de trabalho do Amazon Managed Service for Prometheus para especificar posteriormente.*

1. Você deve **criar um espaço de trabalho Amazon Managed Grafana com** o Grafana versão 9 ou mais recente, da mesma Região da AWS forma que seu cluster Amazon EKS. Para obter detalhes sobre como criar um espaço de trabalho, consulte [Criar um espaço de trabalho do Amazon Managed Grafana](AMG-create-workspace.md).

   A função do espaço de trabalho deve ter permissões para acessar o Amazon Managed Service para Prometheus e Amazon. CloudWatch APIs A maneira mais fácil de fazer isso é usar [as permissões gerenciadas pelo serviço](AMG-manage-permissions.md) e selecionar o Amazon Managed Service para Prometheus e. CloudWatch Você também pode adicionar manualmente [AmazonGrafanaCloudWatchAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonGrafanaCloudWatchAccess)as políticas [AmazonPrometheusQueryAccess](https://docs.aws.amazon.com/prometheus/latest/userguide/security-iam-awsmanpol.html#AmazonPrometheusQueryAccess)e à sua função do IAM do workspace.

   *Salve o ID e o endpoint do espaço de trabalho do Amazon Managed Grafana para especificar posteriormente.* O ID está no formato `g-123example`. O ID e o endpoint podem ser encontrados no console do Amazon Managed Grafana. O endpoint é o URL do espaço de trabalho e inclui o ID. Por exemplo, .`https://g-123example.grafana-workspace.<region>.amazonaws.com/`

**nota**  
Embora não seja estritamente necessário configurar a solução, você deve configurar a autenticação de usuário no espaço de trabalho do Amazon Managed Grafana antes que os usuários possam acessar os dashboards criados. Para obter mais informações, consulte [Autenticar usuários nos espaços de trabalho do Amazon Managed Grafana](authentication-in-AMG.md).

## Usar esta solução
<a name="solution-jvm-use"></a>

Essa solução configura a AWS infraestrutura para suportar relatórios e métricas de monitoramento de um aplicativo Java Virtual Machine (JVM) executado em um cluster Amazon EKS. É possível instalá-la usando [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html):

**nota**  
As etapas aqui pressupõem que você tenha um ambiente com o AWS CLI, e AWS CDK, e o [Node.js e o](https://nodeja.org/) [NPM](https://docs.npmjs.com/) instalados. Você usará `make` e `brew` para simplificar a criação e outras ações comuns.

**Para usar essa solução para monitorar um cluster Amazon EKS com AWS CDK**

1. Certifique-se de ter concluído todas as etapas dos [pré-requisitos](#solution-jvm-prerequisites).

1. Faça download de todos os arquivos da solução do Amazon S3. Os arquivos estão localizados em `s3://aws-observability-solutions/JVM_EKS/OSS/CDK/v1.0.0/iac`, e você pode fazer o download deles com o comando do Amazon S3 a seguir. Execute esse comando em uma pasta no ambiente de linha de comandos.

   ```
   aws s3 sync s3://aws-observability-solutions/JVM_EKS/OSS/CDK/v1.0.0/iac/ .
   ```

   Você não precisa modificar esses arquivos.

1. No ambiente de linha de comandos (na pasta em que você fez o download dos arquivos da solução), execute os comandos a seguir.

   Defina as variáveis de ambiente necessárias. Substitua *REGION**AMG\$1ENDPOINT*,*EKS\$1CLUSTER*, e *AMP\$1ARN* por seu Região da AWS endpoint de espaço de trabalho Amazon Managed Grafana (no formulário)`http://g-123example.grafana-workspace.us-east-1.amazonaws.com`, nome do cluster Amazon EKS e ARN do espaço de trabalho Amazon Managed Service for Prometheus.

   ```
   export AWS_REGION=REGION
   export AMG_ENDPOINT=AMG_ENDPOINT
   export EKS_CLUSTER_NAME=EKS_CLUSTER
   export AMP_WS_ARN=AMP_ARN
   ```

1. Crie anotações que possam ser usadas pela solução. Você pode optar por anotar diretamente um namespace, implantação, statefulset, daemonset ou seus pods. A solução JSM requer duas anotações. Você usará `kubectl` para anotar seus recursos com os seguintes comandos:

   ```
   kubectl annotate <resource-type> <resource-value> instrumentation.opentelemetry.io/inject-java=true
   kubectl annotate <resource-type> <resource-value> cloudwatch.aws.amazon.com/inject-jmx-jvm=true
   ```

   Substitua *<resource-type>* e *<resource-value>* pelos valores corretos para seu sistema. Por exemplo, para anotar sua implantação `foo`, seu primeiro comando seria:

   ```
   kubectl annotate deployment foo instrumentation.opentelemetry.io/inject-java=true
   ```

1. Crie um token de conta de serviço com acesso ADMIN para chamar HTTP da Grafana. APIs Para obter detalhes, consulte [Use contas de serviço para se autenticar com o HTTP da Grafana APIs](service-accounts.md). Você pode usar o AWS CLI com os seguintes comandos para criar o token. Você precisará *GRAFANA\$1ID* substituir o pelo ID do seu espaço de trabalho Grafana (ele estará no formulário). `g-123example` Essa chave vai expirar após 7.200 segundos, ou 2 horas. Você pode alterar a hora (`seconds-to-live`), se necessário. A implantação leva menos de uma hora.

   ```
   # creates a new service account (optional: you can use an existing account)
   GRAFANA_SA_ID=$(aws grafana create-workspace-service-account \
     --workspace-id GRAFANA_ID \
     --grafana-role ADMIN \
     --name grafana-operator-key \
     --query 'id' \
     --output text)
   
   # creates a new token for calling APIs
   export AMG_API_KEY=$(aws grafana create-workspace-service-account-token \
     --workspace-id $managed_grafana_workspace_id \
     --name "grafana-operator-key-$(date +%s)" \
     --seconds-to-live 7200 \
     --service-account-id $GRAFANA_SA_ID \
     --query 'serviceAccountToken.key' \
     --output text)
   ```

   Disponibilize a chave de API para o AWS CDK adicionando-a AWS Systems Manager com o comando a seguir. *AWS\$1REGION*Substitua pela região em que sua solução será executada (no formulário`us-east-1`).

   ```
   aws ssm put-parameter --name "/observability-aws-solution-jvm-eks/grafana-api-key" \
     --type "SecureString" \
     --value $AMG_API_KEY \
     --region AWS_REGION \
     --overwrite
   ```

1. Execute o comando `make` a seguir, que vai instalar todas as outras dependências do projeto.

   ```
   make deps
   ```

1. Por fim, execute o AWS CDK projeto:

   ```
   make build && make pattern aws-observability-solution-jvm-eks-$EKS_CLUSTER_NAME deploy
   ```

1. [Opcional] Depois que a criação da pilha for concluída, você poderá usar o mesmo ambiente para criar mais instâncias da pilha para outras aplicações JVM executadas em clusters do Amazon EKS na mesma região, desde que preencha os outros pré-requisitos de cada um (incluindo espaços de trabalho separados do Amazon Managed Grafana e do Amazon Managed Service for Prometheus). Você precisará redefinir os comandos `export` com os novos parâmetros.

Quando a criação da pilha for concluída, o espaço de trabalho Amazon Managed Grafana será preenchido com um painel mostrando as métricas para suas aplicações e o cluster do Amazon EKS. Levará alguns minutos para que as métricas sejam exibidas, pois elas estão sendo coletadas.

## Lista de métricas monitoradas
<a name="solution-jvm-metrics"></a>

Essa solução coleta métricas de sua aplicação baseado em JVM. Essas métricas são armazenadas no Amazon Managed Service for Prometheus e exibidas nos dashboards do Amazon Managed Grafana.

As métricas a seguir são monitoradas com essa solução.
+ jvm.classes.loaded
+ jvm.gc.collections.count
+ jvm.gc.collections.elapsed
+ jvm.memory.heap.init
+ jvm.memory.heap.max
+ jvm.memory.heap.used
+ jvm.memory.heap.committed
+ jvm.memory.nonheap.init
+ jvm.memory.nonheap.max
+ jvm.memory.nonheap.used
+ jvm.memory.nonheap.committed
+ jvm.memory.pool.init
+ jvm.memory.pool.max
+ jvm.memory.pool.used
+ jvm.memory.pool.committed
+ jvm.threads.count

## Solução de problemas
<a name="solution-jvm-troubleshooting"></a>

Há algumas coisas que podem fazer com que a configuração do projeto falhe. Certifique-se de verificar o seguinte:
+ Você deve concluir todos os [pré-requisitos](#solution-jvm-prerequisites) antes de instalar a solução.
+ O cluster deve ter pelo menos um nó antes de tentar criar a solução ou acessar as métricas.
+ O cluster do Amazon EKS deve ter os complementos `AWS CNI`, `CoreDNS` e `kube-proxy` instalados. Se eles não estiverem instalados, a solução não funcionará corretamente. Eles são instalados por padrão ao criar o cluster por meio do console. Talvez seja necessário instalá-los se o cluster tiver sido criado por meio de um AWS SDK.
+ O tempo limite de instalação dos pods do Amazon EKS expirou. Isso poderá acontecer se não houver capacidade suficiente de nós disponível. Há várias causas para esses problemas, incluindo:
  + O cluster do Amazon EKS foi inicializado com o Fargate em vez do Amazon EC2. Esse projeto requer o Amazon EC2.
  + Os nós estão [corrompidos](https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html) e, portanto, indisponíveis.

    Você pode usar `kubectl describe node NODENAME | grep Taints` para verificar os taints. Em seguida, `kubectl taint node NODENAME TAINT_NAME-` para remover os taints. Certifique-se de incluir `-` após o nome do taint.
  + Os nós atingiram o limite de capacidade. Nesse caso, você pode criar um novo nó ou aumentar a capacidade.
+ Você não vê nenhum dashboard no Grafana: você está usando o ID incorreto do espaço de trabalho do Grafana.

  Execute o seguinte comando para obter informações sobre o Grafana:

  ```
  kubectl describe grafanas external-grafana -n grafana-operator
  ```

  Você pode verificar os resultados do URL correto do espaço de trabalho. Se não for o que você espera, implante novamente com o ID do espaço de trabalho correto.

  ```
  Spec:
    External:
      API Key:
        Key:   GF_SECURITY_ADMIN_APIKEY
        Name:  grafana-admin-credentials
      URL:     https://g-123example.grafana-workspace.aws-region.amazonaws.com
  Status:
    Admin URL:  https://g-123example.grafana-workspace.aws-region.amazonaws.com
    Dashboards:
      ...
  ```
+ Você não vê nenhum dashboard no Grafana: você está usando uma chave de API expirada.

  Para procurar esse caso, você precisará obter o operador do Grafana e verificar se há erros nos logs. Obtenha o nome do operador do Grafana com este comando:

  ```
  kubectl get pods -n grafana-operator
  ```

  Isso retornará o nome do operador, por exemplo:

  ```
  NAME                               READY   STATUS    RESTARTS   AGE
  grafana-operator-1234abcd5678ef90   1/1     Running   0          1h2m
  ```

  Use o nome do operador no seguinte comando:

  ```
  kubectl logs grafana-operator-1234abcd5678ef90 -n grafana-operator
  ```

  Mensagens de erro como as seguintes indicam uma chave de API expirada:

  ```
  ERROR   error reconciling datasource    {"controller": "grafanadatasource", "controllerGroup": "grafana.integreatly.org", "controllerKind": "GrafanaDatasource", "GrafanaDatasource": {"name":"grafanadatasource-sample-amp","namespace":"grafana-operator"}, "namespace": "grafana-operator", "name": "grafanadatasource-sample-amp", "reconcileID": "72cfd60c-a255-44a1-bfbd-88b0cbc4f90c", "datasource": "grafanadatasource-sample-amp", "grafana": "external-grafana", "error": "status: 401, body: {\"message\":\"Expired API key\"}\n"}
  github.com/grafana-operator/grafana-operator/controllers.(*GrafanaDatasourceReconciler).Reconcile
  ```

  Nesse caso, crie uma chave de API e implante a solução novamente. Se o problema persistir, você pode forçar a sincronização usando o seguinte comando antes da nova implantação:

  ```
  kubectl delete externalsecret/external-secrets-sm -n grafana-operator
  ```
+ Falta o parâmetro SSM. Se você encontrar um erro como a seguir, execute `cdk bootstrap` e tente novamente.

  ```
  Deployment failed: Error: aws-observability-solution-jvm-eks-$EKS_CLUSTER_NAME: SSM 
  parameter /cdk-bootstrap/xxxxxxx/version not found. Has the environment been 
  bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/
  guide/bootstrapping.html)
  ```

# Solução para monitorar aplicações Kafka com o Amazon Managed Grafana
<a name="solution-kafka"></a>

As aplicações desenvolvidas com base no [Apache Kafka](https://kafka.apache.org) têm necessidades de monitoramento especiais. Esta página descreve um modelo que fornece uma solução para monitorar aplicações executando em Máquinas virtuais Java no seu cluster Amazon EKS. A solução pode ser instalada usando [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html).

**nota**  
Essa solução não é compatível com o monitoramento de aplicações do Amazon Managed Streaming for Apache Kafka. Para obter mais informações sobre o monitoramento de aplicações do Amazon MSK, consulte [Monitorar um cluster do Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/monitoring.html) no *Amazon Managed Streaming for Apache Kafka Developer Guide*.

Essa solução configura:
+ O espaço de trabalho do Amazon Managed Service for Prometheus armazena métricas do Kafka e da Máquina virtual Java (JVM) do seu cluster do Amazon EKS.
+ Coleta de métricas específicas do Kafka e da JVM usando o CloudWatch agente, bem como um complemento do agente. CloudWatch As métricas são configuradas para serem enviadas para o espaço de trabalho do Amazon Managed Service for Prometheus.
+ Seu espaço de trabalho do Amazon Managed Grafana para extrair essas métricas e criar painéis para ajudar a monitorar o cluster.

**nota**  
Essa solução fornece métricas da JVM e do Kafka para sua aplicação em execução no Amazon EKS, mas não inclui métricas do Amazon EKS. Você pode usar a [solução observabilidade para monitorar o Amazon EKS](solution-eks.md) para ver métricas e alertas do seu cluster Amazon EKS.

## Sobre esta solução
<a name="solution-kafka-about"></a>

Essa solução configura um espaço de trabalho do Amazon Managed Grafana para fornecer métricas para sua aplicação do Apache Kafka. As métricas são usadas para gerar painéis que ajudam você a operar sua aplicação com mais eficiência, fornecendo insights sobre o desempenho e a workload da aplicação do Kafka.

A imagem a seguir mostra um exemplo de um dos painéis criados por essa solução.

![\[Uma imagem mostrando um exemplo de uma pasta de dashboard do Grafana criada usando essa solução.\]](http://docs.aws.amazon.com/pt_br/grafana/latest/userguide/images/kafka-solution-cluster-overview.png)


As métricas são extraídas com um intervalo de extração de um minuto. Os dashboards mostram métricas agregadas a um minuto, cinco minutos ou mais, com base na métrica específica.

Para obter uma lista das métricas rastreadas por essa solução, consulte [Lista de métricas monitoradas](#solution-kafka-metrics).

## Custos
<a name="solution-kafka-costs"></a>

Essa solução cria e usa recursos no seu espaço de trabalho. Você será cobrado pelo uso padrão dos recursos criados, incluindo:
+ Acesso dos usuários ao espaço de trabalho do Amazon Managed Grafana. Para obter mais informações sobre preços, consulte [Preço do Amazon Managed Grafana](https://aws.amazon.com/grafana/pricing/).
+ Ingestão e armazenamento de métricas do Amazon Managed Service for Prometheus e análise de métricas (processamento de exemplos de consultas). O número de métricas usadas por essa solução depende da configuração e do uso da aplicação.

  Você pode visualizar as métricas de ingestão e armazenamento no Amazon Managed Service for Prometheus CloudWatch usando Para obter mais informações, consulte as [CloudWatchmétricas](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-CW-usage-metrics.html) no Guia do usuário do *Amazon Managed Service for* Prometheus.

  Você pode estimar o custo usando a Calculadora de Preços na página de [preços do Amazon Managed Service for Prometheus](https://aws.amazon.com/prometheus/pricing/). A quantidade de métricas dependerá do número de nós no cluster e das métricas que as aplicações produzem.
+ Custos de rede. Você pode incorrer em cobranças AWS de rede padrão para tráfego entre zonas de disponibilidade, regiões ou outros tipos de tráfego.

As calculadoras de preços, disponíveis na página de preços de cada produto, podem ajudar a entender os possíveis custos de sua solução. As informações a seguir podem ajudar a obter um custo básico para a solução em execução na mesma zona de disponibilidade do cluster do Amazon EKS.


| Produto | Métrica da calculadora | Valor | 
| --- | --- | --- | 
| Amazon Managed Service for Prometheus | Série ativa | 95 (por pod do Kafka) | 
|  | Intervalo médio da coleta | 60 (segundos) | 
| Amazon Managed Grafana | Número de editores e administradores ativos | 1 (ou mais, com base em seus usuários) | 

Esses números são os números base para uma solução que executa o Kafka no Amazon EKS. Isso fornecerá uma estimativa dos custos básicos. Conforme você adiciona pods do Kafka a sua aplicação, os custos aumentam, conforme mostrado. Esses custos excluem os custos de uso da rede, que variam com base no fato de o espaço de trabalho Amazon Managed Grafana, o espaço de trabalho do Amazon Managed Service for Prometheus e o cluster Amazon EKS estarem na mesma zona de disponibilidade e VPN. Região da AWS

## Pré-requisitos
<a name="solution-kafka-prerequisites"></a>

Essa solução exige que você tenha realizado as ações a seguir antes de usá-la.

1. Você deve ter ou **criar um cluster do Amazon Elastic Kubernetes Service** que deseja monitorar, e o cluster deve ter pelo menos um nó. O cluster deve ter o acesso ao endpoint do servidor de API definido para incluir acesso privado (ele também pode permitir acesso público).

   O [modo de autenticação](https://docs.aws.amazon.com/eks/latest/userguide/grant-k8s-access.html#set-cam) deve incluir acesso à API (pode ser definido como `API` ou `API_AND_CONFIG_MAP`). Isso permite que a implantação da solução use entradas de acesso.

   O seguinte deve ser instalado no cluster (verdadeiro por padrão ao criar o cluster por meio do console, mas deve ser adicionado se você criar o cluster usando a AWS API ou AWS CLI): Amazon EKS Pod Identity Agent, AWS CNI, CoreDNS, Kube-proxy e Amazon EBS CSI Driver AddOns (o driver CSI do Amazon EBS não é tecnicamente necessário para a solução, mas é necessário para a maioria dos aplicativos Kafka). AddOn 

   *Salve o nome do cluster para especificar posteriormente*. Isso pode ser encontrado nos detalhes do cluster no console do Amazon EKS.
**nota**  
Para obter detalhes sobre como criar um cluster do Amazon EKS, consulte [Conceitos básicos do Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html).

1. Você deve estar executando uma aplicação Apache Kafka em Máquinas virtuais Java no seu cluster Amazon EKS.

1. Você deve **criar um espaço de trabalho do Amazon Managed Service for Prometheus** no mesmo espaço de trabalho do seu cluster Amazon Conta da AWS EKS. Para obter detalhes, consulte [Create a workspace](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-create-workspace.html) no *Guia do usuário do Amazon Managed Service for Prometheus*.

   *Salve o ARN do espaço de trabalho do Amazon Managed Service for Prometheus para especificar posteriormente.*

1. Você deve **criar um espaço de trabalho Amazon Managed Grafana com** o Grafana versão 9 ou mais recente, da mesma Região da AWS forma que seu cluster Amazon EKS. Para obter detalhes sobre como criar um espaço de trabalho, consulte [Criar um espaço de trabalho do Amazon Managed Grafana](AMG-create-workspace.md).

   A função do espaço de trabalho deve ter permissões para acessar o Amazon Managed Service para Prometheus e Amazon. CloudWatch APIs A maneira mais fácil de fazer isso é usar [as permissões gerenciadas pelo serviço](AMG-manage-permissions.md) e selecionar o Amazon Managed Service para Prometheus e. CloudWatch Você também pode adicionar manualmente [AmazonGrafanaCloudWatchAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonGrafanaCloudWatchAccess)as políticas [AmazonPrometheusQueryAccess](https://docs.aws.amazon.com/prometheus/latest/userguide/security-iam-awsmanpol.html#AmazonPrometheusQueryAccess)e à sua função do IAM do workspace.

   *Salve o ID e o endpoint do espaço de trabalho do Amazon Managed Grafana para especificar posteriormente.* O ID está no formato `g-123example`. O ID e o endpoint podem ser encontrados no console do Amazon Managed Grafana. O endpoint é o URL do espaço de trabalho e inclui o ID. Por exemplo, .`https://g-123example.grafana-workspace.<region>.amazonaws.com/`

**nota**  
Embora não seja estritamente necessário configurar a solução, você deve configurar a autenticação de usuário no espaço de trabalho do Amazon Managed Grafana antes que os usuários possam acessar os dashboards criados. Para obter mais informações, consulte [Autenticar usuários nos espaços de trabalho do Amazon Managed Grafana](authentication-in-AMG.md).

## Usar esta solução
<a name="solution-kafka-use"></a>

Essa solução configura a AWS infraestrutura para oferecer suporte a relatórios e métricas de monitoramento de um aplicativo Kafka executado em um cluster Amazon EKS. É possível instalá-la usando [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html):

**nota**  
As etapas aqui pressupõem que você tenha um ambiente com o AWS CLI, e AWS CDK, e o [Node.js e o](https://nodejs.org/) [NPM](https://docs.npmjs.com/) instalados. Você usará `make` e `brew` para simplificar a criação e outras ações comuns.

**Para usar essa solução para monitorar um cluster Amazon EKS com AWS CDK**

1. Certifique-se de ter concluído todas as etapas dos [pré-requisitos](#solution-kafka-prerequisites).

1. Faça download de todos os arquivos da solução do Amazon S3. Os arquivos estão localizados em `s3://aws-observability-solutions/Kafka_EKS/OSS/CDK/v1.0.0/iac`, e você pode fazer o download deles com o comando do Amazon S3 a seguir. Execute esse comando em uma pasta no ambiente de linha de comandos.

   ```
   aws s3 sync s3://aws-observability-solutions/Kafka_EKS/OSS/CDK/v1.0.0/iac/ .
   ```

   Você não precisa modificar esses arquivos.

1. No ambiente de linha de comandos (na pasta em que você fez o download dos arquivos da solução), execute os comandos a seguir.

   Defina as variáveis de ambiente necessárias. Substitua *REGION**AMG\$1ENDPOINT*,*EKS\$1CLUSTER*, e *AMP\$1ARN* por seu Região da AWS endpoint de espaço de trabalho Amazon Managed Grafana (no formulário)`http://g-123example.grafana-workspace.us-east-1.amazonaws.com`, nome do cluster Amazon EKS e ARN do espaço de trabalho Amazon Managed Service for Prometheus.

   ```
   export AWS_REGION=REGION
   export AMG_ENDPOINT=AMG_ENDPOINT
   export EKS_CLUSTER_NAME=EKS_CLUSTER
   export AMP_WS_ARN=AMP_ARN
   ```

1. Você deve criar anotações que possam ser usadas pela implantação. Você pode optar por anotar diretamente um namespace, implantação, statefulset, daemonset ou seus pods. A solução do Kafka requer cinco anotações. Você usará `kubectl` para anotar seus recursos com os seguintes comandos:

   ```
   kubectl annotate <resource-type> <resource-value> instrumentation.opentelemetry.io/inject-java=true
   kubectl annotate <resource-type> <resource-value> cloudwatch.aws.amazon.com/inject-jmx-jvm=true
   kubectl annotate <resource-type> <resource-value> cloudwatch.aws.amazon.com/inject-jmx-kafka=true
   kubectl annotate <resource-type> <resource-value> cloudwatch.aws.amazon.com/inject-jmx-kafka-producer=true
   kubectl annotate <resource-type> <resource-value> cloudwatch.aws.amazon.com/inject-jmx-kafka-consumer=true
   ```

   Substitua *<resource-type>* e *<resource-value>* pelos valores corretos para seu sistema. Por exemplo, para anotar sua implantação `foo`, seu primeiro comando seria:

   ```
   kubectl annotate deployment foo instrumentation.opentelemetry.io/inject-java=true
   ```

1. Crie um token de conta de serviço com acesso ADMIN para chamar HTTP da Grafana. APIs Para obter detalhes, consulte [Use contas de serviço para se autenticar com o HTTP da Grafana APIs](service-accounts.md). Você pode usar o AWS CLI com os seguintes comandos para criar o token. Você precisará *GRAFANA\$1ID* substituir o pelo ID do seu espaço de trabalho Grafana (ele estará no formulário). `g-123example` Essa chave vai expirar após 7.200 segundos, ou 2 horas. Você pode alterar a hora (`seconds-to-live`), se necessário. A implantação leva menos de uma hora.

   ```
   # creates a new service account (optional: you can use an existing account)
   GRAFANA_SA_ID=$(aws grafana create-workspace-service-account \
     --workspace-id GRAFANA_ID \
     --grafana-role ADMIN \
     --name grafana-operator-key \
     --query 'id' \
     --output text)
   
   # creates a new token for calling APIs
   export AMG_API_KEY=$(aws grafana create-workspace-service-account-token \
     --workspace-id $managed_grafana_workspace_id \
     --name "grafana-operator-key-$(date +%s)" \
     --seconds-to-live 7200 \
     --service-account-id $GRAFANA_SA_ID \
     --query 'serviceAccountToken.key' \
     --output text)
   ```

   Disponibilize a chave de API para o AWS CDK adicionando-a AWS Systems Manager com o comando a seguir. *AWS\$1REGION*Substitua pela região em que sua solução será executada (no formulário`us-east-1`).

   ```
   aws ssm put-parameter --name "/observability-aws-solution-kafka-eks/grafana-api-key" \
     --type "SecureString" \
     --value $AMG_API_KEY \
     --region AWS_REGION \
     --overwrite
   ```

1. Execute o comando `make` a seguir, que vai instalar todas as outras dependências do projeto.

   ```
   make deps
   ```

1. Por fim, execute o AWS CDK projeto:

   ```
   make build && make pattern aws-observability-solution-kafka-eks-$EKS_CLUSTER_NAME deploy
   ```

1. [Opcional] Depois que a criação da pilha for concluída, você poderá usar o mesmo ambiente para criar mais instâncias da pilha para outras aplicações do Kafka executadas em clusters do Amazon EKS na mesma região, desde que preencha os outros pré-requisitos de cada um (incluindo espaços de trabalho separados do Amazon Managed Grafana e do Amazon Managed Service for Prometheus). Você precisará redefinir os comandos `export` com os novos parâmetros.

Quando a criação da pilha for concluída, o espaço de trabalho Amazon Managed Grafana será preenchido com um painel mostrando as métricas para suas aplicações e o cluster do Amazon EKS. Levará alguns minutos para que as métricas sejam exibidas, pois elas estão sendo coletadas.

## Lista de métricas monitoradas
<a name="solution-kafka-metrics"></a>

Essa solução coleta métricas de sua aplicação baseado em JVM do Kafka. Essas métricas são armazenadas no Amazon Managed Service for Prometheus e exibidas nos dashboards do Amazon Managed Grafana.

As métricas a seguir são monitoradas com essa solução.
+ jvm.classes.loaded
+ jvm.gc.collections.count
+ jvm.gc.collections.elapsed
+ jvm.memory.heap.init
+ jvm.memory.heap.max
+ jvm.memory.heap.used
+ jvm.memory.heap.committed
+ jvm.memory.nonheap.init
+ jvm.memory.nonheap.max
+ jvm.memory.nonheap.used
+ jvm.memory.nonheap.committed
+ jvm.memory.pool.init
+ jvm.memory.pool.max
+ jvm.memory.pool.used
+ jvm.memory.pool.committed
+ jvm.threads.count
+ kafka.message.count
+ kafka.request.count
+ kafka.request.failed
+ kafka.request.time.total
+ kafka.request.time.50p
+ kafka.request.time.99p
+ kafka.request.time.avg
+ kafka.network.io
+ kafka.purgatory.size
+ kafka.partition.count
+ kafka.partition.offline
+ kafka.partition.under\$1replicated
+ kafka.isr.operation.count
+ kafka.max.lag
+ kafka.controller.active.count
+ kafka.leader.election.rate
+ kafka.unclean.election.rate
+ kafka.request.queue
+ kafka.logs.flush.time.count
+ kafka.logs.flush.time.median
+ kafka.logs.flush.time.99p
+ kafka.consumer.fetch-rate
+ kafka.consumer. records-lag-max
+ kafka.consumer.total. bytes-consumed-rate
+ kafka.consumer.total. fetch-size-avg
+ kafka.consumer.total. records-consumed-rate
+ kafka.consumer. bytes-consumed-rate
+ kafka.consumer. fetch-size-avg
+ kafka.consumer. records-consumed-rate
+ kafka.productor. io-wait-time-ns-média
+ kafka.productor. outgoing-byte-rate
+ kafka.productor. request-latency-avg
+ kafka.producer.request-rate
+ kafka.producer.response-rate
+ kafka.producer.byte-rate
+ kafka.producer.compression-rate
+ kafka.productor. record-error-rate
+ kafka.productor. record-retry-rate
+ kafka.productor. record-send-rate

## Solução de problemas
<a name="solution-kafka-troubleshooting"></a>

Há algumas coisas que podem fazer com que a configuração do projeto falhe. Certifique-se de verificar o seguinte:
+ Você deve concluir todos os [pré-requisitos](#solution-kafka-prerequisites) antes de instalar a solução.
+ O cluster deve ter pelo menos um nó antes de tentar criar a solução ou acessar as métricas.
+ O cluster do Amazon EKS deve ter os complementos `AWS CNI`, `CoreDNS` e `kube-proxy` instalados. Se eles não estiverem instalados, a solução não funcionará corretamente. Eles são instalados por padrão ao criar o cluster por meio do console. Talvez seja necessário instalá-los se o cluster tiver sido criado por meio de um AWS SDK.
+ O tempo limite de instalação dos pods do Amazon EKS expirou. Isso poderá acontecer se não houver capacidade suficiente de nós disponível. Há várias causas para esses problemas, incluindo:
  + O cluster do Amazon EKS foi inicializado com o Fargate em vez do Amazon EC2. Esse projeto requer o Amazon EC2.
  + Os nós estão [corrompidos](https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html) e, portanto, indisponíveis.

    Você pode usar `kubectl describe node NODENAME | grep Taints` para verificar os taints. Em seguida, `kubectl taint node NODENAME TAINT_NAME-` para remover os taints. Certifique-se de incluir `-` após o nome do taint.
  + Os nós atingiram o limite de capacidade. Nesse caso, você pode criar um novo nó ou aumentar a capacidade.
+ Você não vê nenhum dashboard no Grafana: você está usando o ID incorreto do espaço de trabalho do Grafana.

  Execute o seguinte comando para obter informações sobre o Grafana:

  ```
  kubectl describe grafanas external-grafana -n grafana-operator
  ```

  Você pode verificar os resultados do URL correto do espaço de trabalho. Se não for o que você espera, implante novamente com o ID do espaço de trabalho correto.

  ```
  Spec:
    External:
      API Key:
        Key:   GF_SECURITY_ADMIN_APIKEY
        Name:  grafana-admin-credentials
      URL:     https://g-123example.grafana-workspace.aws-region.amazonaws.com
  Status:
    Admin URL:  https://g-123example.grafana-workspace.aws-region.amazonaws.com
    Dashboards:
      ...
  ```
+ Você não vê nenhum dashboard no Grafana: você está usando uma chave de API expirada.

  Para procurar esse caso, você precisará obter o operador do Grafana e verificar se há erros nos logs. Obtenha o nome do operador do Grafana com este comando:

  ```
  kubectl get pods -n grafana-operator
  ```

  Isso retornará o nome do operador, por exemplo:

  ```
  NAME                               READY   STATUS    RESTARTS   AGE
  grafana-operator-1234abcd5678ef90   1/1     Running   0          1h2m
  ```

  Use o nome do operador no seguinte comando:

  ```
  kubectl logs grafana-operator-1234abcd5678ef90 -n grafana-operator
  ```

  Mensagens de erro como as seguintes indicam uma chave de API expirada:

  ```
  ERROR   error reconciling datasource    {"controller": "grafanadatasource", "controllerGroup": "grafana.integreatly.org", "controllerKind": "GrafanaDatasource", "GrafanaDatasource": {"name":"grafanadatasource-sample-amp","namespace":"grafana-operator"}, "namespace": "grafana-operator", "name": "grafanadatasource-sample-amp", "reconcileID": "72cfd60c-a255-44a1-bfbd-88b0cbc4f90c", "datasource": "grafanadatasource-sample-amp", "grafana": "external-grafana", "error": "status: 401, body: {\"message\":\"Expired API key\"}\n"}
  github.com/grafana-operator/grafana-operator/controllers.(*GrafanaDatasourceReconciler).Reconcile
  ```

  Nesse caso, crie uma chave de API e implante a solução novamente. Se o problema persistir, você pode forçar a sincronização usando o seguinte comando antes da nova implantação:

  ```
  kubectl delete externalsecret/external-secrets-sm -n grafana-operator
  ```
+ Falta o parâmetro SSM. Se você encontrar um erro como a seguir, execute `cdk bootstrap` e tente novamente.

  ```
  Deployment failed: Error: aws-observability-solution-kafka-eks-$EKS_CLUSTER_NAME: SSM 
  parameter /cdk-bootstrap/xxxxxxx/version not found. Has the environment been 
  bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/
  guide/bootstrapping.html)
  ```