PyForge è in vendita solo qui, sul sito ufficiale py-forge.com — diffida delle imitazioni.

Tutti gli articoli
pythonautomationdevopsmicrosaas

Basta Spendere 50$/mese per i Monitor di Uptime: Guida al Watchdog Self-Hosted

PyForge Team 5 min di lettura2026-10-16

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.

python
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.