Instalación y integración de Grafana con NAGIOS

En esta entrada veremos como instalar e integrar grafana con nagios, para ello emplearemos influxdb, nagflux, histou y grafana.

Instalación de influxdb

Agregamos los repositorios de la distribución correspondiente: 


cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
[influxdb]
name = InfluxDB Repository - RHEL \$releasever
baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
EOF

Instalamos y lo configuramos para que arranque al inicio

sudo yum install influxdb
sudo systemctl enable influxdb
sudo systemctl start influxdb 

Instalación de Nagflux

Instalamos las dependencias necesarios

yum -y install go git

Descargamos e instalamos Nagflux

export GOPATH=$HOME/gorepo
mkdir $GOPATH
go get -v -u github.com/griesbacher/nagflux
go build github.com/griesbacher/nagflux 
mkdir -p /opt/nagflux
cp $GOPATH/bin/nagflux /opt/nagflux/
mkdir -p /usr/local/nagios/var/spool/nagfluxperfdata
chown nagios:nagios /usr/local/nagios/var/spool/nagfluxperfdata 

Configuramos nagflux, para ello debemos agregar en /opt/nagflux/config.gcfg  el siguiente contenido:

[main]
    NagiosSpoolfileFolder = "/usr/local/nagios/var/spool/nagfluxperfdata"
    NagiosSpoolfileWorker = 1
    InfluxWorker = 2
    MaxInfluxWorker = 5
    DumpFile = "nagflux.dump"
    NagfluxSpoolfileFolder = "/usr/local/nagios/var/nagflux"
    FieldSeparator = "&"
    BufferSize = 10000
    FileBufferSize = 65536
    DefaultTarget = "all"

[Log]
    LogFile = ""
    MinSeverity = "INFO"

[InfluxDBGlobal]
    CreateDatabaseIfNotExists = true
    NastyString = ""
    NastyStringToReplace = ""
    HostcheckAlias = "hostcheck"

[InfluxDB "nagflux"]
    Enabled = true
    Version = 1.0
    Address = "http://127.0.0.1:8086"
    Arguments = "precision=ms&u=root&p=root&db=nagflux"
    StopPullingDataIfDown = true

[InfluxDB "fast"]
    Enabled = false
    Version = 1.0
    Address = "http://127.0.0.1:8086"
    Arguments = "precision=ms&u=root&p=root&db=fast"
    StopPullingDataIfDown = false

levantamos el servicio y lo configuramos para que arranque al inicio

cp $GOPATH/src/github.com/griesbacher/nagflux/nagflux.service /usr/lib/systemd/system/
chmod +x /usr/lib/systemd/system/nagflux.service
systemctl daemon-reload
systemctl enable nagflux.service
systemctl start nagflux.service

Instalación de Grafana

Agregamos el repositorio correspondiente

cat <<EOF | sudo tee /etc/yum.repos.d/grafana.repo
[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
EOF

Instalamos grafana

yum -y install grafana

levantamos el servicio y lo configuramos para que arranque al inicio

systemctl enable grafana-server.service
systemctl start grafana-server.service

Habilitamos el puerto de grafana en el firewall

firewall-cmd --zone=public --add-port=3000/tcp
firewall-cmd --zone=public --add-port=3000/tcp --permanent

Instalar Histou

Descargamos y descomprimimos los archivos de configuración de Histou

cd /tmp
wget -O histou.tar.gz https://github.com/Griesbacher/histou/archive/v0.4.3.tar.gz
mkdir -p /var/www/html/histou
cd /var/www/html/histou
tar xzf /tmp/histou.tar.gz --strip-components 1
cp histou.ini.example histou.ini
cp histou.js /usr/share/grafana/public/dashboards/

Configuramos Histou, para ello debemos modificar el localhost por el FQDN del servidor

sed -i 's/localhost/NOMBRE-SERVIDOR/g' /usr/share/grafana/public/dashboards/histou.js 

Configuración NAGIOS

Debemos agregar la siguiente configuración en  /usr/local/nagios/etc/nagios.cfg

host_perfdata_file=/usr/local/nagios/var/host-perfdata
host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$
host_perfdata_file_mode=a
host_perfdata_file_processing_interval=15
host_perfdata_file_processing_command=process-host-perfdata-file-nagflux

service_perfdata_file=/usr/local/nagios/var/service-perfdata
service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$
service_perfdata_file_mode=a
service_perfdata_file_processing_interval=15
service_perfdata_file_processing_command=process-service-perfdata-file-nagflux

También debemos agregar los siguientes comandos en /usr/local/nagios/etc/objects/commands.cfg 

define command {
    command_name    process-host-perfdata-file-nagflux
    command_line    /bin/mv /usr/local/nagios/var/host-perfdata /usr/local/nagios/var/spool/nagfluxperfdata/$TIMET$.perfdata.host
    }

define command {
    command_name    process-service-perfdata-file-nagflux
    command_line    /bin/mv /usr/local/nagios/var/service-perfdata /usr/local/nagios/var/spool/nagfluxperfdata/$TIMET$.perfdata.service
    }

Una vez realizada la configuración reiniciamos el servicio de nagios

systemctl restart nagios.service

Comprobamos el perfecto funcionamiento de nagflux

curl -G "http://localhost:8086/query?db=nagflux&pretty=true" --data-urlencode "q=show series"

Configuración Grafana

Accedemos a nuestro servidor grafana por el puerto 3000 (http://IP_ADDRESS:3000/login  ) y las credenciales admin:admin, la primera vez que nos conectamos nos pedirá que cambiemos la contraseña.

Una vez conectados presionamos sobre  Add data source 

image.png

Seleccionamos la opción de InfluxDB

image.png

Configuramos el acceso a la base de datos de la siguiente forma:

image.png

Una vez realizado toda la configuración solo nos queda definir los chequeos dentro de nuestro nagios

Chequeo para hosts

define host {
     use                           redorbita-host
     host_name                     redorbitaweb01
     alias                         redorbitaweb01
     address                       192.168.1.111
     action_url                    http://192.168.1.112:3000/dashboard/script/histou.js?host=$HOSTNAME$

 }

Chequeo para servicios

define service {
        use                             redorbita-serv
        host_name                       redorbitaweb01
        service_description             Port 22/tcp 
        check_command                   check_tcp!22
        action_url                      http://192.168.1.112:3000/dashboard/script/histou.js?host=$HOSTNAME$&service=$SERVICEDESC$


}

Una vez configurado todo nos deberían aparecer el LINK con las gráficas y se presionamos sobre el servicio debería aparecer en la parte inferior completamente integrada la gráfica de dicho servicio.

Deja un comentario

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

*