

# Extrair outras fontes do Prometheus e importar essas métricas
<a name="ContainerInsights-Prometheus-Setup-configure-ECS"></a>

O atendente do CloudWatch com monitoramento Prometheus precisa de duas configurações para extrair as métricas do Prometheus. Uma serve para as configurações padrão do Prometheus, conforme documentado em [<scrape\_config>](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config) na documentação do Prometheus. A outra é para a configuração do atendente do CloudWatch.

Para clusters do Amazon ECS, as configurações são integradas ao Parameter Store do AWS Systems Manager pelos segredos na definição da tarefa do Amazon ECS:
+ O segredo `PROMETHEUS_CONFIG_CONTENT` é para a configuração de extração do Prometheus.
+ O segredo `CW_CONFIG_CONTENT` é para a configuração do atendente do CloudWatch. 

Para extrair outras origens de métricas do Prometheus e importar essas métricas para o CloudWatch, modifique a configuração de extração do Prometheus e a configuração do atendente do CloudWatch e implante novamente o atendente com a configuração atualizada.

**Requisitos para grupo de segurança de VPC**

As regras de entrada dos grupos de segurança para as workloads do Prometheus devem abrir as portas do Prometheus para o atendente do CloudWatch para extrair as métricas Prometheus pelo IP privado.

As regras de saída do grupo de segurança do atendente do CloudWatch devem permitir que o atendente do CloudWatch se conecte à porta das workloads do Prometheus por IP privado. 

## Configuração de extração do Prometheus
<a name="ContainerInsights-Prometheus-Setup-config-global"></a>

O atendente do CloudWatch oferece suporte às configurações de extração padrão do Prometheus, conforme documentado em [ <scrape\_config>](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config) na documentação do Prometheus. É possível editar essa seção para atualizar as configurações que já estão nesse arquivo e adicionar outros destinos de extração do Prometheus. Por padrão, um exemplo de arquivo de configuração contém as seguintes linhas de configuração global:

```
global:
  scrape_interval: 1m
  scrape_timeout: 10s
```
+ **scrape\_interval**: define a frequência da adição de destinos de extração de conteúdo.
+ **scrape\_timeout**: define quanto tempo aguardar até a expiração de uma solicitação de extração de conteúdo.

Também é possível definir valores diferentes para essas configurações no nível do trabalho, a fim de substituir as configurações globais.

### Trabalhos de extração do Prometheus
<a name="ContainerInsights-Prometheus-Setup-config-scrape"></a>

Os arquivos YAML do atendente do CloudWatch já têm alguns trabalhos padrão de extração configurados. Por exemplo, nos arquivos YAML para o Amazon ECS, como `cwagent-ecs-prometheus-metric-for-bridge-host.yaml`, os trabalhos de extração padrão são configurados na seção `ecs_service_discovery`.

```
"ecs_service_discovery": {
                  "sd_frequency": "1m",
                  "sd_result_file": "/tmp/cwagent_ecs_auto_sd.yaml",
                  "docker_label": {
                  },
                  "task_definition_list": [
                    {
                      "sd_job_name": "ecs-appmesh-colors",
                      "sd_metrics_ports": "9901",
                      "sd_task_definition_arn_pattern": ".*:task-definition\/.*-ColorTeller-(white):[0-9]+",
                      "sd_metrics_path": "/stats/prometheus"
                    },
                    {
                      "sd_job_name": "ecs-appmesh-gateway",
                      "sd_metrics_ports": "9901",
                      "sd_task_definition_arn_pattern": ".*:task-definition/.*-ColorGateway:[0-9]+",
                      "sd_metrics_path": "/stats/prometheus"
                    }
                  ]
                }
```

Cada um desses destinos padrão é extraído e as métricas são enviadas ao CloudWatch em eventos de log usando o formato de métricas incorporado. Para obter mais informações, consulte [Incorporação de métricas em logs](CloudWatch_Embedded_Metric_Format.md).

Os eventos de log dos clusters do Amazon ECS são armazenados no grupo de logs **/aws/ecs/containerinsights/{{cluster\_name}}/prometheus**.

Cada trabalho de extração está contido em um fluxo de logs diferente nesse grupo de logs.

