• Lun - Vie : 08:00 - 18:00

Mi Blog

Cómo monitorizar Jenkins con Prometheus y Grafana

Cómo monitorizar Jenkins con Prometheus y Grafana

(Tiempo estimado: 10 - 20 minutos)

Tener controlados y monitorizados los sistemas informáticos es de vital importancia para evitar sustos y poder prevenir con antelación los posibles futuros problemas. Los servidores de Integración Continua como Jenkins, también pueden y deben ser monitorizados por los técnicos para evitar "sustos" y garantizar lo máximo posible un uptime lo mas alto posible.

Seguid leyendo y os enseñaré a monitorizar la salud de vuestro servidor de CI Jenkins...

⬇️ Compra en Amazon el hardware que utilizo ⬇️

🔥 HAZ CLICK AHORA 🔥

 

 

¿QUÉ ES JENKINS?

Jenkins es un servidor de automatización open source escrito en Java. Está basado en el proyecto Hudson y es, dependiendo de la visión, un fork del proyecto o simplemente un cambio de nombre.

Jenkins ayuda en la automatización de parte del proceso de desarrollo de software mediante integración continua y facilita ciertos aspectos de la entrega continua. Admite herramientas de control de versiones como CVSSubversionGitMercurialPerforce y Clearcase y puede ejecutar proyectos basados en Apache Ant y Apache Maven, así como secuencias de comandos de consola y programas por lotes de Windows. Publicado bajo licencia MIT, Jenkins es software libre.

Principales características:

  • Puede orquestar cualquier tipo de proceso.
  • Utilizada para ejecutar tareas manuales, periódicas o automáticas.
  • Cuenta con más de 1400 plugins
  • Puede aumentar su capacidad de cómputo añadiendo nuevos agentes o servidores
  • Fácil de usar
  • Dashboard para visualizar estado de tareas.

 

También es posible utilizar Jenkins para:

  • Permite ejecución de procesos secuenciales
  • Monitoreo de procesos
  • Permite ejecución a horas determinadas
  • Ejecución en base a eventos
  • Ejecución distribuida en varias máquinas
  • Alertas ante problemas en algún proceso

 

Web: https://jenkins.io/ 

 

 

¿QUÉ ES GRAFANA?

Grafana es un software libre basado en licencia de Apache 2.0, 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 como GraphiteInfluxDB y OpenTSDB. Originalmente comenzó como un componente de Kibana y luego se ha ido bifurcando.

Grafana es multiplataforma y también se puede implementar con Docker. Está escrito en lenguaje Go y tiene un HTTP API completo.

Además de administrar cuadros de mando clásicos (adiciones, eliminaciones, favoritos), Grafana ofrece compartir un cuadro de mando actual mediante la creación de un enlace o una instantánea estática del mismo.

Todos los paneles de control y las fuentes de datos están vinculados a una organización, y los usuarios de la aplicación están vinculados a organizaciones a través de roles.

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.

Web: https://grafana.com/

 

 

¿QUÉ ES PROMETHEUS?

Prometheus es un software especializado como sistema de monitorización y alertas escrito en el lenguaje de programación Go. Todos los datos y métricas se almacenan en la base de datos como series temporales (junto al instante de tiempo en el que el valor se ha registrado). También es posible añadir etiquetas de tipo clave-valor junto a estas métricas. Las métricas que almacena Prometheus pueden ser de cualquier tipo, y dependerán de la naturaleza de la aplicación o del sistema que se quiera monitorizar. Por ejemplo, puede ser el uso de CPU o de memoria, número de conexiones, número de peticiones o cantidad de sesiones activas. Todas las mediciones y métricas recogidas ayudarán a diagnosticar errores o problemas de servicio en los sistemas y aplicaciones que se monitorizan.

Web: https://prometheus.io/

 

 

Monitorizar tu servidor de CI Jenkins SI es posible

 

 

1.- ELEMENTOS NECESARIOS PARA ESTE TUTORIAL

  • Un PC con GNU/Linux Debian 10/11 (o similar)
  • Conexión a Internet

 

 

2.- ANTES DE COMENZAR

Debemos tener en cuenta que podemos instalar los 3 componentes utilizando dockers, máquinas virtuales o de forma "nativa". En este ejemplo instalaremos los 3 componentes de forma "nativa". También, debemos tener en cuenta que cada uno de ellos pueden estar en un equipo diferente. Pero debemos tener en cuenta que la comunicación entre ellos debe funcionar. A continuación se muestra la conectividad necesaria en caso de instalarse en equipos independientes:

  • Jenkins - Es el servidor principal y actúa como Máster
  • Prometheus - Necesita conectividad con el servidor de Jenkins
  • Grafana - Necesita conectividad con el servidor de Prometheus

 

 

