GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Monitoreo de contenedores Docker con Grafana usando Dockprom

La monitorización es una de las actividades esenciales en el mundo DevOps. y ni siquiera necesito convencerlo de por qué el monitoreo es una buena idea. Ya lo sabes, ¿verdad?

Por supuesto, puede apegarse a las herramientas de línea de comandos para monitorear su servidor y los contenedores docker que se ejecutan en él, un enfoque basado en GUI agrega la conveniencia de analizar las métricas de rendimiento con una experiencia intuitiva para observar múltiples parámetros a la vez en la pantalla. También hace es más fácil compartir el panel de monitoreo con personas menos técnicas.

En este tutorial, le mostraré cómo puede configurar el monitoreo de contenedores docker con dockprom y presentarlo de una forma visualmente atractiva gracias a Grafana.

Monitoreo de docker host y contenedores con Dockprom

Dockprom es una de esas pilas que ejecuta diversas herramientas de monitoreo como un conjunto de herramientas colectivo para las necesidades de monitoreo de su servidor.

stefanprodan/dockpromMonitoreo de hosts y contenedores Docker con Prometheus, Grafana, cAdvisor, NodeExporter y AlertManager - stefanprodan/dockprom GitHubstefanprodan

Tenga en cuenta que el ejemplo aquí se basará en la configuración del proxy inverso de Nginx. La configuración oficial de Dockprom se basa en Caddy.

En Linux Handbook y High On Cloud, usamos Nginx en la práctica estándar. Entonces, rediseñé la configuración de Dockprom para que se basara en Nginx en lugar de Caddy. El resultado se parece mucho a nuestras implementaciones anteriores de Nginx.

Fundamentos para la configuración de Dockprom

Dockprom utiliza las siguientes herramientas para proporcionar una solución de monitoreo para su host y contenedores Docker.

Grafana

Grafana le permite consultar, visualizar y alertar sobre métricas y registros sin importar dónde estén almacenados. Esta será la interfaz web principal y única a través de la cual utilizará todas las aplicaciones de backend restantes compartidas en las secciones de herramientas restantes.

Por lo tanto, aquí es donde debe agregar las populares variables de entorno basadas en Nginx que ha estado usando para acceder a nuestras aplicaciones desde cualquier lugar de la web:

environment:
  - VIRTUAL_HOST=dockprom.domain.com
  - LETSENCRYPT_HOST=dockprom.domain.com

Asegúrate de cambiar esto según tu dominio o subdominio.

Prometeo

Prometheus es un kit de herramientas de monitoreo y alerta de sistemas de código abierto utilizado por miles de personas en todo el mundo.

Pushgateway

Pushgateway es un servicio intermediario que le permite enviar métricas de trabajos que no se pueden extraer. Es posible que desee leer esto para saber realmente si realmente lo necesita. Esto se debe a que hay casos limitados en los que sería necesario.

Administrador de alertas

Alertmanager maneja las alertas enviadas por las aplicaciones cliente, como el servidor Prometheus. Se encarga de deduplicarlos, agruparlos y enrutarlos a la integración correcta del receptor, como correo electrónico, PagerDuty u OpsGenie. También se encarga del silenciamiento e inhibición de alertas.

cAsesor

cAdvisor es una herramienta de código abierto de Google que brinda a los usuarios de contenedores una comprensión del uso de recursos y las características de rendimiento de sus contenedores en ejecución.

En esta configuración en particular, me enfrentaba a un problema relacionado con la obtención de dos métricas basadas en dos errores respectivos después de implementar la configuración oficial de cAdvisor indicada en la pila de Dockprom:

Failed to get system UUID: open /etc/machine-id: no such file or directory
Could not configure a source for OOM detection, disabling OOM events: open /dev/kmsg: no such file or directory

Busqué el repositorio oficial de cAdvisor donde se habían proporcionado soluciones. El primero funcionó, pero el segundo no era exactamente lo que estaba buscando, ya que esta solución se basó en una docker run comando de lanzamiento basado.

