Monitorización de Nginx, Apache y MongoDB con Munin en Debian 9 Stretch

miércoles, 06 de junio de 2018


Munin es un conocido sistema de monitorización de servidores. En este caso vamos a ver como instalarlo en un servidor Debian 9 (Stretch) y como configurarlo para que monitorice el conocido servidor web Nginx y la base de datos no-sql MongoDB.


Instalación Munin en Debian Stretch

Primero vamos a instalar Munin, ya que asumimos que Nginx o Apache ya están instalados en el servidor. Para instalar Munin ejecutamos, siempre como usuario Root, los comandos:

# apt update && apt -y upgrade
# apt -y install munin munin-common munin-node munin-plugins-core munin-plugins-extra

Y editamos el siguiente archivo como se ve a continuación:

$ cat /etc/munin/munin.conf
dbdir	/var/lib/munin
htmldir /var/cache/munin/www
logdir /var/log/munin
rundir  /var/run/munin

tmpldir	/etc/munin/templates

staticdir /etc/munin/static

includedir /etc/munin/munin-conf.d

[localhost.localdomain]
    address 127.0.0.1
    use_node_name yes

Si queremos que que los gráficos de rendmeinto no sean públicos, podemos agragar algún método de autenticación de Apache, por ejemplo:

$ cat /etc/munin/apache24.conf
Alias /munin /var/cache/munin/www

	AuthUserFile /etc/munin/.htpasswd
	AuthName "Munin"
	AuthType Basic
	Require valid-user
	Options None


ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph

	AuthUserFile /etc/munin/.htpasswd
	AuthName "Munin"
	AuthType Basic
	Require valid-user
	
		SetHandler fcgid-script
	
	
		SetHandler cgi-script
	

* En estos ejemplos de configuración el demonio y el cliente están instalados en la misma máquina, pero Munin puede ser un servicio independiente recogiendo datos de toda una red de servidores, en los que solo tendríamos que instalar el cliente (munin-node).

Munin dispone de un comando para instalar automáticamente los plugins que soporta nuestro sistema. Si queremos listar los plugins que tenemos disponibles, podemos verlos en el directorio /usr/share/munin/plugins/. Si instalamos un plugin nuevo, que no está en los repositorios oficiales de Debian, debería ir en este directorio.

# munin-node-configure
apache_accesses            | no   |
apache_processes           | no   |
apache_volume              | no   |
cpu                        | yes  |
cpuspeed                   | yes  |
df                         | yes  |
df_inode                   | yes  |
diskstats                  | yes  |
entropy                    | yes  |
fw_conntrack               | yes  |
fw_forwarded_local         | yes  |
fw_packets                 | yes  |
http_loadtime              | yes  |
if_                        | yes  | ens3
if_err_                    | yes  | ens3
interrupts                 | yes  |
irqstats                   | yes  |
load                       | yes  |
meminfo                    | yes  |
memory                     | yes  |
munin_stats                | yes  |
netstat                    | yes  |
nginx_request              | no   |
nginx_status               | no   |
open_files                 | yes  |
open_inodes                | yes  |
proc_pri                   | yes  |
processes                  | yes  |
sendmail_mailqueue         | yes  |
sendmail_mailstats         | yes  |
sendmail_mailtraffic       | yes  |
swap                       | yes  |
threads                    | yes  |
uptime                     | yes  |
users                      | yes  |
vmstat                     | yes  |

Este comando generará los links correspondientes en /etc/munin/plugins/, lo que activará cada uno de estos plugins. Como vemos Apache y Nginx no aparecen como activados. Esto se debe a que para que Munin tenga acceso a la información de estos dos servicios, tenemos que realizar unos sencillos pasos que indicaremos en los siguientes puntos.

Si queremos solo información sobre los plugins que podemos instalar y cuales no, con más información sobre los mismos.