3.- INSTALACIÓN DE JENKINS

Este tutorial no está centrado en instalar específicamente Jenkins, pero podéis seguir otro de mis tutoriales mucho mas específico y detallado aquí Cómo instalar Jenkins en GNU/Linux Debian, donde explico paso a paso como instalar Jenkins en caso de que lo necesitéis.

A modo de resumen, para instalar Jenkins en un equipo con una distribución basada en paquetes *.deb como pueden ser Debian o Ubuntu, ejecutaremos los siguientes comandos y por el siguiente orden:

El primero paso será descargar y guardar la llave del servidor de Jenkins para garantizar que los paquetes que descargamos son los oficiales:

raul@debian:~$ sudo curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo tee \
/usr/share/keyrings/jenkins-keyring.asc > /dev/null

 

 

 A continuación, crearemos el fichero jenkins.list con los datos del repositorio y utilizado para la descarga de los paquetes del repositorio de Jenkins:

raul@debian:~$ sudo echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
/etc/apt/sources.list.d/jenkins.list > /dev/null

 

  

El último paso será actualizar la lista de paquetes de los repositorios e instalar Jenkins:

raul@debian:~$ sudo apt-get update
raul@debian:~ sudo apt-get install jenkins

 

 

Para acceder al servidor de Jenkins hay que hacerlo desde el navegador con http://$IP:$PUERTO, donde el $PUERTO por defecto toma el valor 8080:

Jenkins, Prometheus y GrafanaAcceso a Jenkins

 

 

4.- INSTALACIÓN DE PROMETHEUS

Lo primero que debemos hacer es descargar el paquete de Prometheus para GNU/Linux de la siguiente url https://prometheus.io/download/ 

Jenkins, Prometheus y GrafanaDescarga de Prometheus

 

 

Luego descomprimir el paquete con el comando (ten en cuenta que la versión pueda cambiar):

raul@debian:~$ tar xzvf prometheus-2.33.4.linux-amd64.tgz

 

 

Ahora crearemos el usuario prometheus, los directorios necesarios y asignaremos los permisos necesarios sobre dichos directorios:

raul@debian:~$ sudo useradd --no-create-home --shell /bin/false prometheus
raul@debian:~$ sudo mkdir /etc/prometheus
raul@debian:~$ sudo mkdir /var/lib/prometheus
raul@debian:~$ sudo chown prometheus:prometheus /etc/prometheus
raul@debian:~$ sudo chown prometheus:prometheus /var/lib/prometheus

 

 

Copiaremos la herramienta prometheus y promtool a su directorio correspondiente y le asignaremos los permisos correctos:

raul@debian:~$ sudo cp prometheus-2.33.4.linux-amd64/prometheus /usr/local/bin/
raul@debian:~$ sudo cp prometheus-2.33.4.linux-amd64/promtool /usr/local/bin/
raul@debian:~$ sudo chown prometheus:prometheus /usr/local/bin/prometheus
raul@debian:~$ sudo chown prometheus:prometheus /usr/local/bin/promtool

 

 

Ahora copiaremos de forma recursiva los directorios de consoles y consoles_libraries y asignaremos sus correspondientes permisos:

raul@debian:~$ sudo cp -r prometheus-2.33.4.linux-amd64/consoles /etc/prometheus
raul@debian:~$ sudo cp -r prometheus-2.33.4.linux-amd64/console_libraries /etc/prometheus
raul@debian:~$ sudo chown -R prometheus:prometheus /etc/prometheus/consoles
raul@debian:~$ sudo chown -R prometheus:prometheus /etc/prometheus/console_libraries

 

 

Para crear un servicio de Prometheus para poder arrancarlo/pararlo como cualquier otro servicio, crearemos el siguiente fichero:

raul@debian:~$ sudo vi /etc/systemd/system/prometheus.service

 

 

En dicho fichero, añadiremos los siguientes líneas:

