- Descripción General
- Requisitos del Sistema
- Instalación
- Configuración
- Estructura del Programa
- Funcionalidades
- Logs y Monitoreo
- Solución de Problemas
- Mantenimiento y Mejores Prácticas
Este sistema es una herramienta robusta de monitoreo que supervisa constantemente la disponibilidad de sitios web y servicios. Cuando detecta una caída o recuperación de un servicio, envía notificaciones por correo electrónico a los administradores designados.
- Monitoreo continuo de sitios web y bases de datos con sistema de reintentos
- Soporte para múltiples tipos de bases de datos (MySQL, PostgreSQL, SQL Server)
- Sistema de notificaciones por correo electrónico con soporte para múltiples destinatarios
- Sistema de logs rotativo y configurable
- Detección inteligente de caídas y recuperaciones de servicios
- Manejo de errores robusto y resiliente
- Soporte para TLS/SSL en comunicaciones SMTP
- Python 3.7 o superior
- pip (gestor de paquetes de Python)
- Acceso a servidor SMTP para envío de correos
- Permisos de escritura en el directorio para los logs
requests==2.28.1 # Para peticiones HTTP
mysql-connector-python # Para conexiones MySQL
psycopg2-binary # Para conexiones PostgreSQL
pyodbc # Para conexiones ODBC
sistema-monitoreo/
│
├── monitoreo.py # Script principal
├── config.json # Archivo de configuración
├── requirements.txt # Lista de dependencias
└── monitor_servicios.log # Archivo de logs (generado automáticamente)
-
Clonar o descargar los archivos del programa:
git clone https://github.com/zinnadiego/monitoring_services_with_python cd sistema-monitoreo
-
Instalar las dependencias:
pip install -r requirements.txt
El archivo requirements.txt contiene las siguientes bibliotecas:
-
requests==2.28.1
:- Realiza peticiones HTTP a los sitios web monitoreados
- Maneja timeouts y errores de conexión
- Soporta headers personalizados y SSL
-
mysql-connector-python==8.0.32
:- Conecta con bases de datos MySQL
- Soporta SSL y autenticación segura
- Maneja pool de conexiones
-
psycopg2-binary==2.9.5
:- Conecta con bases de datos PostgreSQL
- Versión binaria precompilada
- Soporta SSL y conexiones asíncronas
-
pyodbc==4.0.35
:- Conecta con bases de datos vía ODBC
- Soporta SQL Server y otras bases compatibles
- Maneja múltiples tipos de autenticación
NOTA: El archivo requirements.txt debe estar en el directorio raíz del proyecto para que pip pueda encontrarlo automáticamente.
{
"websites": {
"Web uno": "https://www.direccionwebuno.com",
"Web dos": "https://www.direccionwebdos.com"
},
"databases": {
"Database1": {
"type": "mysql",
"host": "localhost",
"port": 3306,
"database": "nombre_db",
"user": "usuario",
"password": "contraseña"
},
"Database2": {
"type": "postgresql",
"host": "localhost",
"port": 5432,
"database": "nombre_db",
"user": "usuario",
"password": "contraseña"
}
},
"email": {
"smtp_server": "mail.servidor.com",
"smtp_port": 587,
"smtp_use_tls": true,
"smtp_use_ssl": false,
"sender_email": "ejemplo@tucorreo.com",
"sender_password": "tu_password",
"recipient_emails": [
"ejemplo@tucorreo.com",
"ejemplo@tucorreo.com"
]
},
"monitor_settings": {
"check_interval": 60,
"retry_attempts": 3,
"retry_delay": 6,
"alert_threshold": 3,
"recovery_threshold": 2,
"alert_repeat_interval": 20
},
"logging_settings": {
"enable_file_logging": false,
"max_bytes": 5242880,
"backup_count": 5,
"log_file": "monitor_servicios.log"
}
}
Define los sitios web a monitorear:
"Nombre del Sitio"
: Identificador amigable del sitio"URL"
: Dirección web completa del sitio a monitorear
Define las bases de datos a monitorear:
type
: Tipo de base de datos ("mysql", "postgresql", "sqlserver")host
: Servidor de la base de datosport
: Puerto de conexióndatabase
: Nombre de la base de datosuser
: Usuario para la conexiónpassword
: Contraseña del usuario
Configuración del sistema de notificaciones:
smtp_server
: Servidor SMTP para envío de correossmtp_port
: Puerto del servidor (587 para TLS, 465 para SSL)smtp_use_tls
: Habilita conexión TLSsmtp_use_ssl
: Habilita conexión SSLsender_email
: Correo electrónico remitentesender_password
: Contraseña del correo remitenterecipient_emails
: Array de correos destinatarios
Parámetros de comportamiento del monitor:
check_interval
: Segundos entre verificaciones (default: 60)retry_attempts
: Intentos antes de marcar como caído (default: 3)retry_delay
: Segundos entre reintentos (default: 6)alert_threshold
: Fallos consecutivos antes de alertar (default: 3)recovery_threshold
: Éxitos consecutivos para recuperación (default: 2)alert_repeat_interval
: Minutos entre alertas repetidas (default: 20)
Configuración del sistema de logs:
enable_file_logging
: Habilita/deshabilita logs en archivomax_bytes
: Tamaño máximo del archivo de log (default: 5MB)backup_count
: Archivos de respaldo a mantener (default: 5)log_file
: Nombre del archivo de log
Gestiona el estado de los servicios:
class ServiceStatus:
def __init__(self)
def record_failure(self, service_name)
def record_success(self, service_name)
def should_alert(self, service_name, threshold, repeat_interval)
def mark_alerted(self, service_name)
def is_recovered(self, service_name, threshold)
def mark_recovered(self, service_name)
Recopila información del sistema:
class SystemInfo:
@staticmethod
def get_system_info()
Clase base para verificación de bases de datos:
class DatabaseChecker(ABC):
@abstractmethod
def check_connection(self, config)
def check_with_retry(self, config, retry_attempts, retry_delay)
Verifica disponibilidad de sitios web:
- Realiza peticiones HTTP con headers personalizados
- Sistema de reintentos configurable
- Timeout de 10 segundos por intento
Sistema de notificaciones:
- Soporte para múltiples destinatarios
- Formateo de mensajes con emojis
- Inclusión de información del sistema
- Manejo de errores SMTP
Función principal del programa:
- Bucle principal de monitoreo
- Control de intervalos de verificación
- Manejo de estados y alertas
- Gestión de recuperaciones
- Logging simultáneo a consola y archivo
- Rotación automática de archivos
- Niveles de log: INFO, WARNING, ERROR, CRITICAL
- Formato timestamp - nivel - mensaje
2024-12-19 10:15:23 - INFO - Iniciando monitor de servicios
2024-12-19 10:15:23 - INFO - Verificando sitio web: Web uno
2024-12-19 10:15:24 - WARNING - Intento 1 fallido (status code: 503)
2024-12-19 10:15:30 - ERROR - Sitio web caído: Web uno