Configurar el registro en Syslog en Python

Vaibhav Vaibhav 30 enero 2023
  1. Registrar mensajes en syslog usando el módulo Syslog en Python
  2. Registrar mensajes en Syslog usando el módulo logging en Python
Configurar el registro en Syslog en Python

El Protocolo de registro del sistema o Syslog es un software para sistemas operativos basados ​​en Unix, como macOS y Linux, que es un estándar para el registro de mensajes.

Syslog es un protocolo estándar de registro basado en la red que nos permite enviar mensajes de registro y eventos del sistema a un servidor, conocido como el servidor Syslog. Este servicio recopila mensajes de registro y mensajes de eventos de varias máquinas independientes diferentes en un solo lugar para su análisis, supervisión y evaluación.

Entendamos este servicio con la ayuda de un ejemplo.

Suponga que tiene cinco computadoras. Una de estas cinco computadoras es un servidor Syslog. Las otras cuatro computadoras son servidores que alojan cuatro aplicaciones web. Estas cuatro aplicaciones web son independientes entre sí y generan algunos mensajes de registro.

Estos mensajes de registro incluyen detalles sobre los usuarios que iniciaron sesión, los usuarios que cerraron sesión, a qué página accedió qué usuario, qué error se encontró en qué página, cuántas veces se accedió a una página específica en la última hora, cuántas transacciones en línea tuvo lugar en la última hora, y así sucesivamente.

Dado que hay tantas aplicaciones y mensajes de registro, saltar a computadoras individuales y revisarlas es una tarea compleja porque la cantidad de aplicaciones puede ser aún mayor. Entonces, todas estas aplicaciones registran sus mensajes en la quinta computadora o el servidor Syslog.

Suponga que alguien desea revisar y monitorear estos mensajes de registro desde varias aplicaciones. En ese caso, pueden hacerlo desde un solo lugar.

Esta estrategia no solo hace que la revisión sea más fácil, sino también eficiente y productiva. Incluso se pueden desarrollar aplicaciones para revisar y monitorear estos mensajes de registro en función de sus gustos y requisitos o usar productos existentes disponibles en el mercado.

El lenguaje de programación Python es un lenguaje universal que puede construir aplicaciones del mundo real. Este artículo abordará el registro de mensajes en Syslog usando Python.

Registrar mensajes en syslog usando el módulo Syslog en Python

Podemos registrar mensajes utilizando un módulo de Python, syslog. Forma parte de la biblioteca estándar de Python y actúa como una interfaz para las rutinas de la biblioteca syslog de Unix.

Este módulo tiene dos métodos con el mismo nombre, syslog(), que pueden registrar mensajes. Aquí, se utiliza el concepto de sobrecarga de funciones.

A continuación se muestra la firma de la función para ambos métodos.

syslog.syslog(message)
syslog.syslog(priority, message)

El primer método acepta un mensaje de cadena y el segundo método toma un mensaje de cadena junto con una prioridad. Ambos métodos envían un mensaje de cadena al registrador del sistema.

Hay ocho niveles de prioridad disponibles en este módulo que son los siguientes en un orden de mayor a menor.

  • LOG_EMERG - syslog.LOG_EMERG: Se utiliza para emergencias.
  • LOG_ALERT - syslog.LOG_ALERT: Se utiliza para alertas.
  • LOG_CRIT - syslog.LOG_CRIT: Se utiliza para mensajes críticos.
  • LOG_ERR - syslog.LOG_ERR: Se utiliza para errores.
  • LOG_WARNING - syslog.LOG_WARNING: Se utiliza para avisos.
  • LOG_NOTICE - syslog.LOG_NOTICE: Se utiliza para avisos.
  • LOG_INFO - syslog.LOG_INFO: Se utiliza para mensajes informativos.
  • LOG_DEBUG - syslog.LOG_DEBUG: Se utiliza para depurar mensajes.

Ahora hemos terminado con una introducción concisa al módulo. Entendamos cómo usar este módulo con la ayuda de un ejemplo. Consulte el siguiente código de Python para esto.

import syslog

