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 GitHubstefanprodanTenga 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 WatchConfigurar 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 GitHubstefanprodanSi tiene algún comentario o sugerencia, no dude en compartir sus opiniones en la sección a continuación.