Monitorización de servidores con Observium – Parte III

por | 25 noviembre, 2019

En esta tercena entrega vamos a ver cómo configurar el reenvío de logs a nuestro servidor «Observium«, para poder visualizarlos directamente en la interfaz web y tener un control más centralizado de logs de toda la plataforma.

Instalando los paquetes necesarios

Lo primero que tenemos que hacer es instalar el servicio «rsyslog» en todos los clientes, inclusive le propio servidor, del cual queremos también visualizar logs en la plataforma, además de ser el centralizados de logs.

Para ello ejecutamos:

# yum -y install rsyslog

Configurar el reenvío de logs en los clientes

Para configurar el reenvío de logs al centralizador, tenemos que tener en cuenta los siguientes puntos:

  1. Que exista comunicación entre los clientes y el servidor por el puerto UDP que vamos a dar de alta.
  2. Que los clientes puedan resolver el nombre del servidor (aunque podríamos poner la IPv4, queda mejor así)

Tenemos que editar los ficheros «/etc/rsyslog.conf» en cada máquina y descomentar la línea dónde configuramos el forwarding de logs al servidor destino.

Para ello, la configuración debe ser algo similar a esto:

# rsyslog configuration file

# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html

#### MODULES ####

# The imjournal module bellow is now used as a message source instead of imuxsock.
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
$ModLoad imklog # reads kernel messages (the same are read from journald)
#$ModLoad immark  # provides --MARK-- message capability

# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514

# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514


#### GLOBAL DIRECTIVES ####

# Where to place auxiliary files
$WorkDirectory /var/lib/rsyslog

# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

# File syncing capability is disabled by default. This feature is usually not required,
# not useful and an extreme performance hit
#$ActionFileEnableSync on

# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf

# Turn off message reception via local log socket;
# local messages are retrieved through imjournal now.
$OmitLocalLogging on

# File to store the position in the journal
$IMJournalStateFile imjournal.state


#### RULES ####

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog

# Log cron stuff
cron.*                                                  /var/log/cron

# Everybody gets emergency messages
*.emerg                                                 :omusrmsg:*

# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log

# ### begin forwarding rule ###
# The statement between the begin ... end define a SINGLE forwarding
# rule. They belong together, do NOT split them. If you create multiple
# forwarding rules, duplicate the whole block!
# Remote Logging (we use TCP for reliable delivery)
#
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
#$ActionQueueFileName fwdRule1 # unique name prefix for spool files
#$ActionQueueMaxDiskSpace 1g   # 1gb space limit (use as much as possible)
#$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
#$ActionQueueType LinkedList   # run asynchronously
#$ActionResumeRetryCount -1    # infinite retries if host is down
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
*.* @observiumserver:514
# ### end of the forwarding rule ###

Si nos fijamos, la línea que nos intersa es:

*.* @observiumserver:514

En mi caso, «observiumserver» es mi centralizador de logs y a la par, mi servidor de monitorización. También, en mi caso, el puerto dónde escuchará las peticiones mi servidor será el 514 (UDP).

Para finalizar este paso, lo último que tenemos que hacer es habilitar el servicio rsyslog e iniciarlo, para ello ejecutamos:

# systemctl enable rsyslog && systemctl start rsyslog

Configuración de servicio rsyslog en el servidor

Una vez hemos modificado el fichero /etc/rsyslog.conf en todas las máquinas, el siguiente paso es poner el servicio rsyslog a correr en el servidor, con el puerto y protocolo indicado en la configuración de los clientes.

Para ello, bajo el directorio /etc/rsyslog.d, crearemos (cómo root), el fichero «30-observium.conf» con el siguiente contenido (es el mismo que el de la fuente oficial –> https://docs.observium.org/syslog/ ):

#---------------------------------------------------------
# send remote logs to observium

# provides UDP syslog reception
module(load="imudp")

input(type="imudp"
      port="514"
      ruleset="observium")

## provides TCP syslog reception (uncomment if required)
#module(load="imptcp")
#
#input(type="imptcp"
#      port="514"
#      ruleset="observium")

module(load="omprog")

# observium syslog template
template(name="observium"
         type="string"
         string="%fromhost%||%syslogfacility%||%syslogpriority%||%syslogseverity%||%syslogtag%||%$year%-%$month%-%$day% %timereported:8:25%||%msg%||%programname%\n")

# observium RuleSets
ruleset(name="observium") {
    action(type="omprog"
           binary="/opt/observium/syslog.php"
           template="observium")
    stop
}

#---------------------------------------------------------

Ahora, guardamos el fichero y reiniciamos el servicio

# systemctl restart rsyslog

Para visualizar posibles errores de sintaxis:

# rsyslogd -v

Para ver si se ha reiniciado bien:

# systemctl -l status rsyslog

Para finalizar la configuración, tenemos que habilitar «syslog» a nivel de observium, para ello, editamos el fichero «/opt/observium/config.php» y añadiremos la siguiente línea al final del mismo:

$config['enable_syslog'] = 1; // Enable Syslog

Guardamos el fichero y reiniciamos el servicio de apache:

# systemctl restart httpd

Paso final. Comprobar la recepción de logs y su correcta visualización.

Lo primero que vamos a hacer en este último paso es abrir la interfaz web de observium y dirigirnos a la pantalla de «Syslog«, tal y cómo se muestra en la imagen.

Una vez tengamos esta venta abierta, desde los clientes, vamos a lanzar una serie de mensajes de pruebas para ver que llegan al panel web y los podemos visualizar.

Desde uno de los clientes (o desde todos), ejecutamos el siguiente comando varias veces:

# logger -p local0.info "Test local logging: message1"

Ahora, en la interfaz web (refrescamos la página por si acaso), veremos algo así:

Cómo véis, yo he lanzado varios comandos desde todos los clientes y el resultado es satisfactorio.

Para probar algo «más serio«, podéis probar a loguearos en un servidor por ssh de manera errónea a propósito. O, por ejemplo, reiniciar algún servicio. El resultado será similar a este:

Nada más, nos vemos en la siguiente entrada.

Un saludo Sysadmins! 🙂

About: Miguel Carretas Perulero

Miguel Carretas Perulero ha escrito 78 artículos en este blog.

Deja un comentario