LINUX

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.

Arquitectura de Prometeo

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.

Estado de Prometheus

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.

Objetivo de Prometeo

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.

Ejecutar consulta de prometheus

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.

Iniciar sesión en 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.

Grafana agrega fuente de datos

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’.

Fuente de datos de configuración

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.

Importar prometeo

Ahora haga clic en el icono de inicio y seleccione el panel de prometheus que ha creado en el paso anterior.

Tablero de Prometheus

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.

Alertas de Prometheus

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.

Alerta de carga alta

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.

Agregar panel en grafana

Seleccione ‘prometheus’ en el cuadro desplegable y marque ‘alertas’ en la búsqueda de métricas

Fuente de datos del panel

Las alertas de carga alta ahora están visibles en el panel de grafana.

Alta carga de CPU

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»

Integraciones de Hipchat

Dé un nombre a la integración y haga clic en crear.

Nombre de la integración

Anote el número de habitación y el token de autenticación que usaremos al configurar alertmanager.conf

Prometheus room no y token

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.

Alertas de Hipchat

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.

estado de cAdvisor

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.

Seleccionar métricas de cAdvisor

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.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar