Monitoreo de métricas de largo historial con Prometheus y Grafana [Debian9]

Hola comunidad, ya habíamos creado un sistema de monitoreo en tiempo real con Netdata en cascada  aquí. Ahora toca el turno a la posibilidad de almacenar métricas de nuestros servidores por un largo período, para tener un largo historial.

Para lograr esto se escogieron como soluciones las de Prometheus y Grafana, que vinculada a la solución de Netdata, lograremos lo siguiente:

Actualmente Netdata permite exportar sus métricas a Prometheus, pero para evitar la enorme cantidad de métricas, que va a estar siendo duplicadas, tanto en largo como en corto plazo, recomiendo usar mejor Prometheus Node Exporter para exportar sólo aquellas méricas que se deseen. Lo anterior no supondría un problema si tuviesemos una “gestión en banda” (enlace dedicado para la gestión que no afecte el ancho de banda de los servicios).

1-Prometheus

1.1-¿Qué es Prometheus?

Prometheus es un sistema de monitoreo y herramientas de alertas de código. Sus principales características son:

  • Un modelo de datos multidimensional con series de tiempos de datos identificados por nombres de métrica y por pares de valor/llave.
  • Usa PromQL, un lenguaje de encuesta flexible para influenciar esta dimensionalidad.
  • No depende de un almacenamiento distribuido; los servidores encuestados son autónomos.
  • Las series de tiempo de colección de datos sucede vía “pull model” sobre HTTP.
  • Los objetivos o “tarjets” son descubiertos por un servicio de descubrimiento o por configuración estática.
  • Soporta múltiples modos de graficación y “dashboarding”.

1.2-Implementación y configuración de Prometheus

Paquetes necesarios:

Creando usuario y grupo de sistema para prometheus:

Para verificar esto, ingresamos la siguiente línea:

Debe devolver algo como esto:

Creando los directorios de configuración:

Asignando los propietarios a los directorios creados:

Descargando el compilado:

Extraemos el paquete:

Copie los dos ficheros “prometheus” y “promtool” que están dentro de la carpeta del paquete descomprimido y ubicarlos en “/usr/local/bin/”

Asignando los propietarios a los ficheros copiados en su nuevo destino

Copie los directorios “consoles/” y “console_libraries/” al directorio “/etc/prometheus”:

Asignamos el propietario de los directorios anteriores:

Descargando el compilado:

Extraemos el paquete:

Copie los dos ficheros “prometheus” y “promtool” que están dentro de la carpeta del paquete descomprimido y ubicarlos en “/usr/local/bin/”:

Asignando los propietarios a los ficheros copiados en su nuevo destino

Copie los directorios “consoles/” y “console_libraries/” al directorio “/etc/prometheus”:

Asignamos el propietario de los directorios anteriores:

1.3-Configurando Prometheus

Ahora que tenemos todos los ficheros de configuración requeridos en su lugar, procedemos a configurar Prometheus. El fichero de configuración por defecto de Prometheus está localizado en el directorio creado tras extraerse su paquete de instalación por compilado. Desde que estamos haciendo una instalación básica, copiaremos ese fichero y lo modificaremos:

Editamos el fichero de configuración de ejemplo:

Ajustamos el fichero a como se muestra a continuación:

Establecemos el propietario del fichero de configuración:

1.4-Iniciando Prometheus

La configuración básica de Prometheus está finalizada. Para iniciar Prometheus con nuestra configuración básica, corremos el programa:

El programa habrá iniciado, cuando devuelva algo como lo siguiente:

Accedemos a la página de estados de Prometheus:

http://server_ip:9090

Creamos el servicio Prometheus en systemd para que inicie con el sistema:

Agregamos lo siguiente:

Recargamos la configuración del demonio systemd:

Habilitamos e iniciamos el servicio Prometheus para que corra con el inicio del sistema:

Verificamos el estado del servicio:

Si sale lo siguiente, entonces Prometheus está corriendo:

Reiniciamos el servidor:

Después que inicie el servidor, verificamos si prometheus inició con el sistema:

#===========================================================

NOTA: Si no inició con el sistema, propongo iniciarlo mediante un script que inicie con el sistema (usted puede hacerlo de otra manera más eficiente si así lo desea):

Agregar lo siguiente:

Le damos permisos de ejecución:

Editamos el cron:

Agregamos lo siguiente al final:

Reiniciamos y volvemos a verificar cuando inicie el servidor. Ahora sí debe de iniciar prometheus.

#===========================================================

2-Monitoreo de métricas de sistemas Linux con Prometheus Node Exporter