[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /var/lib/prometheus/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries

[Install]
WantedBy=multi-user.target

 

 

Una vez creado el fichero del servicio, ejecutaremos los siguientes comandos para arrancar el servicio:

raul@debian:~$ sudo systemctl daemon-reload
raul@debian:~$ sudo systemctl start prometheus

 

 

Para comprobar que el servicio está corriendo correctamente, podemos ejecutar el comando:

raul@debian:~$ sudo systemctl status prometheus

 

 

Para comprobar que el servicio está funcionando, desde un navegador introduciremos http://IP:9090/

Jenkins, Prometheus y GrafanaPrometheus con datos de Jenkins

 

 

5.- INSTALACIÓN DE GRAFANA

Para instalar Grafana, ejecutaremos primeramente los siguientes comandos para cumplir los pre-requisitos en el equipo donde queramos instalarlo:

raul@debian:~$ sudo apt-get install -y apt-transport-https
raul@debian:~$ sudo apt-get install -y software-properties-common wget
raul@debian:~$ wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -

 

 

A continuación, añadiremos el repositorio de Grafana para poder instalarlo en el siguiente paso:

raul@debian:~$ echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

 

 

Por último, actualizaremos la lista de paquetes de los repositorios e instalaremos Grafana:

raul@debian:~$ sudo apt-get update
raul@debian:~$ sudo apt-get install grafana

 

 

Para arrancar por primera vez el servicio de Grafana, ejecutaremos lo siguiente:

raul@debian:~$ sudo /bin/systemctl daemon-reload
raul@debian:~$ sudo /bin/systemctl enable grafana-server

 

 

Por último, para arrancar el servidor de Grafana ejecutaremos el siguiente comando:

raul@debian:~$ sudo /bin/systemctl start grafana-server

 

 

Para acceder a Grafana, debemos hacerlo a través del navegador web con http://IP:PUERTO, donde el puerto por defecto es el 3000 y el usuario y la contraseña inicial de Grafana son: admin/admin

Jenkins, Prometheus y GrafanaAcceso a Grafana

 

 

6.- CONFIGURACIÓN DE JENKINS

La configuración de Jenkins es sumamente sencilla ya que solamente deberemos instalar el plugin de Prometheus y configurarlo con unas opciones básicas para comenzar a funcionar. Para instalar el plugin lo haremos desde el propio instalador de plugins de Jenkins o descargando el paquete e instalándolo a través de la opción de Upload que ofrece jenkins https://plugins.jenkins.io/prometheus

La configuración es muy sencilla y con dejar los parámetros por defecto y marcar todas las opciones que queremos monitorizar es suficiente, al menos de momento:

Jenkins, Prometheus y Grafana

Plugin de Prometheus en Jenkins

 

 

7.- CONFIGURACIÓN DE PROMETHEUS

Para configurar Prometheus es tan sencillo como editar el fichero de configuración de Prometheus con el siguiente comando:

raul@debian:~$ sudo vi /etc/prometheus/prometheus.yml

 

 

En este ejemplo tanto Jenkins como Prometheus están instalados en la misma máquina, por tanto el fichero de configuración será el siguiente:

global:
scrape_interval: 10s

scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']

 

 

Una vez editado, ajustaremos los permisos del fichero de configuración con el comando:

raul@debian:~$ sudo chown prometheus:prometheus /etc/prometheus/prometheus.yml

 

  

Finalizados los pasos anteriores, ejecutaremos el siguiente comando para arrancar el servicio:

raul@debian:~$ sudo systemctl start prometheus

 

 

Para terminar de comprobar que Prometheus está funcionando bien, desde un navegador, abriremos la url http://IP:9090/graph y se deberán poder ver en la lista de "Expression" las métricas de Jenkins. Si no salen, deberemos revisar la configuración ya que la conexión entre Prometheus y Jenkins está mal:

Jenkins, Prometheus y Grafana Web de Prometheus

 

 

8.- CONFIGURACIÓN DE GRAFANA

Grafana es solamente un visor de datos "bonito" y los datos proceden de fuentes externas. Para añadir una fuente externa, iremos desde el menú izquierdo a "Data Sources" y seleccionaremos Prometheus. Introduciremos los datos del servidor donde está Prometheus corriendo y pulsaremos abajo del todo un botón que dice TEST. Si todo está correcto, se mostrará un mensaje de OK:

Jenkins, Prometheus y GrafanaAñadir Data Source de prometheus

 

 

Ahora probaremos a añadir una gráfica cualquiera en cualquier Dashboard y seleccionando el Data Source de Prometheus y escribiendo "jenkins" se deberán mostrar una serie de opciones para monitorizar, tal y como se ve en la imagen siguiente:

Jenkins, Prometheus y GrafanaAñadiendo gráfica con datos de origen en Prometheus

 

 

Se pueden conseguir Dashboard tan llamativos como el siguiente (y mucho mejores):

Jenkins, Prometheus y GrafanaPanel de Dashboard de ejemplo

 

 

ENJOY!


⬇️ Compra en Amazon el hardware que utilizo ⬇️

🔥 HAZ CLICK AHORA 🔥
Raúl Prieto Fernández

Sitio Web: raulprietofernandez.net

Si quieres ir rápido, ve solo. Si quieres llegar lejos, ve acompañado.

No tienes permisos para escribir comentarios. Debes autenticarte con Facebook, Linkedin, Twitter o Google.

VIP RPF

Apúntate Gratis

Entra en la Comunidad VIP y consigue acceso a las descargas en PDF, Trucos y Videotutoriales ocultos y mucho más.... ¡Muy Pronto!
  • Lun - Vie : 08:00 - 18:00