Se necesitaba una corrección de Docker Compose. Primero intenté montar /dev/kmsg pero eso no iba a hacer el trabajo. Finalmente, basado en docker run solución basada, encontré que en líneas similares, Docker Compose proporciona un indicador separado llamado devices que se puede usar para montar /dev/kmsg como dispositivo. Puedes leer sobre esto aquí.

Entonces, la solución para el primer problema fue agregar lo siguiente a las líneas en la sección de volúmenes:

	volumes:
  	  ---
      ---
      - /etc/machine-id:/etc/machine-id:ro
      - /var/lib/dbus/machine-id:/var/lib/dbus/machine-id:ro

El segundo es como se acaba de discutir:

    devices:
      - /dev/kmsg:/dev/kmsg

Tenga en cuenta cómo estas métricas son importantes para el montaje desde el host, ya que es el host que desea monitorear a través de Docker.

Exportador de nodos

Prometheus Node Exporter expone una amplia variedad de métricas relacionadas con el hardware y el kernel. Es similar a cómo se exponen las métricas en cAdvisor.

Combinando todo lo anterior, su archivo Docker Compose completo se verá así:

version: '3.7'

networks:
  net:
    external: true

volumes:
    prometheus_data: {}
    grafana_data: {}

services:

  prometheus:
    image: prom/prometheus:v2.24.0
    container_name: prometheus
    volumes:
      - ./prometheus:/etc/prometheus
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/etc/prometheus/console_libraries'
      - '--web.console.templates=/etc/prometheus/consoles'
      - '--storage.tsdb.retention.time=200h'
      - '--web.enable-lifecycle'
    restart: on-failure
    networks:
      - net
    labels:
      org.label-schema.group: "monitoring"

  alertmanager:
    image: prom/alertmanager:v0.21.0
    container_name: alertmanager
    volumes:
      - ./alertmanager:/etc/alertmanager
    command:
      - '--config.file=/etc/alertmanager/config.yml'
      - '--storage.path=/alertmanager'
    restart: on-failure
    networks:
      - net
    labels:
      org.label-schema.group: "monitoring"

  nodeexporter:
    image: prom/node-exporter:v1.0.1
    container_name: nodeexporter
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - '--path.procfs=/host/proc'
      - '--path.rootfs=/rootfs'
      - '--path.sysfs=/host/sys'
      - '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
    restart: on-failure
    networks:
      - net
    labels:
      org.label-schema.group: "monitoring"

  cadvisor:
    image: gcr.io/cadvisor/cadvisor:v0.38.7
    container_name: cadvisor
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker:/var/lib/docker:ro
      - /etc/machine-id:/etc/machine-id:ro
      - /var/lib/dbus/machine-id:/var/lib/dbus/machine-id:ro
      #- /dev/kmsg:/dev/kmsg:rw
    #command: ["start", "--privileged"]
    restart: on-failure
    devices:
      - /dev/kmsg:/dev/kmsg
    networks:
      - net
    labels:
      org.label-schema.group: "monitoring"

  grafana:
    image: grafana/grafana:7.3.7
    container_name: grafana
    volumes:
      - grafana_data:/var/lib/grafana
      - ./grafana/provisioning:/etc/grafana/provisioning
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_USERS_ALLOW_SIGN_UP=false
    restart: on-failure
    networks:
      - net
    environment:
      - VIRTUAL_HOST=dockprom.domain.com
      - LETSENCRYPT_HOST=dockprom.domain.com

    labels:
      org.label-schema.group: "monitoring"

  pushgateway:
    image: prom/pushgateway:v1.3.1
    container_name: pushgateway
    restart: on-failure
    networks:
      - net
    labels:
      org.label-schema.group: "monitoring"

Si tiene curiosidad, puede consultar y comparar el archivo anterior con el diseño oficial de Dockprom.

Mejor tiempo de actividad:monitoreo web gratuito y página de estado Plataforma de monitoreo de tiempo de actividad radicalmente mejor con alertas de llamadas telefónicas, páginas de estado y gestión de incidentes integrada. Plan gratuito incluido! Jipi de Metrics Watch

Configurar el host de docker y la supervisión de contenedores