syslog.syslog("A test message.")
syslog.syslog(syslog.LOG_EMERG, "A message with LOG_EMERG priority.")
syslog.syslog(syslog.LOG_ALERT, "A message with LOG_ALERT priority.")
syslog.syslog(syslog.LOG_CRIT, "A message with LOG_CRIT priority.")
syslog.syslog(syslog.LOG_ERR, "A message with LOG_ERR priority.")
syslog.syslog(syslog.LOG_WARNING, "A message with LOG_WARNING priority.")
syslog.syslog(syslog.LOG_NOTICE, "A message with LOG_NOTICE priority.")
syslog.syslog(syslog.LOG_INFO, "A message with LOG_INFO priority.")
syslog.syslog(syslog.LOG_DEBUG, "A message with LOG_DEBUG priority.")
syslog.syslog(syslog.LOG_INFO, "Test message with INFO priority.")

Registrar mensajes en Syslog usando el módulo logging en Python

Python tiene otro módulo, logging, que contiene métodos y clases que ayudan a las aplicaciones y bibliotecas con un sistema de registro de eventos flexible.

Este módulo también forma parte de la biblioteca estándar de Python. El módulo de logging proporciona muchas funciones y flexibilidad para el registro de eventos.

El módulo logging tiene una clase Logger que contiene la implementación de la lógica de registro real. Los desarrolladores y programadores tienen que instanciar esta clase para realizar el registro.

Tenga en cuenta que esta clase nunca debe instanciarse directamente. Se debe usar una función a nivel de módulo getLogger() o logging.getLogger(name) para crear un registrador.

Aquí, name es el nombre del registrador. La clase Logger tiene un montón de métodos como propogate(), setLevel(), isEnabledFor(), getEffectiveLevel() y log().

Por el bien de este artículo, solo nos centraremos en los siguientes métodos.

  • debug(msg): Un método para registrar mensajes con nivel DEBUG.
  • info(msg): Un método para registrar mensajes con nivel INFO.
  • warning(msg): Un método para registrar mensajes con nivel WARNING.
  • error(msg): Un método para registrar mensajes con nivel ERROR.
  • critical(msg): Un método para registrar mensajes con nivel CRITICAL.
  • log(level, msg): un método para registrar mensajes con el nivel de número entero especificado.
  • exception(msg): un método para registrar mensajes con nivel ERROR.
  • addHandler(hdlr): un método para agregar un controlador específico al registrador.

Esta biblioteca tiene los siguientes niveles de registro junto con sus valores numéricos.

  • CRITICAL: 50
  • ERROR: 40
  • WARNING: 30
  • INFO: 20
  • DEBUG: 10
  • NOTSET: 0

El módulo de registro tiene una clase Handler que se usa para especificar una ubicación para los mensajes de registro. Un objeto de clase Handler se agrega a un registrador con la ayuda del método addHandler() discutido anteriormente.

Además de estas dos clases, el módulo logging tiene dos clases más, a saber, Formatter y Filter. La clase Formatter se usa para definir el diseño y el formato de los mensajes de registro, y la clase Filter se usa para filtrar los mensajes de registro.

Por ahora, eso es todo lo que tenemos que saber sobre estas características.

Ahora hemos terminado con una introducción concisa al módulo de logging; comprendamos cómo usar este módulo para registrar mensajes con la ayuda de un ejemplo. Consulte el siguiente código de Python para esto.

import logging
from logging.handlers import SysLogHandler

logger = logging.getLogger("Logger")
handler = SysLogHandler(address="/var/run/syslog")
logger.addHandler(handler)
logger.debug("A message with level DEBUG.")
logger.info("A message with level INFO.")
logger.warning("A message with level WARNING.")
logger.error("A message with level ERROR.")
logger.critical("A message with level CRITICAL.")
logger.exception("A message with level ERROR.")
logger.log(250, "A message with level 250 numeric value.")

El script de Python anterior primero crea un registrador con la ayuda del método getLogger() y proporciona el nombre Logger.

A continuación, crea un controlador utilizando la clase SysLogHandler. Esta clase permite a los desarrolladores y programadores enviar mensajes de registro a un syslog local o remoto de Unix.

Esta clase acepta un parámetro (uno de los tres parámetros), address, que hace referencia al destino de los mensajes de registro. Para obtener más información sobre esta clase en detalle, consulte la documentación oficial aquí.

Luego, agregamos este controlador al registrador con la ayuda del método addHandler(). Por último, utilizando todos los métodos de registro discutidos anteriormente, registramos mensajes de todos los niveles y uno con el nivel 250.

Para conocer el módulo logging y el módulo syslog, consulta la documentación oficial aquí y aquí respectivamente.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.