Cómo configurar el monitoreo para contenedores Docker usando Prometheus
Prometheus es un sistema de monitoreo de código abierto de próxima generación de SoundCloud y está diseñado para monitorear como la generación y recopilación de métricas, graficar los datos resultantes en tableros y alertar sobre anomalías, etc. En este tutorial, instalaremos / configuraremos el siguiente componente :
I) Prometeo como un servicio de Docker, aunque puede instalarse como binario o compilarse desde el código fuente.
ii) Prometeo Exportador de nodo que expone las métricas de la máquina host.
iii) Grafana el rostro de Prometeo.
iv) Prometeo alertmanager que generará alertas basadas en algunos criterios y las enviará a correo electrónico, hipchat, slacks, etc.
v) cAdvisior – recopila, agrega, procesa y exporta información sobre contenedores en ejecución.
Componentes
La función principal de prometheus es consultar los servicios de la ventana acoplable en métricas predefinidas, crear gráficos, consultar la base de datos, verificar el estado de salud de los servicios y notificar al administrador de alertas según las reglas de alerta. La ejecución de la notificación se realiza mediante alertmanager y enruta las alertas a diferentes canales como hipchat, slacks, correo electrónico, etc. El alertmanager también puede suprimir la notificación si tiene la misma fuente para evitar el spam. El exportador de nodos recopila matrices del sistema como el uso de CPU / memoria / almacenamiento para la máquina host y las exporta a prometheus en un formato que comprende. Por último, cAdvisor extrae información sobre los contenedores dentro del sistema host y envía estos datos a prometheus.
Requisitos
Para instalar los componentes anteriores, asegúrese de haber instalado estos dos requisitos previos i) estibador ii) docker-compose.
Instalar Prometheus
Creemos un archivo de configuración docker-compose.yml muy simple y un archivo de configuración prometheus prometheus.yml para instalar prometheus.
# docker-compose.yml version: '2' services: prometheus: image: prom/prometheus:latest volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml command: - '--config.file=/etc/prometheus/prometheus.yml' ports: - '9090:9090'
Archivo de configuración de Prometheus
# prometheus.yml global: scrape_interval: 5s external_labels: monitor: 'my-monitor' rule_files: - 'alert.rules' scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['123.45.67.89:9090']
Dentro de docker-compose.yml, la asignación del archivo de configuración de prometheus al contenedor como un volumen se realiza en la etiqueta de volumen y se agrega un parámetro de configuración al comando que apunta a este archivo. Permítanos lanzar prometheus usando el siguiente comando.
root@demohost:~# docker-compose up
Ahora apunte su navegador a http://Target-IP-adress:9090
para confirmar que el servidor se está ejecutando y haga clic en ‘Estado’ para verificar el archivo de configuración que le hemos proporcionado.
Las métricas sin procesar se pueden verificar visitando http: // Target-IP-address: 9090 / metrics Luego, haga clic en la opción de destino en el menú de estado, encontrará que el estado de prometheus es ARRIBA.
Instalar exportador de nodo
Node Exporter expone las métricas de Prometheus de la máquina host en la que se está ejecutando y muestra el sistema de archivos de la máquina, los dispositivos de red, el procesador, los usos de la memoria y otras características también. El exportador de nodos se puede ejecutar como un contenedor de ventana acoplable mientras informa estadísticas para el sistema host. Agregaremos la configuración de configuración al docker-compose.yml y prometheus.yml existentes para darle vida a node-exporter.
# docker-compose.yml version: '2' services: prometheus: image: prom/prometheus:latest volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml command: - '--config.file=/etc/prometheus/prometheus.yml' ports: - '9090:9090' node-exporter: image: prom/node-exporter ports: - '9100:9100'
Archivo de configuración de Prometheus
# prometheus.yml global: scrape_interval: 5s external_labels: monitor: 'my-monitor' rule_files: - 'alert.rules' scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['123.45.67.89:9090'] - job_name: 'node-exporter' static_configs: - targets: ['node-exporter:9100']
En prometheus.yml, hacemos referencia a node-exporter por su nombre de servicio que ya se ha definido en docker-compose.yml
Reiniciar docker-composer
root@demohost:~# docker-compose restart
Ahora haga clic en la opción de destino en el menú de estado, encontrará que el estado del exportador de nodos es ARRIBA y saludable.
Ahora ejecutaremos una consulta para probar las características enriquecidas de prometheus. Haga clic en ‘Gráfico’ en la barra de menú y luego seleccione cualquier métrica en el cuadro desplegable y haga clic en ‘Ejecutar’. Presione la pestaña ‘Gráfico’ para ver el gráfico.
Instalar Grafana
A partir de ahora, hemos instalado y configurado el servidor prometheus y el exportador de nodos. Configuremos ahora Grafana, que es una interfaz gráfica con un panel que admite prometheus como back-end para consultar los datos para generar el gráfico.
Aunque prometheus tiene funciones gráficas integradas a las que se puede acceder a través de su interfaz web, grafana ofrece funciones mucho más potentes. Agregue las siguientes líneas a docker-compose.yml para configurar el panel de grafana.
…… …… grafana: image: grafana/grafana user: "0" #[ Execute id -u in terminal to find the user id from where you are invoking docker compose] volumes: - ./grafana_db:/var/lib/grafana environment: - GF_SECURITY_ADMIN_PASSWORD=yourpass depends_on: - prometheus ports: - '3000:3000' ……. …….
Apunta tu navegador a http://Prometheus-IP:3000
para acceder a grafana. Inicie sesión en grafana con el usuario ‘admin’ y la contraseña como ‘admin_password’. Serás llevado al panel de grafana.
Una vez que haya iniciado sesión con éxito en el panel de grafana, haga clic en el icono de grafana seguido de ‘fuentes de datos’ y finalmente ‘Agregar fuente de datos’ como se muestra en la imagen a continuación.
En la página de agregar fuente de datos en la pestaña de configuración, proporcione un nombre de la fuente de datos, escriba como prometheus. En la configuración de Http, proporcione la URL como la IP del servidor prometheus y acceda como directo y haga clic en ‘Agregar’.
Una vez agregada la fuente de datos, haga clic en la pestaña del panel e importe la fuente de datos que acaba de crear. Encontrará el panel de control recién creado con la revisión 1.
Ahora haga clic en el icono de inicio y seleccione el panel de prometheus que ha creado en el paso anterior.
Para garantizar que los datos realmente persistan en los volúmenes de la ventana acoplable, agregamos las siguientes dos líneas en docker-compose.yml Asegúrese de tener estos dos directorios, prometheus_db y grafana_db en el directorio de trabajo.
volumes: - ./prometheus_db:/var/lib/prometheus ............... ............... volumes: - ./grafana_db:/var/lib/grafana
Alerta / Notificación
Ahora configuraremos reglas de alerta para detectar eventos basados en criterios métricos que ha sido rastreado por prometheus. Aquí usaremos el componente alert-manager para enviar notificaciones a una cuenta de hipchat cuando se activen las alertas.
Para configurar la notificación, necesitamos configurar tres archivos:
– Alert.rules para definir reglas sobre qué alerta se disparará
– Asigne este archivo con el contenedor en docker-compose.yml
– Edite Prometheus.yml para agregar alertmanager como servicio.
Agregaremos las siguientes dos reglas de alerta 1) service_down 2) high_load en alert.rules
groups: - name: alert.rules rules: - alert: service_down expr: up == 0 - alert: high_load expr: node_load1 > 0.5 annotations: description: '{{ $labels.instance }} of job {{ $labels.job }} is under high load.' summary: Instance {{ $labels.instance }} under high load
Para mapear las reglas de alerta en docker-compose.yml, agregue la siguiente línea a la sección de volúmenes del servicio prometheus en docker-compose.yml
version: '2' services: prometheus: image: prom/prometheus:latest volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml - ./prometheus_db:/var/lib/prometheus - ./alert.rules:/etc/prometheus/alert.rules …………. ………….
Por último, edite prometheus.yml para informar a prometheus sobre la ruta de los archivos de reglas.
rule_files: - 'alert.rules' ...................... ......................
Reiniciemos los contenedores con el siguiente comando:
root@demohost:~# docker-compose restart
Una vez que la ventana acoplable esté activa, haga clic en alertas en el panel de prometheus y podrá ver las alertas.
Como ya hemos definido una alerta con el nombre high_load con un promedio de carga superior a 0.5, activemos esta alerta creando una carga con el siguiente comando.
root@demohost:~# docker run --rm -it busybox sh -c "while true; do :; done"
Después de unos segundos, veremos que la alerta high_load está activa.
Recuerde que las alertas en sí mismas son métricas, lo que significa que las alertas se pueden ver en el panel de grafana. Para hacer eso, haga clic en agregar fila-> haga clic en el menú de hamburguesas de la izquierda-> Agregar panel-> gráfico. Seleccione la fuente de datos del panel como prometheus, coloque el cursor del mouse en el cuadro de búsqueda de métricas, encontrará ALERTA en la parte superior de las métricas.
Seleccione ‘prometheus’ en el cuadro desplegable y marque ‘alertas’ en la búsqueda de métricas
Las alertas de carga alta ahora están visibles en el panel de grafana.
Ahora volviendo al administrador de alertas, agregaremos algunas líneas en el docker-compose.yml tal como lo hicimos para prometheus y exporter. Nuestra configuración final para docker-compose.yml se ve así.
# docker-compose.yml version: '2' services: prometheus: image: prom/prometheus:latest volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml - ./prometheus_db:/var/lib/prometheus - ./alert.rules:/etc/prometheus/alert.rules command: - '--config.file=/etc/prometheus/prometheus.yml' ports: - '9090:9090' depends_on: - alertmanager node-exporter: image: prom/node-exporter ports: - '9100:9100' grafana: image: grafana/grafana user: "0" volumes: - ./grafana_db:/var/lib/grafana environment: - GF_SECURITY_ADMIN_PASSWORD=yourpass depends_on: - prometheus ports: - '3000:3000' alertmanager: image: prom/alertmanager:latest volumes: - ./alertmanager.yml:/alertmanager.yml command: - '--config.file=/etc/alertmanager/alertmanager.yml' ports: - '9093:9093'
Todo esto es necesario para configurar el administrador de alertas y para conectar Prometheus, pero aún necesitamos crear alertmanager.yml. Antes de eso, configuremos un receptor de alertas.
Configurar el receptor de alertas
Inicie sesión en su cuenta de hipchat-> seleccione la habitación-> integraciones Ahora haga clic en «Cree sus propias integraciones»
Dé un nombre a la integración y haga clic en crear.
Anote el número de habitación y el token de autenticación que usaremos al configurar alertmanager.conf
Este es nuestro alertmanager.yml que está configurado para enviar alertas a una cuenta de hipchat. Puede agregar más receptores como holgura, correo electrónico, etc. en este archivo.
global: hipchat_auth_token: 'xxx' hipchat_api_url: 'https://api.hipchat.com/' route: group_by: [cluster] receiver: team-hipchat routes: - match: severity: hipchat receiver: team-hipchat receivers: - name: team-hipchat hipchat_configs: - auth_token: 'yyy' room_id: 12345 message_format: html notify: true
Una vez que prometheus activa una alerta, el administrador de alertas enviará la alerta a la cuenta de hipchat anterior. Puede verificarlo navegando al historial de chat.
asesor
Para instalar cAdvisor, agregue las siguientes líneas a docker-compose.yml
.............. .............. cadvisor: image: google/cadvisor:latest ports: - '8080:8080' volumes: - /:/rootfs:ro - /var/run:/var/run:rw - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro
También realice una entrada del servicio cAdvisor en prometheus.yml
.............. .............. - job_name: 'cAdvisor' static_configs: - targets: ['123.45.67.89:8080']
Eso es todo, hemos terminado con cAdvisor. Reiniciar docker-compose
root@demohost:~# docker-compose restart
Apunte su navegador a http: // target-IP: 9090 / targets para verificar el estado de cAdvisor. Si no hay ningún error, su estado será ARRIBA.
Para comprobar las métricas del contenedor, haga clic en los gráficos de la barra de menú superior, seleccione cualquiera de los parámetros del contenedor en la lista desplegable y haga clic en ejecutar. Seleccione la pestaña ‘gráfico’ para ver el gráfico basado en las métricas del contenedor que acaba de seleccionar.
Conclusión
En este tutorial, configuramos el servidor Prometheus, configuramos un objetivo de desguace de métricas, configuramos alertmanager y habilitamos notificaciones para hipchat, todo usando Docker. También hemos configurado cAdvisor para monitorear contenedores dentro de la máquina host. Prometheus es un increíble servicio de supervisión que obtiene datos de métricas del administrador de nodos y del asesor de contenedores y accede a estas métricas desde grafana. No hay mejor manera de monitorear aplicaciones y servicios en contenedores.