Instalando Centreon en Docker sobre una Raspberry PI 3

En esta ocasión vamos a instalar Centreon en un contenedor de Docker el cual instalamos hace poco. En mi Raspberry actualmente tengo instalado Pi-hole y esta funcionando como servidor DHCP a la vez que DNS. Sin Docker, la instalación de Centreon se me presentaba bastante difícil, y veía bastante imposible que conviviera junto con Pi-hole.

Para instalar Centreon en Docker he hecho dos cosas:

  1. Crear un Docker file para la configuración e instalación del contenedor.
  2. Hacer un fork de un script de instalación del usuario Kermith72 concretamente de su repositorio: auto_install con algunas modificaciones necesarias para poder instalar Centreon en Docker.

El docker file que he creado es el siguiente:

FROM debian:latest

ENV container docker
ENV LC_ALL C
ENV DEBIAN_FRONTEND noninteractive

RUN echo "deb http://ftp.es.debian.org/debian/ buster main contrib non-free" >> /etc/apt/sources.list
RUN apt-get update \
    && apt-get install -y systemd git gpg wget curl \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

RUN rm -f /lib/systemd/system/multi-user.target.wants/* \
    /etc/systemd/system/*.wants/* \
    /lib/systemd/system/local-fs.target.wants/* \
    /lib/systemd/system/sockets.target.wants/*udev* \
    /lib/systemd/system/sockets.target.wants/*initctl* \
    /lib/systemd/system/sysinit.target.wants/systemd-tmpfiles-setup* \
    /lib/systemd/system/systemd-update-utmp*

RUN cd /root && wget https://raw.githubusercontent.com/deividgdt/dockerpicentreon/master/centreon_central.sh
RUN chmod +x /root/centreon_central.sh

VOLUME [ "/sys/fs/cgroup" ]

CMD ["/lib/systemd/systemd"]

Como siempre, ya sabéis que lo podréis encontrar en mi Github actualizado: Dockerfile

Para el script de instalación de Centreon he tenido que realizar algunas modificaciones, ya que he usado la versión Raspbian de Kermith72 sobre un contenedor base de Debian:buster. El script de instalación os lo dejo por aquí también: centreon_central.sh

INSTALACIÓN

Bien, a lo que vinimos, crearé un directorio llamador Docker en /root y dentro el fichero Dockerfile con el contenido que os he dejado arriba.

mkdir -p /root/docker
cd /root/docker
wget https://raw.githubusercontent.com/deividgdt/dockerpicentreon/master/Dockerfile

A continuación construimos la imagen:

docker build -t centreon:0.0 .
Sending build context to Docker daemon   2.56kB
Step 1/11 : FROM debian:latest
latest: Pulling from library/debian
3182cf45068c: Pull complete
Digest: sha256:a63d0b2ecbd723da612abf0a8bdb594ee78f18f691d7dc652ac305a490c9b71a
Status: Downloaded newer image for debian:latest
 ---> 756aa643c9cd
Step 2/11 : ENV container docker
 ---> Running in a0cf5171a92e
Removing intermediate container a0cf5171a92e
------------------------------[SALIDA OMITIDA]--------------------------

Comprobamos que nuestra imagen esta correctamente creada:

docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centreon            0.0                 e940169369c9        52 minutes ago      241MB
debian              latest              756aa643c9cd        10 days ago         92.8MB

Una vez construida la imagen base, vamos a levantar el contenedor con el volumen /sys/fs/cgroup que nos proporciona acceso a los control groups. Ademas le pasamos el parámetro –privileged para que el contenedor pueda hacer uso de las funciones del Kernel, en nuestro caso para que podamos usar systemd.

docker run -d --name centreon --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro centreon:0.0

Si comprobamos nuestro contenedor debería estar arrancado con el comando “/lib/systemd/systemd”.

Ahora levantamos una shell de bash en modo interactivo, ejecutando:

docker exec -it centreon bash

Ahora ejecutaremos el script central_centreon.sh que estará dentro del contenedor en /root/:

/root/centreon_central.sh

El script ejecutará un total de 12 pasos. Todos ellos deberían de finalizar correctamente para que la instalación sea correcta. El final del script debería verse como a continuación:

Una vez finalizado la ejecución salimos del contenedor y le hacemos un commit para convertirlo en una nueva imagen. Este proceso puede tardar bastante, en mi caso tomó unos: 12 minutos.

Para comitar usaremos el CONTAINER_ID y el TAG:

docker commit eaf8c81f0380 centreon:1.0

Recordemos que tenemos el contenedor centreon:0.0 esta corriendo, así que antes de nada, debemos detenerlo:

docker stop centreon

Habiendo comitado y detenido el contenedor Centreon, procederemos a levantar la nueva imagen con los siguientes parámetros:

  • -d –> lanzamos el contenedor en modo demonio para que se quede en segundo plano.
  • –name –> Nombre del contenedor.
  • –privileged –> para que el contenedor pueda hacer uso de las funciones del Kernel. Necesario para usar systemd.
  • -p 8080:80 –> Redirigimos el puerto 8080 de nuestra Rasp al 80 del contenedor, que es donde corre Centreon.
  • -p 3306:3360 –> Redirigimos el puerto 3306 de nuestra Rasp al 3306 del contenedor, que es donde esta escuchando MySQL
  • -v /sys/fs/cgroup:/sys/fs/cgroup:ro –> Montamos este volumen que nos proporciona acceso a los control groups. Necesario para usar systemd.
docker run -d --name centreon1 --privileged -p 8080:80 -p 3306:3306 -v /sys/fs/cgroup:/sys/fs/cgroup:ro centreon:1.0

Si queremos acceder al contenedor por SSH debemos redirigir algun puerto externo al 22 del Contenedor, así que podriamos ejecutar el contenedor de la siguiente forma:

docker run -d --name centreon1 --privileged -p 8080:80 -p 3306:3306 -p 10022:22 -v /sys/fs/cgroup:/sys/fs/cgroup:ro centreon:1.0
  • -p 10022:22 -> Redirigimos el puerto 10022 al 22 del contenedor

Con esto ya tendríamos nuestro contenedor corriendo Centreon. Ahora, si nos vamos a la URL: http://raspberry_ip:8080/centreon podremos configurar Centreon Central:

La configuración es realmente sencilla y no hay que tocar nada, a no ser de que queráis personalizar algún directorio. Aparte de esto os pedirá:

  • Contraseña del usuario admin de Centreon
  • Contraseña del usuario root de MySQL
  • Contraseña del usuario centreon propietario de la bbdd centreon_storage

Una vez finalizada la configuración deberíamos ver lo siguiente:

Y finalmente el mensaje que nos confirma que Centreon ha sido instalado correctamente:

Tras terminar esta instalación he comprobado el consumo de memoria RAM, CPU, y espacio en SD, y la verdad que es casi imperceptible:

Esta configuración usa unos 3GB de espacio en disco, unos 200MB de RAM, y el load average ha subido un poco pero nada para llevarse las manos a la cabeza ni mucho menos.

RESUMEN PARA LOS QUE LLEVAN PRISA

Os dejo un resumen de todas las ordenes ejecutadas, por si lleváis prisa y no sois de letras.

mkdir -p /root/docker
cd /root/docker
wget https://raw.githubusercontent.com/deividgdt/dockerpicentreon/master/Dockerfile
docker build -t centreon:0.0 .
docker run -d --name centreon --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro centreon:0.0
docker exec -it centreon bash
 /root/centreon_central.sh
 exit
docker commit $ID_CENTREON00 centreon:1.0
docker stop centreon
docker run -d --name centreon1 --privileged -p 8080:80 -p 3306:3306 -p 10022:22 -v /sys/fs/cgroup:/sys/fs/cgroup:ro centreon:1.0
Ir a http://$RASP_IPADDRESS:8080/centreon y configurar Centreon.

Recordad que si tenéis algún problema con la instalación podéis ponerlo en los comentarios y os echaré una mano. Ahora a monitorizar todos vuestros dispositivos o lo que queráis! 😉

TROUBLESHOOTING

Si tienes algún problema al intentar acceder a la web, lo mas probable es que php7.3-fpm no este creando el directorio para almacenar el socket. Para solucionarlo sigue los pasos a continuación:

Primero asegúrate que este es el error que tienes echándole un vistazo al estado de php7.3-fpm :

root@cc8949b0b466:/run# systemctl status php7.3-fpm
* php7.3-fpm.service - The PHP 7.3 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php7.3-fpm.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sat 2020-08-15 19:33:54 UTC; 1min 18s ago
     Docs: man:php-fpm7.3(8)
  Process: 944 ExecStart=/usr/sbin/php-fpm7.3 --nodaemonize --fpm-config /etc/php/7.3/fpm/php-fpm.conf (code=exited, status=78)
 Main PID: 944 (code=exited, status=78)

Aug 15 19:33:54 cc8949b0b466 systemd[1]: Starting The PHP 7.3 FastCGI Process Manager...
Aug 15 19:33:54 cc8949b0b466 php-fpm7.3[944]: [15-Aug-2020 19:33:54] ERROR: unable to bind listening socket for address '/run/php/php7.3-fpm.sock': No such file or directory (2)

Si este es tu problema, simplemente crea el directorio y reinicia el servicio php7.3-fpm:

root@cc8949b0b466:/run# mkdir -p /run/php && systemctl restart php7.3-fpm

4 comentarios sobre “Instalando Centreon en Docker sobre una Raspberry PI 3

  1. Muchas gracias por el articulo, hacia tiempo que buscaba el docker de Centreon para instalarlo en la raspberry y así poder trastear con él.

    He seguido todos los pasos sin errores pero no logro entrar en la página de configuración
    el error es:
    Service Unavailable
    The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.
    Apache/2.4.38 (Debian) Server at 192.168.1.25 Port 8080

    En el log de Apache no logro ver nada que me ayude.
    Tengo otro contenedor en marcha que también escucha por el puerto 80 (8089:80), entiendo que no debería afectar. Si lo paro en Centreon sigue igual.

    Se te ocurre que puede pasar?

    1. Hola, Salvador.

      De nada, un placer.

      Creo que sé que puede ser. En la versión en ingles de esta misma entrada (https://deividsdocs.wordpress.com/2020/04/18/installing-centreon-in-docker-on-a-raspberry-pi-3/) escribí un comentario, que olvide poner por aqui:

      “”
      The problem is that php7.3-fpm is not working, for some reason it’s no creating the directory /var/run/php to store the unix socket. So, you need to follow the next steps in order to fix it:
      $ docker exec -it centreon1 bash
      centreon # mkdir -p /var/run/php
      centreon # systemctl restart php7.3-fpm

      Now you can go to http://RASPBERRYPI_IP:8080/centreon
      “”
      Básicamente haz los pasos que comento ahí y mira a ver si puede ser eso. Si no, me comentas y lo miramos.

      Por cierto, actualizo la entrada en español con este pequeña solución.

Responder a Salvador Cancelar respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s