Usa Datadog Agent y las integraciones de Datadog-OpenMetrics o Datadog-Prometheus para recopilar tus métricas expuestas de Prometheus y OpenMetrics de la aplicación que se está ejecutando dentro de tus contenedores.

Información general

A partir de la versión 6.5.0, el Agent incluye checks de OpenMetrics y Prometheus capaces de extraer los endpoints de Prometheus. Datadog recomienda usar el check de OpenMetrics, ya que es más eficiente y es compatible con el formato de texto de Prometheus. Consulta usos más avanzados de la interfaz de OpenMetricsCheck, incluido cómo escribir un check personalizado, en la sección de Herramientas de desarrollo. Usa el check de Prometheus solo cuando el endpoint de las métricas no sea compatible con un formato de texto.

Esta página explica el uso básico de estos checks, que permiten importar todas las métricas que tienes expuestas en Prometheus dentro de Datadog.

Los comandos de CLI en esta página son para el tiempo de ejecución de Docker. Sustituye docker por nerdctl para el tiempo de ejecución del containerd, o podman para el tiempo de ejecución del Podman.

Configuración

Instalación

Para lanzar el Docker Agent junto a tus otros contenedores, sustituye <DATADOG_API_KEY> por la clave API de tu organización en el comando a continuación:

docker run -d --cgroupns host \
    --pid host \
    -v /var/run/docker.sock:/var/run/docker.sock:ro \
    -v /proc/:/host/proc/:ro \
    -v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro \
    -e DD_API_KEY="<DATADOG_API_KEY>" \
    -e DD_SITE="<YOUR_DATADOG_SITE>" \
    gcr.io/datadoghq/agent:latest
docker run -d --name dd-agent -v /var/run/docker.sock:/var/run/docker.sock:ro \
    -v /proc/:/host/proc/:ro \
    -v /cgroup/:/host/sys/fs/cgroup:ro \
    -e DD_API_KEY="<DATADOG_API_KEY>" \
    -e DD_SITE="<YOUR_DATADOG_SITE>" \
    gcr.io/datadoghq/agent:latest
docker run -d -e DD_API_KEY="<DATADOG_API_KEY>" \
    -e DD_SITE="<YOUR_DATADOG_SITE>" \
    gcr.io/datadoghq/agent:latest

Nota: Tu sitio de Datadog es .

Configuración

El Agent detecta si se está ejecutando en Docker y busca etiquetas de Datadog-OpenMetrics automáticamente en todas las etiquetas de contenedores. Autodiscovery espera que las etiquetas se parezcan a estos ejemplos, según el tipo de archivo:

LABEL "com.datadoghq.ad.check_names"='["openmetrics"]'
LABEL "com.datadoghq.ad.init_configs"='[{}]'
LABEL "com.datadoghq.ad.instances"='["{\"openmetrics_endpoint\":\"http://%%host%%:<PROMETHEUS_PORT>/<PROMETHEUS_ENDPOINT> \",\"namespace\":\"<NAMESPACE>\",\"metrics\":[{\"<METRIC_TO_FETCH>\": \"<NEW_METRIC_NAME>\"}]}"]'

Ejemplo de múltiples endpoints

LABEL "com.datadoghq.ad.check_names"='["openmetrics","openmetrics"]'
LABEL "com.datadoghq.ad.init_configs"='[{},{}]'
LABEL "com.datadoghq.ad.instances"='["{\"openmetrics_endpoint\":\"http://%%host%%:<PROMETHEUS_PORT>/<PROMETHEUS_ENDPOINT> \",\"namespace\":\"<NAMESPACE>\",\"metrics\":[{\"<METRIC_TO_FETCH>\": \"<NEW_METRIC_NAME>\"}]}", "{\"openmetrics_endpoint\":\"http://%%host%%:<PROMETHEUS_PORT>/<PROMETHEUS_ENDPOINT> \",\"namespace\":\"<NAMESPACE>\",\"metrics\":[{\"<METRIC_TO_FETCH>\": \"<NEW_METRIC_NAME>\"}]}"]'
labels:
  com.datadoghq.ad.check_names: '["openmetrics"]'
  com.datadoghq.ad.init_configs: '[{}]'
  com.datadoghq.ad.instances: |
    [
      {
        "openmetrics_endpoint": "http://%%host%%:<PROMETHEUS_PORT>/<PROMETHEUS_ENDPOINT>",
        "namespace": "<NAMESPACE>",
        "metrics": [
          {"<METRIC_TO_FETCH>": "<NEW_METRIC_NAME>"}
        ]
      }
    ]    

