Paspado de fuentes adicionales de Prometheus e importación de esas métricas
El agente CloudWatch con supervisión de Prometheus necesita dos configuraciones para raspar las métricas de Prometheus. Una de ellas es para las configuraciones estándar de Prometheus que como se documenta en <scrape_config>
Para los clústeres de Amazon ECS, las configuraciones se integran con Parameter Store de AWS Systems Manager según los secretos de la definición de tareas de Amazon ECS:
-
El secreto
PROMETHEUS_CONFIG_CONTENT
es para la configuración de raspado de Prometheus. -
El secreto
CW_CONFIG_CONTENT
es para la configuración del agente de CloudWatch.
Para raspar las fuentes adicionales de las métricas de Prometheus e importarlas a CloudWatch, debe modificar tanto la configuración de raspado de Prometheus como la configuración del agente de CloudWatch y, a continuación, debe volver a implementar el agente con la configuración actualizada.
Requisitos del grupo de seguridad de la VPC
Las reglas de entrada de los grupos de seguridad para las cargas de trabajo de Prometheus deben abrir los puertos de Prometheus al agente de CloudWatch para raspar las métricas de Prometheus por la IP privada.
Las reglas de salida del grupo de seguridad para el agente de CloudWatch deben permitir que el agente de CloudWatch se conecte al puerto de cargas de trabajo de Prometheus mediante la IP privada.
Configuración de raspado de Prometheus
El agente de CloudWatch es compatible con la configuración de raspado estándar de Prometheus como se describe en <scrape_config>
global: scrape_interval: 1m scrape_timeout: 10s
-
scrape_interval: define la frecuencia con la que se deben raspar los destinos.
-
scrape_timeout: define cuánto tiempo debe esperar antes de que se agote el tiempo de espera de una petición de raspado.
También puede definir valores diferentes para estos parámetros en el nivel de trabajo, para anular las configuraciones globales.
Trabajos de raspado de Prometheus
Los archivos YAML del agente de CloudWatch ya tienen algunos trabajos de raspado configurados de forma predeterminada. Por ejemplo, en los archivos YAML para Amazon ECS, como cwagent-ecs-prometheus-metric-for-bridge-host.yaml
, los trabajos de raspado predeterminados se configuran en la sección 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 uno de estos destinos predeterminados se raspan y las métricas se envían a CloudWatch en eventos de registro mediante un formato de métrica integrada. Para obtener más información, consulte Incrustar métricas en los registros.
Los eventos de registro de los clústeres de Amazon ECS se almacenan en el grupo de registros /aws/ecs/containerinsights/cluster_name
/prometheus.
Cada trabajo de extracción está contenido en un flujo de registros diferente en este grupo de registros.
Para agregar un nuevo destino de raspado, se debe agregar una entrada nueva en la sección task_definition_list
en la sección ecs_service_discovery
del archivo YAML y reiniciar el agente. Para obtener un ejemplo de este proceso, consulte Tutorial para agregar un destino de raspado nuevo de Prometheus: métricas del servidor de la API de Prometheus.
Configuración del agente de CloudWatch para Prometheus
El archivo de configuración del agente de CloudWatch cuenta con una sección prometheus
en metrics_collected
para la configuración de raspado de Prometheus. Incluye las siguientes opciones de configuración:
-
nombre_clúster: especifica el nombre del clúster que se va a agregar como etiqueta en el evento de registro. Este campo es opcional. Si lo omite, el agente puede detectar el nombre del clúster de Amazon ECS.
-
log_group_name: especifica el nombre del grupo de registros para las métricas de Prometheus raspadas. Este campo es opcional. Si lo omite, CloudWatch usa /aws/ecs/containerinsights/
cluster_name
/prometheus para los registros de clústeres de Amazon ECS. -
prometheus_config_path: especifica la ruta del archivo de configuración de raspado de Prometheus. Si el valor de este campo comienza con
env:
, el contenido del archivo de configuración de raspado de Prometheus se recuperará de la variable de entorno del contenedor. No cambie este campo. -
ecs_service_discovery: es la sección para especificar las configuraciones de las funciones de detección automática de destino de Prometheus de Amazon ECS . Se admiten dos modos para detectar los destinos de Prometheus: detección basada en la etiqueta de docker del contenedor o detección basada en la expresión regular ARN de definición de tarea de Amazon ECS. Puede utilizar los dos modos juntos y el agente de CloudWatch desduplicará los destinos detectados en función de: {private_ip}:{port}/{metrics_path}.
La sección
ecs_service_discovery
puede incluir los siguientes campos:-
sd_frequency
es la frecuencia para detectar a los exportadores de Prometheus. Especifique un número y un sufijo de unidad. Por ejemplo,1m
para una vez por minuto o30s
para una vez cada 30 segundos. Los sufijos de unidad válidos sonns
,us
,ms
,s
,m
yh
.Este campo es opcional. El valor predeterminado es 60 segundos (1 minuto).
-
sd_target_cluster
es el nombre de clúster de Amazon ECS de destino para la detección automática. Este campo es opcional. El valor predeterminado es el nombre del clúster de Amazon ECS donde está instalado el agente de CloudWatch. -
sd_cluster_region
es la Región del clúster de Amazon ECS de destino. Este campo es opcional. El valor predeterminado es la Región del clúster de Amazon ECS donde está instalado el agente de CloudWatch. -
sd_result_file
es la ruta del archivo YAML para los resultados de destino de Prometheus. La configuración de raspado de Prometheus hará referencia a este archivo. -
docker_label
es una sección opcional que se puede utilizar para especificar la configuración para la detección de servicios basada en etiquetas docker. Si omite esta sección, no se utiliza la detección basada en etiquetas docker. Esta sección puede incluir los siguientes campos:-
sd_port_label
es el nombre de etiqueta docker del contenedor que especifica el puerto del contenedor para las métricas de Prometheus. El valor predeterminado esECS_PROMETHEUS_EXPORTER_PORT
. Si el contenedor no tiene esta etiqueta docker, el agente de CloudWatch lo omitirá. -
sd_metrics_path_label
es el nombre de etiqueta docker del contenedor que especifica la ruta de métricas de Prometheus. El valor predeterminado esECS_PROMETHEUS_METRICS_PATH
. Si el contenedor no tiene esta etiqueta docker, el agente asume la ruta predeterminada/metrics
. -
sd_job_name_label
es el nombre de etiqueta docker del contenedor que especifica el nombre del trabajo de raspado de Prometheus. El valor predeterminado esjob
. Si el contenedor no tiene esta etiqueta docker, el agente de CloudWatch utiliza el nombre del trabajo en la configuración de raspado de Prometheus.
-
-
task_definition_list
es una sección opcional que se puede utilizar para especificar la configuración de la detección de servicios basada en definiciones de tareas. Si omite esta sección, no se utiliza la detección basada en definiciones de tareas. Esta sección puede incluir los siguientes campos:-
sd_task_definition_arn_pattern
es el patrón que se utiliza para especificar las definiciones de tareas de Amazon ECS que se van a detectar. Esta es una expresión regular. -
sd_metrics_ports
enumera el containerPort para las métricas de Prometheus. Separe los containerPorts con punto y coma. -
sd_container_name_pattern
especifica los nombres de contenedor de tareas de Amazon ECS. Esta es una expresión regular. -
sd_metrics_path
especifica la ruta de la métrica de Prometheus. Si omite esto, el agente asume la ruta de acceso predeterminada/metrics
-
sd_job_name
especifica el nombre del trabajo de raspado de Prometheus. Si omite este campo, el agente de CloudWatch utilizará el nombre de trabajo en la configuración de borrado de Prometheus.
-
-
service_name_list_for_tasks
es una sección opcional que puede utilizar para especificar la configuración de la detección basada en nombres de servicio. Si omite esta sección, no se utiliza la detección basada en nombres de servicio. Esta sección puede incluir los siguientes campos:-
sd_service_name_pattern
es el patrón que se debe utilizar para especificar el servicio Amazon ECS en el que se van a detectar las tareas. Esta es una expresión regular. -
sd_metrics_ports
enumera elcontainerPort
para ver las métricas de Prometheus. Separe varioscontainerPorts
con punto y coma. -
sd_container_name_pattern
especifica los nombres de contenedor de tareas de Amazon ECS. Esta es una expresión regular. -
sd_metrics_path
especifica la ruta de las métricas de Prometheus. Si omite esto, el agente asume la ruta de acceso predeterminada/metrics
. -
sd_job_name
especifica el nombre del trabajo de raspado de Prometheus. Si omite este campo, el agente de CloudWatch utilizará el nombre de trabajo en la configuración de raspado de Prometheus.
-
-
-
metric_declaration: son secciones que especifican la matriz de registros con formato de métrica integrada que se van a generar. Hay secciones
metric_declaration
para cada fuente de Prometheus desde las que el agente de CloudWatch importa de forma predeterminada. Cada una de estas secciones incluye los siguientes campos:-
label_matcher
es una expresión regular que verifica el valor de las etiquetas que aparecen ensource_labels
. Las métricas que concuerdan se pueden incorporar al formato de métrica integrada que se envía a CloudWatch.Si tiene varias etiquetas especificadas en
source_labels
, se recomienda que evite el uso de los caracteres^
o$
en la expresión regular paralabel_matcher
. -
source_labels
especifica el valor de las etiquetas que se comprueban conlabel_matcher
. -
label_separator
especifica el separador que se utilizará en la línealabel_matcher
si se especifican múltiplessource_labels
. El valor predeterminado es;
. Puede ver este valor predeterminado utilizado en la línealabel_matcher
en el siguiente ejemplo. -
metric_selectors
es una expresión regular que especifica las métricas que se van a recopilar y enviar a CloudWatch. -
dimensions
es la lista de etiquetas que se van a utilizar como dimensiones de CloudWatch en cada métrica seleccionada.
-
Consulte el siguiente ejemplo, metric_declaration
.
"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$" ] } ]
En este ejemplo se configura una sección de formato de métricas integradas para que se envíe como evento de registro si se cumplen las condiciones siguientes:
-
El valor de
Service
contienenode-exporter
okube-dns
. -
El valor de
Namespace
eskube-system
. -
La métrica de Prometheus
coredns_dns_request_type_count_total
contiene ambas etiquetas,Namespace
yService
.
El evento de registro que se envía incluye la siguiente sección resaltada:
{ "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", ... }