unix remote – Cómo comprobar si el cliente rsyslog remoto se está ejecutando

Pregunta:

En este momento estoy implementando la parte del sistema de monitoreo que se construye alrededor del rsyslog y se audita. Me gustaría incluir en el proyecto una verificación correcta del hecho de que se está ejecutando la instalación del cliente rsyslog remoto . Esta verificación debe repetirse en el servidor rsyslog a intervalos de tiempo cortos.

La forma más sencilla de hacerlo es rastrear las marcas de tiempo de las últimas modificaciones del archivo de registro. Si el archivo de registro (que es utilizado por el servidor rsyslog para redirigir los mensajes entrantes) no se ha modificado recientemente, podemos concluir que el rsyslog remoto se cayó y no envió más mensajes. Pero dudo de la corrección de este método.

Respuesta:

Esa no es una mala idea. Para mejorar un poco, quizás cada uno de los clientes podría configurarse para enviar un mensaje a intervalos regulares (proporcionando un "latido" o una "marca"). Con Rsyslog, la directiva es $ActionWriteAllMarkMessages [on|off] . Pero preste atención a la página del manual:

Tenga en cuenta que esta opción se restablece automáticamente a "desactivada", por lo que si tiene la intención de usarla con múltiples acciones, debe especificarse al frente de todas las líneas de selección que deberían proporcionar esta funcionalidad.

¿Qué sucede si hay un problema de configuración no descubierto en el servidor Syslog que hace que los mensajes se dirijan a una ubicación inesperada, como el archivo que monitorea para mostrar que el cliente está vivo? Quizás una prueba más rigurosa podría ser (grep / awk) para los mensajes de "latido" o "marcar" proporcionados por $ActionWriteAllMarkMessages , buscando la hora del mensaje de un host específico.

Para verificar que el servidor Syslog remoto se esté ejecutando, puede usar netcat ( nc ) con los conmutadores -z y -u . Del manual:

-u Utiliza UDP en lugar de la opción predeterminada de TCP.

-z Especifica que nc solo debería escanear en busca de demonios en escucha, sin enviarles ningún dato. […]

Por ejemplo, con un tiempo de espera de cinco segundos ( -w5 ):

#!/usr/bin/env bash
hostname="<FQDN or IP Address>"
port="514"

if (nc -z -u -w5 "$hostname" "$port" > /dev/null 2>&1); then
    echo "Syslog is up."
else
    echo "Syslog could not be reached."
fi

unset hostname
unset port

O, si el servidor Syslog también usa TCP, entonces puede omitir el -u para aprovechar la confiabilidad de TCP, aunque solo sea para este propósito. Esto verifica que el servidor Syslog esté escuchando y disponible desde la ubicación del servidor que realiza la verificación de conectividad. Hay otra faceta que tiene la misma importancia: el espacio en disco. (Si el servidor Syslog se queda sin espacio para escribir mensajes, entonces el servidor Syslog también puede considerarse inactivo).

Teniendo en cuenta que UDP puede ser "poco confiable" por diseño, es posible que contar con el mensaje "marca" o "latido" no siempre funcione en una red congestionada o en un servidor Syslog. Otro enfoque podría ser instalar un script en cada cliente. La secuencia de comandos (BASH, Python o lo que sea que funcione) podría devolver cualquier código de error que diseñe (por ejemplo: ¿El proceso de Syslog no se está ejecutando? Regrese 1 o intente iniciar el proceso de Syslog primero, o idee otras pruebas como pruebas de conectividad, etc.). Utilice xinetd para iniciar el script desde /etc/xinetd.d/script_name (en RHEL / CentOS):

service check_syslog
{
    type        = UNLISTED
    port        = 6777
    socket_type = stream
    protocol    = tcp
    wait        = no
    user        = root
    server      = /usr/local/sbin/script_name
    only_from   = 127.0.0.1 10.0.0.110
    disable     = no
}

En RHEL, el comando de reinicio es service xinetd restart . Edite /etc/services para darle un nombre al puerto 6777. Me gusta usar iptables para aumentar la estrofa only_from . Por cierto, el puerto 6777 se usó solo como ilustración.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım