GNU/Linux >> Tutoriales Linux >  >> Cent OS

Monitoreo de servidores con Munin y Monit en CentOS 7

En este artículo, describiré cómo puede monitorear su servidor CentOS 7 con Munin y Monit. Munin produce pequeños gráficos ingeniosos sobre casi todos los aspectos de su servidor (promedio de carga, uso de memoria, uso de CPU, rendimiento de MySQL, tráfico eth0, etc.) sin mucha configuración, mientras que Monit verifica la disponibilidad de servicios como Apache, MySQL, Postfix y toma la acción adecuada, como un reinicio, si encuentra que un servicio no se comporta como se esperaba. La combinación de los dos le brinda un monitoreo completo:gráficos que le permiten reconocer problemas actuales o futuros (como "Necesitamos un servidor más grande pronto, nuestro promedio de carga está aumentando rápidamente") y un perro guardián que garantiza la disponibilidad de los servicios monitoreados. .

Aunque Munin le permite monitorear más de un servidor, aquí solo discutiremos el monitoreo del sistema donde está instalado.

Este tutorial se escribió para CentOS 7, pero la configuración también debería aplicarse a otras distribuciones como RHEL y Scientific Linux.

1 nota preliminar

El nombre de host de nuestro sistema es server1.example.com, y tenemos un sitio web www.example.com con la raíz del documento /var/www/html.

2 Habilitar el repositorio EPEL

En CentOS 7, Munin y Monit no están disponibles en los repositorios predeterminados de CentOS. Afortunadamente, podemos instalarlos desde el repositorio de EPEL. Para habilitar el repositorio EPEL ejecutamos:

yum install epel-release

Importe la clave EPEL GPG:

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

y luego ejecuta:

yum update

para asegurarse de que el sistema esté actualizado y que la lista de paquetes de EPEL esté cargada antes de que comencemos a instalar munin.

2 Instalar servidor web Apache

Munin requiere un servidor web para servir y mostrar sus archivos de estadísticas. Instalaré el servidor apache httpd aquí:

yum install httpd

Inicie apache y permita que se inicie automáticamente en el momento del arranque.

systemctl enable httpd
systemctl start httpd

4 Instalar y configurar Munin

Para instalar Munin en CentOS 7, hacemos esto:

yum install munin munin-node

Luego creamos los enlaces de inicio del sistema para Munin y lo iniciamos:

systemctl enable munin-node
systemctl start munin-node

A continuación, debemos editar el archivo de configuración de Munin /etc/munin/munin.conf.

nano /etc/munin/munin.conf

Queremos que Munin use el nombre server1.example.com en lugar de localhost en la salida HTML, por lo tanto, reemplazamos localhost con server1.example.com. Sin los comentarios, el archivo modificado se ve así:

[...]
# a simple host tree
[server1.example.com]
    address 127.0.0.1
    use_node_name yes
[...]

Las estadísticas de munin están protegidas con un nombre de usuario y una contraseña (autorización básica de Apache). En el siguiente paso, agregamos un nuevo usuario y contraseña al archivo /etc/munin/munin-htpasswd.

htpassd /etc/munin/munin-htpasswd admin

El comando agregará un nuevo usuario con el nombre "admin" y solicitará dos veces la nueva contraseña.

Ahora espere unos minutos para que munin pueda generar su primera salida y luego vaya a http://server1.example.com/munin/ en su navegador y verá las primeras estadísticas.

(Esto es solo un pequeño extracto de los muchos gráficos que produce munin...)

5 Instalar y configurar Monit

A continuación instalaremos Monit:

yum install monit

Luego creamos los enlaces de inicio del sistema para monit:

systemctl enable monit
systemctl start monit