Ejemplo de múltiples endpoints:

labels:
  com.datadoghq.ad.check_names: '["openmetrics", "openmetrics"]'
  com.datadoghq.ad.init_configs: '[{},{}]'
  com.datadoghq.ad.instances: |
    [
      {
        "openmetrics_endpoint": "http://%%host%%:<PROMETHEUS_PORT>/<PROMETHEUS_ENDPOINT>",
        "namespace": "<NAMESPACE>",
        "metrics": [
          {"<METRIC_TO_FETCH>": "<NEW_METRIC_NAME>"}
        ]
      },
      {
        "openmetrics_endpoint": "http://%%host%%:<PROMETHEUS_PORT>/<PROMETHEUS_ENDPOINT>",
        "namespace": "<NAMESPACE>",
        "metrics": [
          {"<METRIC_TO_FETCH>": "<NEW_METRIC_NAME>"}
        ]
      }
    ]    
# métrica única
-l com.datadoghq.ad.check_names='["openmetrics"]' -l com.datadoghq.ad.init_configs='[{}]' -l com.datadoghq.ad.instances="[{\"openmetrics_endpoint\":\"http://%%host%%:<PROMETHEUS_PORT>/<PROMETHEUS_ENDPOINT>\",\"namespace\":\"<NAMESPACE>\",\"metrics\":[{\"<METRIC_TO_FETCH>\": \"<NEW_METRIC_NAME>\"}]}]"

Ejemplos de formato de métricas en com.datadoghq.ad.instances

# múltiples métricas
-l com.datadoghq.ad.instances="[{\"openmetrics_endpoint\":\"http://%%host%%:<PROMETHEUS_PORT>/<PROMETHEUS_ENDPOINT>\",\"namespace\":\"<NAMESPACE>\",\"metrics\":[{\"<METRIC_TO_FETCH>\": \"<NEW_METRIC_NAME>\"}, {\"<METRIC_TO_FETCH>\": \"<NEW_METRIC_NAME>\"}]}]"
# todas las métricas de un tipo de base
-l com.datadoghq.ad.instances="[{\"openmetrics_endpoint\":\"http://%%host%%:<PROMETHEUS_PORT>/<PROMETHEUS_ENDPOINT>\",\"namespace\":\"<NAMESPACE>\",\"metrics\":[\"<METRIC_BASE_TO_FETCH>.*\"]}]"
# todas las métricas
-l com.datadoghq.ad.instances="[{\"openmetrics_endpoint\":\"http://%%host%%:<PROMETHEUS_PORT>/<PROMETHEUS_ENDPOINT>\",\"namespace\":\"<NAMESPACE>\",\"metrics\":[\".*\"]}]"

Ejemplo de múltiples endpoints:

-l com.datadoghq.ad.check_names='["openmetrics", "openmetrics"]' -l com.datadoghq.ad.init_configs='[{},{}]' -l com.datadoghq.ad.instances='["{\"openmetrics_endpoint\":\"http://%%host%%:<PROMETHEUS_PORT>/<PROMETHEUS_ENDPOINT> \",\"namespace\":\"<NAMESPACE>\",\"metrics\":[{\"<METRIC_TO_FETCH>\": \"<NEW_METRIC_NAME>\"}]}", "{\"openmetrics_endpoint\":\"http://%%host%%:<PROMETHEUS_PORT>/<PROMETHEUS_ENDPOINT> \",\"namespace\":\"<NAMESPACE>\",\"metrics\":[{\"<METRIC_TO_FETCH>\": \"<NEW_METRIC_NAME>\"}]}"]'

Con los siguientes valores de marcadores de configuración:

