Le piattaforme di telemetria SaaS applicano ricarichi astronomici sull'ingestione e la conservazione di log non compressi. Se i tuoi servizi Python generano 50GB di log JSON al mese, stai probabilmente pagando oltre 300$/mese solo per l'indicizzazione di base e gli alert.
L'Architettura: Ingestion Locale Senza Dipendenze
LogShield CLI ribalta questo modello gestendo la redazione dei dati PII e la compressione direttamente sull'nodo locale. Scritto in Go come binario statico privo di dipendenze, si posiziona tra gli stream standard dell'applicazione e lo storage cloud. Rimuove carte di credito, token bearer ed email prima di scrivere chunk compressi in zstd su S3 o Cloudflare R2 per pochi centesimi.
Routing dei Log Strutturati Python
Non servono SDK complessi o daemon esterni dentro il container applicativo. Emetti JSON strutturato su stdout e canalizza lo stream direttamente in LogShield CLI.
import logging
import json
import sys
class FormattatoreJsonStrutturato(logging.Formatter):
def format(self, record: logging.LogRecord) -> str:
log_obj = {
"timestamp": self.formatTime(record),
"level": record.levelname,
"logger": record.name,
"message": record.getMessage(),
}
if record.exc_info:
log_obj["exception"] = self.formatException(record.exc_info)
return json.dumps(log_obj)
# Configurazione del logger principale su stdout
handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(FormattatoreJsonStrutturato())
logger = logging.getLogger("app")
logger.addHandler(handler)
logger.setLevel(logging.INFO)
# Comando di esecuzione:
# python app.py | logshield --bucket mio-bucket-telemetria --slack-webhook $SLACK_URLAlert Immediati tramite Webhook sui Panico 5xx
Oltre all'archiviazione remota, LogShield analizza i codici di stato e le stack trace in memoria. Quando un errore 500 o un'eccezione non gestita passa attraverso la pipe, invia un alert formattato verso Slack o Discord senza bloccare l'esecuzione del codice.
Deploy in Produzione
LogShield include file di configurazione systemd pronti all'uso e template Docker Compose in modalita sidecar. Puoi integrare il binario statico in qualsiasi container Alpine o Debian mantenendo l'impronta di memoria RAM vicina allo zero.