El archivo de configuración predeterminado de Monit es /etc/monitrc donde puede encontrar algunos ejemplos de configuración (puede encontrar más ejemplos de configuración en http://mmonit.com/wiki/Monit/ConfigurationExamples) que están todos comentados, pero le dice a monit que también busque en el directorio /etc/monit.d los archivos de configuración.

En este caso quiero monitorear:

  • ganancias
  • sshd
  • mysql
  • apache
  • postfijo

Además, configuraré estos ajustes para Monit:

  • Habilite la interfaz web de Monit en el puerto 2812.
  • Use HTTPS para la interfaz web en lugar de HTTP.
  • Configure un inicio de sesión protegido por contraseña para la interfaz web.
  • Monit enviará alertas por correo electrónico a [email protected]

Primero configuraré los ajustes de autenticación. Abra el archivo /etc/monit.d/monitrc

nano /etc/monit.d/monitrc

Y desplácese hacia abajo hasta encontrar esta sección:

set httpd port 2812 and
use address localhost # only accept connection from localhost
allow localhost # allow localhost to connect to the server and
allow admin:monit # require user 'admin' with password 'monit'
allow @monit # allow users of group 'monit' to connect (rw)
allow @users readonly # allow users of group 'users' to connect readonly

Reemplácelo con la siguiente configuración:

set httpd port 2812 and
use address 0.0.0.0
SSL ENABLE
PEMFILE /var/certs/monit.pem
allow admin:test

La palabra "prueba" es la contraseña, reemplácela con una contraseña segura y es posible que también desee cambiar el nombre de usuario "admin" por un nombre que no se pueda adivinar fácilmente.

Ahora agregamos la configuración para los servicios monitoreados. En lugar de modificar /etc/monitrc, creamos un nuevo archivo de configuración /etc/monit.d/monitrc.

Mi archivo se ve así:

nano /etc/monit.d/monitrc
set logfile syslog facility log_daemon

# Send emails trough this mailserver
set mailserver localhost
# Set the From address of the alert emails
set mail-format { from: [email protected] }
# Send alerts to this address
set alert [email protected]
# Monitor the Proftpd service check process proftpd with pidfile /var/run/proftpd/proftpd.pid start program = "/usr/bin/systemctl start proftpd" stop program = "/usr/bin/systemctl stop proftpd" if failed port 21 protocol ftp then restart if 5 restarts within 5 cycles then timeout
# Monitor the SSH service check process sshd with pidfile /var/run/sshd.pid start program "/usr/bin/systemctl start sshd" stop program "/usr/bin/systemctl stop sshd" if failed port 22 protocol ssh then restart if 5 restarts within 5 cycles then timeout
# Monitor MySQL check process mysql with pidfile /var/run/mysqld/mysqld.pid group database start program = "/usr/bin/systemctl start mysqld" stop program = "/usr/bin/systemctl stop mysqld" if failed host 127.0.0.1 port 3306 then restart if 5 restarts within 5 cycles then timeout
# Monitor the apache webserver check process apache with pidfile /var/run/httpd/httpd.pid group www start program = "/usr/bin/systemctl start httpd" stop program = "/usr/bin/systemctl stop httpd" if failed host localhost port 80 protocol http and request "/monit_token" then restart if cpu is greater than 60% for 2 cycles then alert if cpu > 80% for 5 cycles then restart if totalmem > 500 MB for 5 cycles then restart if children > 250 then restart if loadavg(5min) greater than 10 for 8 cycles then stop if 3 restarts within 5 cycles then timeout
# Monitor postfix mailserver check process postfix with pidfile /var/spool/postfix/pid/master.pid group mail start program = "/usr/bin/systemctl start postfix" stop program = "/usr/bin/systemctl stop postfix" if failed port 25 protocol smtp then restart if 5 restarts within 5 cycles then timeout

(Asegúrese de verificar solo los procesos que realmente existen en su servidor; de lo contrario, monit no se iniciará. Es decir, si le dice a monit que verifique Postfix, pero Postfix no está instalado en el sistema, monit no se iniciará).

El archivo de configuración es bastante autoexplicativo; si no está seguro acerca de una opción, eche un vistazo a la documentación de monit:http://mmonit.com/monit/documentation/monit.html

En la parte de apache de la configuración de Monit, encontrará esto:

   if failed host localhost port 80 protocol http
      and request "/monit_token" then restart

lo que significa que monit intenta conectarse a localhost en el puerto 80 e intenta acceder al archivo /monit_token que es /var/www/html/monit_token porque la raíz del documento de nuestro sitio web es /var/www/html. Si Monit no tiene éxito, significa que Apache no se está ejecutando y Monit lo reiniciará. Ahora debemos crear el archivo /var/www/html/monit_token y escribir una cadena aleatoria en él:

touch /var/www/html/monit_token

A continuación, creamos el certificado pem (/var/certs/monit.pem) que necesitamos para la interfaz web de Monit cifrada con SSL:

mkdir /var/certs
cd /var/certs

Necesitamos un archivo de configuración de OpenSSL para crear nuestro certificado. Puede verse así:

nano /var/certs/monit.cnf
# create RSA certs - Server

RANDFILE = ./openssl.rnd

[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type

[ req_dn ]
countryName = Country Name (2 letter code)
countryName_default = MO

stateOrProvinceName             = State or Province Name (full name)
stateOrProvinceName_default     = Monitoria

localityName                    = Locality Name (eg, city)
localityName_default            = Monittown

organizationName                = Organization Name (eg, company)
organizationName_default        = Monit Inc.

organizationalUnitName          = Organizational Unit Name (eg, section)
organizationalUnitName_default  = Dept. of Monitoring Technologies

commonName                      = Common Name (FQDN of your server)
commonName_default              = server.monit.mo

emailAddress                    = Email Address
emailAddress_default            = [email protected]

[ cert_type ]
nsCertType = server

Ahora creamos el certificado así:

openssl req -new -x509 -days 365 -nodes -config ./monit.cnf -out /var/certs/monit.pem -keyout /var/certs/monit.pem
openssl gendh 512 >> /var/certs/monit.pem
openssl x509 -subject -dates -fingerprint -noout -in /var/certs/monit.pem
chmod 700 /var/certs/monit.pem

Finalmente, podemos comenzar a monitorear:

systemctl restart monit

Ahora apunte su navegador a https://www.example.com:2812/ (asegúrese de que su firewall no bloquee el puerto 2812), inicie sesión con admin y pruebe, y debería ver la interfaz web de Monit. Debería verse así:

(Pantalla principal)

(Página de estado de Apache)

Dependiendo de su configuración en /etc/monit.d/monitrc Monit reiniciará sus servicios si fallan y enviará correos electrónicos de notificación si los ID de proceso de los servicios cambian, etc.

6 Enlaces

  • munin:http://munin.projects.linpro.no
  • monitor:http://mmonit.com/monit
  • CentOS:http://www.centos.org

Cent OS
  1. Monitoreo de servidores con Icinga 2 e Icingaweb 2 en CentOS 7

  2. Configuración de un servidor y cliente NFS en CentOS 7.2

  3. Supervise y administre sus servicios con Monit en CentOS 6 / RHEL 6

  4. Cómo monitorear el uso de recursos de su servidor con Munin en CentOS 6

  5. Instale Zenario con Apache, PHP y MariaDB en CentOS 7

Supervisión de servidores con Munin y Monit en Debian 10

Supervisión del servidor con Munin y Monit en Debian 8 (Jessie)

Monitoreo de servidores con munin y monit en CentOS 5.2

Monitoreo de servidores con Munin y Monit en CentOS 7.2

Monitoreo de servidor con munin y monit en Fedora 7

Configuración de un servidor OpenVPN con CentOS y Viscosity