El siguiente procedimiento para implementar y configurar Prometheus Node Exporter es necesario hacerlo en cada host Linux, tanto en el servidor prometheus, como en los demás servidores a monitorear.

2.1-Instalando Prometheus Node Exporter:

Para correr de forma segura el “Node Exporter”, necesitamos crear un usuario para ello.

Esto creará el usuario especificado con un grupo bajo el mismo nombre. Verificamos:

Debe devolver algo como esto:

Descargando Node Exporter:

Desempaquetando “node_exporter-0.18.1.linux-amd64.tar.gz”:

Copiamos el binario de “node_exporter” del directorio creado al destino “/usr/local/bin”:

Establecemos el usuario y grupo propietario del binario:

2.2-Iniciando Node Exporter

Node Exporter puede ser configurado para exponer específicos sistemas métricos. A continuación, se crea el servicio “node_exporter” en systemd para que inicie con el sistma, brindando información colectada de CPU, uso de disco, estadísticas de memoria, entre otros:

Agregar lo siguiente:

Recargamos la configuración del demonio systemd:

Iniciamos y habilitamos el servicio “node_exporter” para que corra con el inicio del sistema:

Verificamos el estado del servicio:

Debe devolver algo como esto:

Reiniciamos el servidor:

Verificamos si inició con el sistema:

#===========================================================

NOTA: Si no inicia con el sistema hacer misma operación que con el servicio “prometheus”

#===========================================================

El “Node Exporter” corre sobre el puerto TCP 9100. Lo podemos comprobar con el siguiente comando:

Debe devolver algo como esto:

2.3-Agregando objetivos de Node Exporter a Prometheus

(En el servidor de que alberga a Prometheus)

Editamos el fichero de configuración de prometheus:

Agregamos al final (en la sección de las configuraciones estáticas) lo siguiente:

Si se quiere añadir al propio servidor prometheus en los chequeos, comentarear el “target” referente a prometheus y agregar debajo la siguiente línea siguiente:

Reiniciamos el servicio de prometheus:

#===========================================================

NOTA: Si el servicio no inicia bien, recomiendo reiniciar el servidor, para que se ejecute el script de autoinicio

#===========================================================

3-Comprobando resultados en servidor Prometheus

Nos “logueamos” en la web del prometheus y verificamos el estado de los “targets”. El procedimiento se describe en imágenes a continuación:

Si todo está bien, los objetivos deberían poder aparecer en estado “UP”:

Para verificar que el servidor de prometheus recibe las métricas de sus objetivos, debe correr el siguiente comando:

#curl http://<target-IP>:9100/metrics

Debe devolver algo como esto:

Si se quiere ver alguna métrica en particular, basta con pararse en la ventana principal de Prometheus y seleccionar la opción “- insert metric at cursos -“, para que se listen todas las métricas posibles. A continuación, un ejemplo para la métrica “node_memory_MemAvailable_bytes” (ver imagen), la tecleamos y ejecutamos con la opción “Execute”:

Para ver una gráfica de la métrica, click en la pestaña “Graph” para esa métrica:

Hasta ahora hemos configurado satisfactoriamente un servidor de Prometheus para albergar las métricas y Prometheus Node Exporter para exportar las métricas.

4-Grafana

4.1-¿Qué es Grafana?

Grafana es un software libre basado en licencia de Apache 2.0,2​ que permite la visualización y el formato de datos métricos. Permite crear cuadros de mando y gráficos a partir de múltiples fuentes, incluidas bases de datos de series de tiempo. Entre sus características principales se encuentran:

  • Grafana es multiplataforma sin ninguna dependencia y también se puede implementar con Docker. Está escrito en lenguaje Go y tiene un HTTP API completo.
  • Grafana evita que los usuarios sobrescriban accidentalmente un panel de control. Existe una protección similar cuando se crea un nuevo panel de control cuyo nombre ya existe.
  • La herramienta ofrece la posibilidad de configurar alertas.

4.2-Implementación y configuración de Grafana

Instalando grafana usando paquete “.deb”:

Debe devolver algo como esto:

Verificamos la versión instalada:

Debe devolver algo como esto:

4.3-Iniciando Grafana

Recargar systemd, iniciar y habilitar grafana para que corra al inicio del sistema:

Accedemos a la WebGUI de Grafana:

http://server_ip:3000

user: admin

passwd: admin

Definimos una nueva contraseña para la gestión del sitio y proseguimos:

 

Con esto echo ya tenemos instalado Grafana en nuestro sistema.

