Graylog: Utilizzo con Python

Come inviare log da Python a Graylog

👋 Benvenuti nella documentazione di Stackhero!

Stackhero offre una soluzione Graylog cloud pronta all'uso che fornisce numerosi vantaggi, tra cui:

  • Server email SMTP illimitato e dedicato incluso.
  • Aggiornamenti senza sforzo con un solo clic.
  • Nome di dominio personalizzabile sicuro con HTTPS (ad esempio, https://logs.tua-azienda.com).
  • Prestazioni ottimali e sicurezza robusta grazie a una VM privata e dedicata.

Risparmia tempo e semplifica la tua vita: bastano 5 minuti per provare la soluzione Graylog cloud hosting di Stackhero!

Inviare log da Python a Graylog è semplice. In questo esempio, utilizzeremo i pacchetti graypy e logging per raggiungere questo obiettivo.

Dal lato di Graylog, è necessario creare un input GELF TCP.

Accedi al tuo pannello di amministrazione Graylog, poi in "System"/"Inputs" e crea un nuovo input "GELF TCP". Seleziona la casella "global", aggiungi un "title" e assicurati che la porta sia impostata su 12201.

Non attivare alcuna opzione TLS qui. La crittografia TLS sarà gestita dal reverse proxy incluso con la tua istanza.

Configurazione dell'inputConfigurazione dell'input

Nel dashboard di Stackhero, vai al tuo servizio Graylog e clicca su "Configure".

Assicurati che la porta TCP 12201 sia correttamente definita e abilita la "crittografia TLS" per essa, quindi valida la tua configurazione.

Configurazione della porta di inputConfigurazione della porta di input

Dovresti controllare nel "Firewall" del tuo servizio che tu abbia autorizzato almeno il tuo IP a inviare dati alla porta TCP 12201. Per scopi di test, potrebbe essere più semplice autorizzare tutti gli IP (0.0.0.0/0), che è l'impostazione predefinita.

Per questo esempio, utilizzeremo la libreria graypy. Puoi semplicemente installarla con pip install graypy.

Poi, puoi scrivere il seguente codice in un file chiamato graylog-example.py e sostituire XXXXX.stackhero-network.com con il nome host del tuo server:

import logging
import graypy

my_logger = logging.getLogger('test_logger')
my_logger.setLevel(logging.DEBUG)

handler = graypy.GELFTLSHandler('XXXXX.stackhero-network.com', 12201)
my_logger.addHandler(handler)

my_logger.debug('Questo è un test da uno script Python!')

Vai al tuo pannello di amministrazione Graylog, clicca sulla scheda "Search", clicca sull'icona di riproduzione e seleziona "Update every 1 second". Poi, puoi eseguire lo script usando questa riga di comando: python graylog-example.py.

Lo script invierà il log a Graylog, e dovresti vederlo sulla tua pagina di ricerca Graylog!

Il tuo primo log ricevuto su GraylogIl tuo primo log ricevuto su Graylog

Clicca sulla frase "Questo è un test da uno script Python!" e vedrai alcune informazioni utili come il nome dello script, la linea che crea il log, ecc.

Log dettagliatoLog dettagliato

Una funzionalità utile è catturare gli errori e inviarli a Graylog, così avrai una panoramica globale degli errori attivati dalla tua applicazione. Avrai anche la possibilità di inviare notifiche su tali errori via email, o utilizzando Slack o Mattermost.

In questo esempio, proviamo a chiamare la funzione unknown_function, che non esiste. Non dimenticare di sostituire il valore "XXXXX.stackhero-network.com" con il nome host della tua istanza.

import logging
import graypy

my_logger = logging.getLogger('test_logger')
my_logger.setLevel(logging.DEBUG)

handler = graypy.GELFTLSHandler('XXXXX.stackhero-network.com', 12201)
my_logger.addHandler(handler)

try:
  unknown_function()
except NameError:
  my_logger.debug('La funzione "unknown_function" ha generato un errore', exc_info=1)

Esegui lo script e torna al tuo pannello di amministrazione Graylog. Vedrai l'errore "NameError: name 'unknown_function' is not defined" e l'intera traccia dello stack!

Esempio di log di erroreEsempio di log di errore

Negli esempi precedenti, abbiamo utilizzato TLS per crittografare la comunicazione ma non abbiamo verificato la validità del certificato. Questo era a scopo dimostrativo, ma per la produzione, dovresti verificare la validità del certificato.

Puoi farlo semplicemente aggiungendo le opzioni validate e ca_certs in questo modo:

handler = graypy.GELFTLSHandler('XXXXX.stackhero-network.com', 12201, validate=True, ca_certs='/etc/ssl/certs/ca-certificates.crt')

Dovresti assicurarti che il file /etc/ssl/certs/ca-certificates.crt esista:

  • Su Ubuntu/Debian, puoi installarlo con sudo apt install ca-certificates.
  • Su Alpine Linux, installalo con apk add ca-certificates.
  • Su macOS è installato di default ma si chiama /etc/ssl/cert.pem.

Se non ricevi log nel tuo Graylog, potresti voler controllare questi punti:

  1. Graylog dovrebbe avere un input definito di tipo "GELF TCP", in ascolto sulla porta 12201, senza alcuna configurazione TLS definita.
  2. La configurazione di Graylog nel dashboard di Stackhero (pulsante "Configure") dovrebbe avere la porta 12201 definita, con TCP e TLS attivati in "Input ports".
  3. Il firewall nel dashboard di Stackhero dovrebbe mostrarti la porta "12201/tcp" come "ACCEPT", idealmente in posizione #1 con la sorgente 0.0.0.0/0 definita (per scopi di test).
  4. Dovresti monitorare i log sul pannello di amministrazione del tuo Graylog in "Search". Per assicurarti di vedere i tuoi log, seleziona "Search in the last 1 hour", clicca sull'icona di riproduzione e seleziona "Update every 1 second".