Recopilar métricas de Docker con Prometheus
Prometheus es un conjunto de herramientas de código abierto para la monitorización y alerta de sistemas. Puedes configurar Docker como un objetivo de Prometheus.
WarningLas métricas disponibles y los nombres de estas métricas están en desarrollo activo y pueden cambiar en cualquier momento.
Por ahora, solo puedes monitorizar el propio Docker. No puedes monitorizar tu aplicación utilizando el objetivo de Docker.
Ejemplo
El siguiente ejemplo muestra cómo configurar tu demonio de Docker, configurar Prometheus para que se ejecute como un contenedor en tu máquina local y monitorizar tu instancia de Docker utilizando Prometheus.
Configurar el demonio
Para configurar el demonio de Docker como un objetivo de Prometheus, debes especificar el parámetro metrics-addr en el archivo de configuración daemon.json. El demonio espera que el archivo esté ubicado de forma predeterminada en una de las siguientes ubicaciones. Si el archivo no existe, créalo.
- Linux:
/etc/docker/daemon.json - Windows Server:
C:\ProgramData\docker\config\daemon.json - Docker Desktop: Abre la configuración de Docker Desktop y selecciona Docker Engine para editar el archivo.
Agrega la siguiente configuración:
{
"metrics-addr": "127.0.0.1:9323"
}Guarda el archivo o, en el caso de Docker Desktop para Mac o Docker Desktop para Windows, guarda la configuración. Reinicia Docker.
Docker ahora expone métricas compatibles con Prometheus en el puerto 9323 a través de la interfaz de bucle de retorno (loopback). Puedes configurarlo para utilizar la dirección comodín 0.0.0.0 en su lugar, pero esto expondrá el puerto de Prometheus a la red externa. Considera cuidadosamente tu modelo de amenazas al decidir qué opción se adapta mejor a tu entorno.
Crear una configuración de Prometheus
Copia el siguiente archivo de configuración y guárdalo en una ubicación de tu elección, por ejemplo, /tmp/prometheus.yml. Este es un archivo de configuración estándar de Prometheus, a excepción de la adición de la definición del trabajo (job) de Docker en la parte inferior del archivo.
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels:
monitor: "codelab-monitor"
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first.rules"
# - "second.rules"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: prometheus
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9090"]
- job_name: docker
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["host.docker.internal:9323"]Ejecutar Prometheus en un contenedor
A continuación, inicia un contenedor de Prometheus utilizando esta configuración.
$ docker run --name my-prometheus \
--mount type=bind,source=/tmp/prometheus.yml,destination=/etc/prometheus/prometheus.yml \
-p 9090:9090 \
--add-host host.docker.internal=host-gateway \
prom/prometheus
Si estás utilizando Docker Desktop, la opción --add-host es opcional. Esta opción garantiza que la IP interna del host se exponga al contenedor de Prometheus. Docker Desktop hace esto de forma predeterminada. La IP del host se expone como el nombre de host host.docker.internal. Esto coincide con la configuración definida en prometheus.yml en el paso anterior.
Abrir el panel de control de Prometheus
Verifica que el objetivo de Docker aparezca en http://localhost:9090/targets/.

NoteNo puedes acceder directamente a las URL de los extremos (endpoints) en esta página si utilizas Docker Desktop.
Usar Prometheus
Crea un gráfico. Selecciona el enlace Graphs en la interfaz de usuario de Prometheus. Elige una métrica en la casilla de selección combinada situada a la derecha del botón Execute y selecciona Execute. La siguiente captura de pantalla muestra el gráfico para engine_daemon_network_actions_seconds_count.

El gráfico muestra una instancia de Docker bastante inactiva, a menos que ya estés ejecutando cargas de trabajo activas en tu sistema.
Para hacer que el gráfico sea más interesante, ejecuta un contenedor que realice algunas acciones de red iniciando la descarga de algunos paquetes mediante un gestor de paquetes:
$ docker run --rm alpine apk add git make musl-dev go
Espera unos segundos (el intervalo de raspado predeterminado es de 15 segundos) y recarga tu gráfico. Deberías ver un incremento en el gráfico, que muestra el aumento del tráfico de red causado por el contenedor que acabas de ejecutar.

Próximos pasos
El ejemplo que se proporciona aquí muestra cómo ejecutar Prometheus como un contenedor en tu sistema local. En la práctica, probablemente ejecutarás Prometheus en otro sistema o como un servicio en la nube. Puedes configurar el demonio de Docker como un objetivo de Prometheus también en esos contextos. Configura el parámetro metrics-addr del demonio y agrega la dirección del demonio como un extremo de raspado (scrape endpoint) en tu configuración de Prometheus.
- job_name: docker
static_configs:
- targets: ["docker.daemon.example:<PORT>"]Para obtener más información sobre Prometheus, consulta la documentación de Prometheus.