Graylog memorizza i suoi messaggi in OpenSearch o Elasticsearch, quindi hai due possibilità. Usa l’API REST di Graylog, autenticata con un token di accesso, o interroga direttamente gli indici di backend (graylog_* di default) con uno script. In entrambi i modi ottieni JSON. La linea originale è in message, e in full_message per alcuni input. L’esportazione nell’interfaccia web di Graylog produce un formato che LogTotal non legge oggi.
Graylog è una piattaforma popolare per la gestione centralizzata dei log, spesso il primo sistema di logging centrale che un team implementa. Prime Core ha 23.274 regole di rilevamento per Graylog, mappate su 671 tecniche MITRE ATT&CK. Di seguito come estrarre messaggi, pulirli e analizzarli gratuitamente in LogTotal.
Prima di iniziare
Un token di accesso. In Graylog, apri le impostazioni del tuo utente e crea un token. Con l’API, ti autentichi come <token>:token: il token come nome utente e la parola token come password.
Accesso al backend, se procedi direttamente. Il cluster OpenSearch o Elasticsearch dietro Graylog spesso non è raggiungibile dall’esterno. Chiedi a chi lo gestisce per un account di sola lettura.
Stream e set di indici. Graylog indirizza i messaggi in stream, e gli stream mappano ai set di indici con i propri prefissi e durata di conservazione. Scopri quale set di indici contiene i tuoi dati.
Opzione 1: API REST di Graylog
GL="https://graylog.example.com"
curl -sS -u "$GL_TOKEN:token" -H 'Accept: application/json' -G "$GL/api/search/universal/absolute"
--data-urlencode 'query=source:web-03'
--data-urlencode 'from=2026-10-19T00:00:00.000Z'
--data-urlencode 'to=2026-10-20T00:00:00.000Z'
--data-urlencode 'limit=10000'
| jq -c '.messages[].message' > graylog_web03_1019.jsonl
Le versioni più recenti di Graylog prediligono l’API di ricerca “Views”. Per grandi esportazioni, l’Opzione 2 è più affidabile.
Opzione 2: Interrogare gli indici di backend
Questo è lo stesso approccio che puntiamo sugli indici di Graylog:
import json, os
from opensearchpy import OpenSearch, helpers
client = OpenSearch("https://opensearch.example.com:9200",
http_auth=("reader", os.environ["OS_PASSWORD"]), verify_certs=True)
query = {"query": {"bool": {"filter": [
{"term": {"source": "web-03"}},
{"range": {"timestamp": {"gte": "2026-10-19 00:00:00.000", "lt": "2026-10-20 00:00:00.000"}}},
]}}}
with open("graylog_web03_1019.jsonl", "w") as out:
for hit in helpers.scan(client, index="graylog_*", query=query, size=1000):
out.write(json.dumps(hit["_source"]) + "n")
Graylog memorizza il timestamp come yyyy-MM-dd HH:mm:ss.SSS in UTC, motivo per cui il range usa quel formato. Per un backend che esegue Elasticsearch, usa il client elasticsearch nello stesso modo.
Carica, pulisci e analizza in LogTotal
- Carica. Apri logtotal.com e inserisci il file.
- Pulisci.
- Analizza.
Quando qualcosa va storto
| Sintomo | Probabile causa | Fix |
|---|---|---|
| 401 dall’API | Autenticazione token scritta male | Usa <token>:token |
| 404 sull’endpoint di ricerca | Endpoint non disponibile nella tua versione | Usa l’Opzione 2, o l’API “Views” |
| La query di backend non restituisce nulla | Prefisso indice sbagliato o formato timestamp errato | Controlla i set di indici; usa yyyy-MM-dd HH:mm:ss.SSS |
| Backend non raggiungibile | Cluster non esposto | Chiedi accesso di sola lettura, o usa l’API |
FAQ
Message o full_message?
Message è sempre presente. full_message appare per alcuni input, come GELF, e può contenere più dettagli. Esporta entrambi se li hai.
Funziona per Graylog Cloud?
Il percorso API sì. L’accesso diretto al backend di solito non è disponibile sui piani ospitati.