MarcadorDescripción
<PROMETHEUS_PORT>El puerto al cual conectarse para acceder al endpoint de Prometheus. Otra opción es usar la Variable de Plantilla de Autodiscovery %%port%%.
<PROMETHEUS_ENDPOINT>La ruta URL para las métricas servidas por el contenedor en formato Prometheus.
<NAMESPACE>Establece el espacio de nombres que se usará como prefijo para cada métrica cuando se visualiza en Datadog.
<METRIC_TO_FETCH>Clave de métricas a recuperar del endpoint de Prometheus.
<NEW_METRIC_NAME>Transforma la clave de métrica <METRIC_TO_FETCH> en <NEW_METRIC_NAME> en Datadog.

La configuración metrics es una lista de métricas que se recuperan como métricas personalizadas. Incluye cada métrica a recuperar y el nombre de métrica que se quiera en Datadog como pares de valores clave; por ejemplo, {"<METRIC_TO_FETCH>":"<NEW_METRIC_NAME>"}. Otra opción es proporcionar una lista de cadenas de nombres de métricas, interpretadas como expresiones regulares, para reunir las métricas deseadas con sus nombres actuales. Nota: potencialmente, las expresiones regulares pueden enviar muchas métricas personalizadas.

Consulta el ejemplo de configuración de openmetrics.d/conf.yaml para ver una lista completa de parámetros para instancias, incluidos namespace y metrics.

Primeros pasos

Recopilación sencilla de métrica

Sigue los pasos a continuación para empezar a recopilar métricas expuestas por Prometheus cuando se ejecuta dentro de un contenedor:

  1. Lanza el Datadog Agent:

    docker run -d --cgroupns host \
        --pid host \
        -v /var/run/docker.sock:/var/run/docker.sock:ro \
        -v /proc/:/host/proc/:ro \
        -v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro \
        -e DD_API_KEY="<DATADOG_API_KEY>" \
        gcr.io/datadoghq/agent:latest
    
    docker run -d -e DD_API_KEY="<DATADOG_API_KEY>" \
        gcr.io/datadoghq/agent:latest \
        -v \\.\pipe\docker_engine:\\.\pipe\docker_engine
    

  2. Lanza un contenedor de Prometheus que expone métricas de muestra para que las recopile el Agent, con las etiquetas de Autodiscovery para el check de OpenMetrics.

    Las etiquetas a continuación harán que el Agent recopile las métricas promhttp_metric_handler_requests, promhttp_metric_handler_requests_in_flight y todas la métricas expuestas que comiencen por go_memory.

    labels:
      com.datadoghq.ad.check_names: '["openmetrics"]'
      com.datadoghq.ad.init_configs: '[{}]'
      com.datadoghq.ad.instances:  |
        [
          {
            "openmetrics_endpoint": "http://%%host%%:%%port%%/metrics",
            "namespace": "documentation_example_docker",
            "metrics": [
              {"promhttp_metric_handler_requests": "handler.requests"},
              {"promhttp_metric_handler_requests_in_flight": "handler.requests.in_flight"},
              "go_memory.*"
            ]
          }
        ]    
    

    Para lanzar una muestra de contenedor Prometheus con estas etiquetas, puedes ejecutar lo siguiente:

    docker run -d -l com.datadoghq.ad.check_names='["openmetrics"]' -l com.datadoghq.ad.init_configs='[{}]' -l com.datadoghq.ad.instances='[{"openmetrics_endpoint":"http://%%host%%:%%port%%/metrics","namespace":"documentation_example_docker","metrics":[{"promhttp_metric_handler_requests":"handler.requests"},{"promhttp_metric_handler_requests_in_flight":"handler.requests.in_flight"},"go_memory.*"]}]' prom/prometheus
    
  3. Accede a tu página de Resumen de métricas para ver las métricas recopiladas:

    Prometheus metric collected docker

De la integración personalizada a la oficial

Por defecto, todas las métricas recuperadas por el check de Prometheus genérico se consideran métricas personalizadas. Si estás monitorizando software comercial y crees que merece tener una integración oficial, no dudes en contribuir!

Las integraciones oficiales tienes sus propios directorios específicos. Hay un mecanismo de instancia por defecto en el check genérico para codificar la configuración por defecto y metadatos de métricas. Por ejemplo, consulta la integración kube-proxy.

Leer más