Extrair outras fontes do Prometheus e importar essas métricas
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>
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
O atendente do CloudWatch oferece suporte às configurações de extração padrão do Prometheus, conforme documentado em <scrape_config>
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
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 ter mais informações, consulte Incorporação de métricas em logs.
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 stream de log 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.
Configuração do atendente do CloudWatch para o Prometheus
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 ou30s
uma vez a cada 30 segundos. Os sufixos de unidade válidos são:ns
,us
,ms
,s
,m
eh
.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 acontainerPort
para as métricas do Prometheus. Separar múltiplascontainerPorts
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 emsource_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 paralabel_matcher
. -
source_labels
especifica o valor dos rótulos verificados pela linhalabel_matcher
. -
label_separator
especifica o separador a ser usado na linhalabel_matcher
se váriossource_labels
forem especificados. O padrão é;
. É possível ver esse padrão usado na linhalabel_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émnode-exporter
oukube-dns
. -
O valor de
Namespace
ékube-system
. -
A métrica do Prometheus
coredns_dns_request_type_count_total
contém rótulosNamespace
eService
.
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", ... }