Graylog: Come iniziare

Come iniziare con 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!

Un input è il punto di ingresso in cui Graylog riceve i vostri log. È possibile inviare log tramite TCP o UDP. Inoltre, Graylog può raccogliere log da un'API, da una coda Kafka, da un server RabbitMQ e tramite altri metodi.

In questo esempio, creeremo un input UDP raw. Per iniziare, aprite l'interfaccia di Graylog e navigate su "System" quindi "Inputs". Selezionate "Raw/Plaintext UDP" e cliccate su "Launch new input". Configurate l'input con i seguenti valori e confermate il modulo:

  1. Node: Selezionate il vostro nodo
  2. Title: RAW UDP
  3. Port: 5555

Successivamente, aprite un terminale sul vostro computer ed inviate un messaggio UDP al vostro server Graylog. Ricordate di sostituire XXXXXX con il nome di dominio del vostro servizio:

  • Su macOS: echo "Hello Graylog from UDP" | nc -u -w1 -c <XXXXXX>.stackhero-network.com 5555
  • Su Linux: echo "Hello Graylog from UDP" | nc -u -w1 <XXXXXX>.stackhero-network.com 5555

Dopo aver inviato il messaggio, tornate su Graylog e cliccate su "Search". Dovreste vedere il vostro messaggio 🎉

Congratulazioni, avete appena inviato il vostro primo messaggio a Graylog! Sentitevi liberi di creare ulteriori input e dashboard personalizzati in base alle vostre esigenze. Per ulteriori approfondimenti, potete consultare la documentazione ufficiale di Graylog.

Sono disponibili diversi esempi di codice nel nostro repository Git. Questo repository offre implementazioni pratiche e personalizzazioni aggiuntive per aiutarvi a sfruttare al meglio Graylog.

Se disponete di un client rsyslog e desiderate inviare i log in modo sicuro a Graylog, seguite questi passaggi:

Non attivate alcuna opzione TLS sull'input di Graylog. Il TLS verrà gestito direttamente da un reverse proxy sulla vostra istanza, quindi Graylog non se ne occuperà.

  1. Accedete alla configurazione del vostro servizio Graylog nella dashboard Stackhero e abilitate la "crittografia TLS" per la porta Syslog TCP 514.

  2. Aggiornate la configurazione di rsyslog come indicato di seguito. Sostituite <XXXXXX>.stackhero-network.com con l'hostname della vostra istanza:

    # Definire il certificato CA TLS
    global(
      DefaultNetstreamDriver="gtls"
      DefaultNetstreamDriverCAFile="/etc/ssl/certs/ca-certificates.crt"
    )
    
    # Inviare tutti i log a un server remoto
    # Viene creata una coda su disco per questa azione. Se l'host remoto
    # non è raggiungibile, i messaggi vengono memorizzati su disco e inviati quando torna disponibile
    # Vedi https://www.rsyslog.com/doc/v8-stable/configuration/actions.html
    # e https://www.rsyslog.com/doc/v8-stable/configuration/modules/omfwd.html
    *.* action(
      type="omfwd"
      target="<XXXXXX>.stackhero-network.com"
      port="514"
      protocol="tcp"
      KeepAlive="on"
      KeepAlive.Interval="30"
      StreamDriver="gtls"
      StreamDriverMode="1"
      StreamDriverAuthMode="x509/name"
      ResendLastMSGOnReconnect="on"
      queue.filename="fwdRule1"  # prefisso univoco per i file di spool
      queue.type="LinkedList"
      queue.maxDiskSpace="256m"
      queue.saveOnShutdown="on"
      action.resumeRetryCount="-1"
      action.resumeInterval="30"
    )
    
  3. Riavviate il servizio rsyslog e verificate la configurazione inviando un log con il comando:

    logger This is a test
    

La configurazione è completata. Ora state inviando i log in modo sicuro a Graylog tramite TLS!

Potreste incontrare un errore come:

org.opensearch.index.mapper.MapperParsingException: failed to parse field [time] of type [long] in document with id 'xxxx'

Potete visualizzare questo errore nei log disponibili nella dashboard Stackhero o nel pannello di amministrazione di Graylog sotto System > Overview > Indexer failures.

Questo errore indica che è stato inviato un log con un valore per il campo time che non corrisponde al tipo atteso (in questo caso, un valore numerico di tipo "long"). Graylog sfrutta la funzionalità di mapping dinamico di OpenSearch. Quando un log viene inviato per la prima volta, OpenSearch tenta di dedurre i tipi dei campi. Ad esempio, se un log contiene il campo time con il valore numerico 1234, OpenSearch lo definisce come campo numerico. Se successivamente viene inviato un altro log con il campo time impostato a "abcd", ovvero una stringa, OpenSearch lo rifiuterà perché si aspetta un valore numerico.

Ricordate che il nome del campo time è solo a scopo illustrativo. Può trattarsi di qualsiasi nome di campo e tipo.

Per risolvere questo problema, è necessario ridefinire il tipo che OpenSearch si aspetta. Per maggiori informazioni, consultate la documentazione ufficiale di Graylog.

Prima di procedere, abilitate l'accesso a OpenSearch dalla dashboard Stackhero. Accedete al vostro servizio Graylog e cliccate sul pulsante "Configura" per attivare l'accesso a OpenSearch.

Fate attenzione a queste modifiche: una configurazione errata può bloccare il vostro cluster OpenSearch e causare la perdita di dati. Se avete dubbi, non procedete.

  1. Definite il nuovo mapping. In questo esempio, ridefiniamo il campo time come tipo string. Potete trovare i tipi disponibili nella documentazione dei tipi di campo di OpenSearch.

  2. Salvate il seguente contenuto in un file chiamato graylog-custom-mapping.json:

    {
      "template": "graylog_*",
      "mappings": {
        "message": {
          "properties": {
            "time": {
              "type": "string",
              "index": "not_analyzed"
            }
          }
        }
      }
    }
    
  3. Inviate questo file utilizzando il seguente comando curl (sostituite <XXXXXX>.stackhero-network.com con il dominio della vostra istanza):

    curl -u 'admin' -X PUT -d @'graylog-custom-mapping.json' -H 'Content-Type: application/json' 'https://<XXXXXX>.stackhero-network.com/opensearch/_template/graylog-custom-mapping?pretty'
    

    Dovreste ricevere una risposta simile a:

    {
      "acknowledged": true
    }
    
  4. Infine, verificate che il mapping sia stato aggiornato con questo comando (sostituite il dominio se necessario):

    curl -u 'admin' -X GET 'https://<XXXXXX>.stackhero-network.com/opensearch/graylog_deflector/_mapping?pretty'
    

Gestire l'errore "Unable to write audit log entry"

Se visualizzate un errore come:

Unable to write audit log entry because there is no valid license

oppure

Not running cleanup for auditlog entries in MongoDB because there is no valid license

questo accade perché Graylog Enterprise è stato attivato senza una licenza valida. Se disponete di una licenza, potete inserirla nell'interfaccia di Graylog. Se non avete una licenza, è sufficiente disabilitare Graylog Enterprise dalla dashboard Stackhero.