# munin-node-configure --suggest
Plugin                     | Used | Suggestions
------                     | ---- | -----------
acpi                       | no   | no [cannot read /sys/class/thermal/thermal_zone*/temp]
apache_accesses            | yes  | no
apache_processes           | yes  | no
apache_volume              | yes  | no
apc_envunit_               | no   | no [no units to monitor]
bonding_err_               | no   | no [No /proc/net/bonding]
courier_mta_mailqueue      | no   | no [spooldir not found]
courier_mta_mailstats      | no   | no [could not find executable]
courier_mta_mailvolume     | no   | no [could not find executable]
cps_                       | no   | no
cpu                        | yes  | yes
cpuspeed                   | yes  | no [missing /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state]
cupsys_pages               | no   | no [could not find logdir]
df                         | yes  | yes
df_inode                   | yes  | yes
diskstats                  | yes  | yes
entropy                    | yes  | yes
exim_mailqueue             | no   | no [no exiqgrep]
exim_mailstats             | no   | no [logdir does not exist]
hddtemp_smartctl           | no   | no
http_loadtime              | yes  | yes
if_                        | yes  | yes (ens3)
if_err_                    | yes  | yes (ens3)
interrupts                 | yes  | yes
ip_                        | no   | yes
ipmi_                      | no   | no [missing ipmitool command]
irqstats                   | yes  | yes
jmx_                       | no   | no [connection to 127.0.0.1:5400 failed]
load                       | yes  | yes
lpstat                     | no   | no [lpstat not found]
memory                     | yes  | yes
munin_stats                | yes  | yes
mysql_                     | no   | no
netstat                    | yes  | yes
nfs4_client                | no   | no [no /proc/net/rpc/nfs]
nfs_client                 | no   | no
nfsd                       | no   | no [no /proc/net/rpc/nfsd]
nfsd4                      | no   | no [no /proc/net/rpc/nfsd]
nginx_status               | yes  | yes
ntp_                       | no   | no
ntp_kernel_err             | no   | no
ntp_kernel_pll_freq        | no   | no
ntp_kernel_pll_off         | no   | no
ntp_offset                 | no   | no [no ntpq program]
ntp_states                 | no   | no
nvidia_                    | no   | no [no nvclock executable at /usr/bin/nvclock, please configure]
open_files                 | yes  | yes
open_inodes                | yes  | yes
pgbouncer_connections      | no   | no [DBD::Pg not found, and cannot do psql yet]
pgbouncer_requests         | no   | no [DBD::Pg not found, and cannot do psql yet]
proc                       | no   | no
proc_pri                   | yes  | yes
processes                  | yes  | yes
ps_                        | no   | no
qmailqstat                 | no   | no
selinux_avcstat            | no   | no [missing /selinux/avc/cache_stats file]
sendmail_mailqueue         | yes  | yes
sendmail_mailstats         | yes  | yes
sendmail_mailtraffic       | yes  | yes
slapd_                     | no   | no [Net::LDAP not found]
slapd_bdb_cache_           | no   | no [Can't execute db_stat file '/usr/bin/db4.6_stat']
slony_lag_                 | no   | no [DBD::Pg not found, and cannot do psql yet]
smart_                     | no   | no [smartmontools not found]
squeezebox_                | no   | no [no connection on localhost port 9090]
squid_cache                | no   | no [could not connect: Connection refused]
squid_objectsize           | no   | no [could not connect: Connection refused]
squid_requests             | no   | no [could not connect: Connection refused]
squid_traffic              | no   | no [could not connect: Connection refused]
swap                       | yes  | yes
threads                    | yes  | yes
tomcat_                    | no   | no
uptime                     | yes  | yes
users                      | yes  | yes
varnish_                   | no   | no
vmstat                     | yes  | yes
# The following plugins caused errors:
# ntp_:
# 	Non-zero exit during autoconf (2)
# ntp_states:
# 	Non-zero exit during autoconf (2)
# postfix_mailqueue:
# 	Non-zero exit during autoconf (255)

Para que los cambios en la configuración del servidor de Munin, del Nodo Munin y de los plugins instalados, ejecutamos:

# service munin-node restart

Configuración de la monitorización de Apache con Munin

Apache en Debian 9 viene con el plugin de monitorización, para activarlo:

# a2enmod status
# service apache2 reload

La configuración por defecto de este módulo solo permite conexiones locales a este servicio.

$ cat mods-available/status.conf

	# Allow server status reports generated by mod_status,
	# with the URL of http://servername/server-status
	# Uncomment and change the "192.0.2.0/24" to allow access from other hosts.

	
		SetHandler server-status
		Require local
		#Require ip 192.0.2.0/24
	

	# Keep track of extended status information for each request
	ExtendedStatus On

	# Determine if mod_status displays the first 63 characters of a request or
	# the last 63, assuming the request itself is greater than 63 chars.
	# Default: Off
	#SeeRequestTail On

	
		# Show Proxy LoadBalancer status in mod_status
		ProxyStatus On
	


# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Ahora si hacemos:

$ lynx http://127.0.0.1/server-status

Deberíamos ver algo como esto:

Apache Server Status Example

Ahora que el servidor web Apache ya nos muestra información de estado, vamos a activar los plugins correstpondientes de Munin:

# ln -s /usr/share/munin/plugins/apache_accesses /etc/munin/plugins/apache_accesses
# ln -s /usr/share/munin/plugins/apache_processes /etc/munin/plugins/apache_processes
# ln -s /usr/share/munin/plugins/apache_volume /etc/munin/plugins/apache_volume
# service munin-node restart

Para testear alguno de estos plugins podemos ver el resultado de la ejecución del mismo con el comando:

# munin-run apache_processes

Si este comando no nos devuelve un error, probablemente es que neceitamos instalar las librerías de Perl que usa este plugin.

# apt install libwww-perl
# service munin-node restart

Al cabo de 5 minutos, para que se refresque el gráfico, ya podremos ver algo parecido a esto:

Apache Example Graph Munin

Configuración de la monitorización de Nginx con Munin

© Copyright 2014-2018 Iteración 42