Ahora que he compartido lo que implementa Dockprom Stack con las definiciones oficiales de las herramientas de monitoreo del servidor, permítanme enumerar el proceso paso a paso para implementar este diseño de Dockprom basado en Nginx junto con las correcciones esenciales de cAdvisor.

Para fines de prueba, puede usar un nanode 1 GB en Linode para probar la configuración, pero para fines de producción, se requiere que el servidor tenga al menos 4 GB. Esto se debe principalmente a Prometeo.

Linodo | La nube abierta independiente para desarrolladores Nuestra misión es acelerar la innovación haciendo que la computación en la nube sea simple, asequible y accesible para todos. Linode Supongo que está familiarizado con el concepto de Docker y Docker Compose. También tenga en cuenta que solo puede monitorear los contenedores Docker que se ejecutan en el mismo servidor.

Paso 1:Obtener la configuración oficial de Dockprom

Abra una terminal en el servidor e ingrese el siguiente comando:

git clone https://github.com/stefanprodan/dockprom
cd dockprom

Paso 2:Revisar el archivo docker-compose.yml

Como he discutido y compartido el archivo docker-compose.yml basado en Nginx hace un tiempo en la sección Exportador de nodos. Edite el archivo y revíselo.

Paso 3:¡Inicie la configuración!

Suponiendo que se encuentra en el mismo directorio de Dockprom, ejecute el comando Docker Compose para iniciar Dockprom Stack:

docker-compose up -d

Paso 4:Acceda a la pila Dockprom a través de Grafana

¿Recuerda que configuró su URL de acceso adicionalmente dentro de la configuración de Grafana para el acceso web? Ahora puede usarlo para obtener acceso completo a la pila.

Tanto el nombre de usuario como la contraseña se habían establecido en admin . Se recomienda cambiarla por una contraseña segura. Un panel de inicio de sesión web típico se ve así:

Espere un momento a que se cargue la interfaz:

Consejo adicional

Después de iniciar sesión en Grafana, navegar rápidamente a las estadísticas de métricas puede ser abrumador al principio, por lo que compartiré el enlace directo al panel de control para acceso inmediato:https://dockprom.domain.com/dashboards

Como puede ver, solo necesita agregar /dashboards a su propio dominio o subdominio. Desde esta página, puede monitorear métricas para:

  • Contenedores Docker
  • Sistema anfitrión
  • Prometeo
  • Nginx

Tenga en cuenta que Nginx (cuarto y último en la lista anterior) mostraría estadísticas vacías si no se instala directamente en el host. Esto no debe confundirse con Jwilder Nginx ya que se ejecuta en Docker. Debería monitorear el contenedor Nginx específicamente en tal caso.

Aquí está la pantalla de Grafana para el monitoreo del host de Docker:

Ya había compartido la captura de pantalla de monitoreo de contenedores al comienzo de este artículo:

Espero que este breve tutorial lo ayude a configurar esta pila de recursos en su servidor. Nuevamente, esto es útil para un solo servidor. Si tiene contenedores en varios servidores, puede usar Swarmprom del mismo desarrollador.

stefanprodan/swarmpromInstrumentación Docker Swarm con Prometheus, Grafana, cAdvisor, Node Exporter y Alert Manager - stefanprodan/swarmprom GitHubstefanprodan

Si tiene algún comentario o sugerencia, no dude en compartir sus opiniones en la sección a continuación.


Docker
  1. ¿Qué es Docker? Aprenda a usar contenedores:explicado con ejemplos

  2. Configurar Nextcloud con Redis usando Docker

  3. Supervisión de contenedores Docker:ventajas, prácticas recomendadas y herramientas imprescindibles

  4. 3 estrategias para implementaciones de producción automatizadas con Docker

  5. ¿Por qué todos usan Docker?

Cómo editar código en contenedores Docker con Visual Studio Code

Cómo centralizar la gestión de registros con Graylog mediante Docker

Cómo ejecutar Jenkins en Docker usando Docker Compose con Volúmenes

Cómo eliminar contenedores Docker

Trabajar con Docker Containers desde la línea de comandos

ctop:interfaz superior para monitorear contenedores Docker