Para adicionar um novo destino de extração, adicione uma nova entrada à seção `task_definition_list` na seção `ecs_service_discovery` do arquivo YAML e reinicie o atendente. Para obter um exemplo desse processo, consulte [Tutorial para adicionar um novo destino de extração do Prometheus: métricas do servidor de API do Prometheus](ContainerInsights-Prometheus-Setup-configure.md#ContainerInsights-Prometheus-Setup-new-exporters).

## Configuração do atendente do CloudWatch para o Prometheus
<a name="ContainerInsights-Prometheus-Setup-cw-agent-config"></a>

O arquivo de configuração do atendente do CloudWatch tem uma seção `prometheus` na seção `metrics_collected` para a configuração de extração do Prometheus. Contém as seguintes opções de configuração:
+ **cluster\_name**: especifica o nome do cluster a ser adicionado como um rótulo no evento de log. Esse campo é opcional. Se você omitir, o atendente poderá detectar o nome do cluster do Amazon ECS.
+ **log\_group\_name**: especifica o nome do grupo de log para as métricas do Prometheus extraídas. Esse campo é opcional. Se você omitir, o CloudWatch usará **/aws/ecs/containerinsights/{{cluster\_name}}/prometheus** para logs de clusters do Amazon ECS.
+ **prometheus\_config\_path**: especifica o caminho do arquivo de configuração de extração do Prometheus. Se o valor desse campo começar com `env:`, o conteúdo do arquivo de configuração de extração do Prometheus será recuperado da variável de ambiente do contêiner. Não altere esse campo.
+ **ecs\_service\_discovery**: é a seção para especificar as configurações das funções de detecção automática de destino do Amazon ECS Prometheus. Dois modos são compatíveis para detectar os destinos do Prometheus: detecção baseada no rótulo do docker do contêiner ou detecção baseada na expressão regular do ARN da definição de tarefa do Amazon ECS. Você pode usar os dois modos junto, e o atendente do CloudWatch eliminará a duplicação dos destinos detectados com base em: *{private\_ip}:{port}/{metrics\_path}*.

  A seção `ecs_service_discovery` pode conter os seguintes campos:
  + `sd_frequency` é a frequência para detectar os exportadores Prometheus. Especifique um número e um sufixo de unidade. Por exemplo, `1m` uma vez por minuto ou `30s` uma vez a cada 30 segundos. Os sufixos de unidade válidos são: `ns`, `us`, `ms`, `s`, `m` e `h`.

    Esse campo é opcional. O padrão é 60 segundos (1 minuto).
  + `sd_target_cluster` é o nome do cluster do Amazon ECS de destino para detecção automática. Esse campo é opcional. O padrão é o nome do cluster do Amazon ECS em que o atendente do CloudWatch está instalado. 
  + `sd_cluster_region` é a região do cluster do Amazon ECS de destino. Esse campo é opcional. O padrão é a região do cluster do Amazon ECS em que o atendente do CloudWatch está instalado.
  + `sd_result_file` é o caminho do arquivo YAML para os resultados de destino do Prometheus. A configuração de extração do Prometheus referenciará esse arquivo.
  + `docker_label` é uma seção opcional que você pode usar para especificar a configuração para detecção de serviço baseada em rótulos do docker. Se você omitir essa seção, a detecção baseada em rótulos do docker não será usada. A seção pode conter os seguintes campos:
    + `sd_port_label` é o nome do rótulo do docker do contêiner que especifica a porta do contêiner para métricas do Prometheus. O valor padrão é `ECS_PROMETHEUS_EXPORTER_PORT`. Se o contêiner não tiver esse rótulo do docker, o atendente do CloudWatch o ignorará.
    + `sd_metrics_path_label` é o nome do rótulo do docker do contêiner que especifica o caminho das métricas do Prometheus. O valor padrão é `ECS_PROMETHEUS_METRICS_PATH`. Se o contêiner não tiver esse rótulo do docker, o agente assumirá o caminho padrão `/metrics`.
    + `sd_job_name_label` é o nome do rótulo do docker do contêiner que especifica o nome do trabalho de extração do Prometheus. O valor padrão é `job`. Se o contêiner não tiver esse rótulo do docker, o atendente do CloudWatch usará o nome do trabalho na configuração de extração do Prometheus.
  + `task_definition_list` é uma seção opcional que você pode usar para especificar a configuração para detectção de serviço baseada em definição de tarefa. Se você omitir essa seção, a detecção baseada em definição de tarefa não será usada. A seção pode conter os seguintes campos:
    + `sd_task_definition_arn_pattern` é o padrão a ser usado para especificar as definições de tarefa do Amazon ECS a serem detectadas. Essa é uma expressão regular.
    + `sd_metrics_ports` lista a containerPort para as métricas do Prometheus. Separe as containerPorts com ponto e vírgula.
    + `sd_container_name_pattern` especifica os nomes de contêiner de tarefas do Amazon ECS. Essa é uma expressão regular.
    + `sd_metrics_path` especifica o caminho da métrica do Prometheus. Se você omitir isso, o atendente assumirá o caminho padrão `/metrics`
    + `sd_job_name` especifica o nome do trabalho de extração do Prometheus. Se você omitir esse campo, o atendente do CloudWatch usará o nome do trabalho na configuração de extração do Prometheus.
  + `service_name_list_for_tasks` é uma seção opcional que você pode usar para especificar a configuração para detecção de serviço baseada em definição de tarefa. Ao omitir esta seção, a detecção baseada em nome de serviço não será utilizada. A seção pode conter os seguintes campos:
    + `sd_service_name_pattern` é o padrão a ser usado para especificar o serviço do Amazon ECS em que as tarefas serão detectadas. Essa é uma expressão regular.
    + `sd_metrics_ports` lista a `containerPort` para as métricas do Prometheus. Separar múltiplas `containerPorts` com ponto e vírgula.
    + `sd_container_name_pattern` especifica os nomes de contêiner de tarefas do Amazon ECS. Essa é uma expressão regular.
    + `sd_metrics_path` especifica o caminho das métricas do Prometheus. Se você omitir isso, o atendente entenderá que o caminho padrão é `/metrics`.
    + `sd_job_name` especifica o nome do trabalho de extração do Prometheus. Se você omitir esse campo, o atendente do CloudWatch usará o nome do trabalho na configuração de extração do Prometheus. 
+ **metric\_declaration**: são seções que especificam a matriz de logs com formato de métrica incorporado a ser gerada. Há seções `metric_declaration` para cada destino do Prometheus do qual o atendente do CloudWatch importa por padrão. Essas seções incluem os seguintes campos:
  + `label_matcher` é uma expressão regular que confere o valor dos rótulos listados em `source_labels`. As métricas correspondentes são disponibilizadas para inclusão no formato de métrica incorporado enviado ao CloudWatch. 

    Se você tiver vários rótulos especificados em `source_labels`, recomendamos não utilizar os caracteres `^` ou `$` na expressão regular para `label_matcher`.
  + `source_labels` especifica o valor dos rótulos verificados pela linha `label_matcher`.
  + `label_separator` especifica o separador a ser usado na linha ` label_matcher` se vários `source_labels` forem especificados. O padrão é `;`. É possível ver esse padrão usado na linha `label_matcher` no exemplo a seguir.
  + `metric_selectors` é uma expressão regular que especifica as métricas a serem coletadas e enviadas ao CloudWatch.
  + `dimensions` é a lista de rótulos a serem usados como dimensões do CloudWatch para cada métrica selecionada.

Veja o exemplo de `metric_declaration` a seguir.

```
"metric_declaration": [
  {
     "source_labels":[ "Service", "Namespace"],
     "label_matcher":"(.*node-exporter.*|.*kube-dns.*);kube-system$",
     "dimensions":[
        ["Service", "Namespace"]
     ],
     "metric_selectors":[
        "^coredns_dns_request_type_count_total$"
     ]
  }
]
```

Esse exemplo configura uma seção de formato de métrica incorporada a ser enviada como um evento de log se as seguintes condições forem atendidas:
+ O valor de `Service` contém `node-exporter` ou `kube-dns`.
+ O valor de `Namespace` é `kube-system`.
+ A métrica do Prometheus `coredns_dns_request_type_count_total` contém rótulos `Service` e `Namespace`.

O evento de log enviado inclui a seguinte seção destacada:

```
{
   "CloudWatchMetrics":[
      {
         "Metrics":[
            {
               "Name":"coredns_dns_request_type_count_total"
            }
         ],
         "Dimensions":[
            [
               "Namespace",
               "Service"
            ]
         ],
         "Namespace":"ContainerInsights/Prometheus"
      }
   ],
   "Namespace":"kube-system",
   "Service":"kube-dns",
   "coredns_dns_request_type_count_total":2562,
   "eks_amazonaws_com_component":"kube-dns",
   "instance":"192.168.61.254:9153",
   "job":"kubernetes-service-endpoints",
   ...
}
```