I servizi di monitoraggio uptime SaaS richiedono abbonamenti mensili spropositati per quello che equivale, a tutti gli effetti, a semplici richieste HTTP GET e verifiche di scadenza dei certificati SSL. Quando si gestiscono decine di microservizi, spendere 50$/mese per ogni monitor diventa un costo del tutto superfluo.
L'Architettura di Riferimento
Un watchdog affidabile non necessita di un pesante sistema di tracciamento distribuito. Ha solo bisogno di un ciclo di polling leggero, una logica di backoff esponenziale in caso di errore, la verifica dei certificati TLS e un generatore isolato di pagine di stato statiche.
Realizzare l'Engine di Monitoraggio in Python
Di seguito è riportato uno script che convalida gli endpoint, misura la latenza di risposta e ispeziona i certificati TLS in un unico passaggio.
import datetime
import socket
import ssl
import requests
def check_target(url: str, hostname: str, port: int = 443, timeout: int = 5) -> dict:
results = {"url": url, "healthy": False, "latency_ms": 0, "ssl_days_remaining": 0}
# 1. HTTP Status & Latency Check
try:
response = requests.get(url, timeout=timeout)
results["healthy"] = response.status_code == 200
results["latency_ms"] = round(response.elapsed.total_seconds() * 1000, 2)
except requests.RequestException as e:
return {**results, "error": f"HTTP Failure: {str(e)}"}
# 2. SSL Certificate Expiry Check
context = ssl.create_default_context()
with socket.create_connection((hostname, port), timeout=timeout) as sock:
with context.wrap_socket(sock, server_hostname=hostname) as ssock:
cert = ssock.getpeercert()
expiry_raw = cert["notAfter"]
expiry_date = datetime.datetime.strptime(expiry_raw, "%b %d %H:%M:%S %Y %Z")
results["ssl_days_remaining"] = (expiry_date - datetime.datetime.utcnow()).days
return results
if __name__ == "__main__":
metrics = check_target("https://api.py-forge.com/health", "api.py-forge.com")
print(metrics)Questo worker può essere eseguito periodicamente tramite timer di systemd o container orchestration. Se un controllo fallisce per due volte consecutive, il watchdog invia un webhook verso Slack, Discord o PagerDuty.
Generazione di Status Page Statistiche
Invece di ospitare una dashboard dinamica legata a un database — che rischia di andare offline proprio durante un outage del cloud — esporta lo stato dei controlli su un file JSON statico ed esegui il push su un bucket S3 o GitHub Pages.