4.4-Integrando Prometheus con Grafana

Una vez que se haya configurado la colecta de métricas con Prometheus, sería muy provechoso integrar esas métricas coleccionadas con Grafana, para tener una visualización más intuitiva de los datos, gracias a sus bellos “dashboards”.

Agregamos la fuente de los datos, que en este caso será Prometheus, que a su vez obtiene las métricas del Node Exporter en cada host linux (incluyéndose él mismo):

Configuration > Datasources > Add data source

Ahora podríamos crear nuestros propios “dashboards” para la visualización de los datos o bien importar cualquiera que ya haya sido creado por la comunidad. Para más info, llegarse al siguiente enlace:

https://grafana.com/dashboards

Un ejemplo podría ser:

https://grafana.com/dashboards/10283

Esta plantilla ha sido importada y usada en este ejemplo para visualizar todas las métricas colectadas, usando Prometheus Node Exporter:

Imágenes del “dashboard” importado:

A continuación, otro ejemplo de “dahsboard” echo por la comunidad:

Hasta aquí usted cuenta con un sistema de monitoreo integrado con Prometheus y Grafana para visualización de los históricos de las métricas obtenidas por Node Exporter.

(Visited 1 times, 1 visits today)
Franco Diaz Hurtado
Sobre Franco Diaz Hurtado 14 Artículos
Ing. Telecomunicaciones y Electrónica; Administrador de redes en la dirección general de ECASA

4 Comentarios

  1. HOLA…ME DA EL SIGUIENTE ERROR!!!
    ***************************************************
    [email protected]:~# systemctl enable node_exporter.service
    The unit files have no installation config (WantedBy=, RequiredBy=, Also=,
    Alias= settings in the [Install] section, and DefaultInstance= for template
    units). This means they are not meant to be enabled using systemctl.

    Possible reasons for having this kind of units are:
    • A unit may be statically enabled by being symlinked from another unit’s
    .wants/ or .requires/ directory.
    • A unit’s purpose may be to act as a helper for some other unit which has
    a requirement dependency on it.
    • A unit may be started when needed via activation (socket, path, timer,
    D-Bus, udev, scripted systemctl call, …).
    • In case of template units, the unit is meant to be enabled with some
    instance name specified.
    ************************************
    NOTA:
    Sugerencia
    1. tienes repetido la primera parte del tutorial
    2. useradd -M -r -s /bin/false Prometheus en ocasiones con mayúsculas y en otras con minúsculas..

  2. jeansito ese error no me suena. Prueba con service start node_exporter, si no resuelves reinicia el servidor y vuelve a intentar con systemctl. Verifica q asi se llama realmente el. servicio,y nos dices. Luego verrifico lo de los comandos repetidos.SL2

  3. [email protected]:/opt# systemctl enable node_exporter.service

    The unit files have no installation config (WantedBy=, RequiredBy=, Also=,
    Alias= settings in the [Install] section, and DefaultInstance= for template
    units). This means they are not meant to be enabled using systemctl.

    Possible reasons for having this kind of units are:
    • A unit may be statically enabled by being symlinked from another unit’s
    .wants/ or .requires/ directory.
    • A unit’s purpose may be to act as a helper for some other unit which has
    a requirement dependency on it.
    • A unit may be started when needed via activation (socket, path, timer,
    D-Bus, udev, scripted systemctl call, …).
    • In case of template units, the unit is meant to be enabled with some
    instance name specified.
    [email protected]:/opt#

    ————————————————————-
    CREO QUE FALTA ALGO…MIRA LAS PRIMERAS LINEAS….
    LO VOLVI A REALIZAR CON OTRO SERVER Y PASO LO MISMO….MIRA ARRIBA..
    ES CUANDO PONGO ESTA LINEA
    [email protected]:/opt# systemctl enable node_exporter.service

    NOTAS:
    TENGO DEBIAN 10
    prometheus-2.12.0.linux-amd64.tar
    node_exporter-0.18.1.linux-amd64.tar

    • Jeansito, dame un chance que estoy volcado ahora con una serie de artículos sobre Nagsios, prometo echarle un ojo a esto que pones. Lo voy a volver a realizar en la infra que estoy haciendo, pero recuerda que estoy trabajando sobre Debian 9 y esto queme pones puede que sea una incompatibilidad con Debian 10. No tengo Buster, por lo que no puedo corroborarlo en ese S.O. Trata de tener el mismo software de instalación, primero para ir decantando posibles incompatibilidades con nuevas versiones.
      SL2

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.


*