Configuring Logstash on Droplets to Forward Nginx Logs to Managed OpenSearch

Introduzione

Il monitoraggio dei log del server web è essenziale per la corretta gestione del tuo sito web, la risoluzione di problemi e l’understanding del comportamento degli utenti. Se stai utilizzando Nginx, genera log di accesso e errori pieni di informazioni valide. Per gestire e analizzare questi log, puoi utilizzare Logstash per processarli e inoltrarli e DigitalOcean OpenSearch gestito per indicizzare e visualizzare i dati.

In questo tutorial, ti guideranno attraverso l’installazione di Logstash su una Droplet, impostandola per raccogliere i tuoi log di Nginx e inviarli a DigitalOcean OpenSearch gestito.

Prerequisiti

Scenario d’uso

Potresti aver bisogno di questa configurazione se vuoi:

  • Monitorare e risolvere problemi: Seguire le prestazioni del server web e gli errori analizzando i log in tempo reale.
  • Analizzare le prestazioni: Ottenere informazioni sulle pattern di traffico web e i metriche del server.
  • Centralizzare i log: Aggregare i log da più server Nginx in una singola istanza di OpenSearch per un migliore management.

Nota: il tempo di installazione dovrebbe essere intorno alle 30 minuti.

Step 1 – Installazione di Logstash sui Droplet

Logstash può essere installato utilizzando i file binari disponibili qui o i repository di pacchetti personalizzati per il tuo sistema operativo. Per un gestimento e aggiornamenti più semplici, si consiglia di solito l’utilizzo di repository di pacchetti. È possibile utilizzare il gestore di pacchetti APT nei sistemi basati su Debian come Ubuntu, mentre sui sistemi basati su Red Hat come CentOS o RHEL è possibile utilizzare yum. Entrambi i metodi garantiscono che Logstash sia integrato correttamente nell’infrastruttura di gestione pacchetti del tuo sistema, semplificando l’installazione e la manutenzione.

In questa sezione, ti guiderai attraverso l’installazione di Logstash utilizzando entrambi i gestori di pacchetti apt e yum, garantendo che sia in grado di configurare Logstash sul tuo Droplet indipendentemente dalla tua distribuzione Linux.

Per trovare il sistema operativo, esegui il seguente comando:

cat /etc/os-release

Per sistemi basati su APT (Ubuntu/Debian)

1.Scarica e installa la Chiave di Firma Pubblica:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic-keyring.gpg

2.Installa apt-transport-https se non è già installato:

sudo apt-get install apt-transport-https

3.Aggiungi e salva la definizione del repository di Logstash alla tua lista delle fonti apt:

echo "deb [signed-by=/usr/share/keyrings/elastic-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list

Nota: Assicurarsi di non utilizzare i comandi add-apt-repository poiché potrebbero aggiungere una voce deb-src non supportata. Se si incontra un errore relativo a una voce deb-src, la eliminare dalla file /etc/apt/sources.list. Se hai aggiunto la voce deb-src, vedrai un errore simile al seguente:

Unable to find expected entry 'main/source/Sources' in Release file (Wrong sources.list entry or malformed file)

Se solo elimini la voce deb-src dalla file /etc/apt/sources.list, l’installazione dovrebbe funzionare come previsto.

4. Aggiornare l’indice dei pacchetti per includere il nuovo repository:

sudo apt-get update

5. Installare Logstash utilizzando il gestore di pacchetti apt:

sudo apt-get install logstash

6. Avviare Logstash e abilitarlo a avviare automaticamente all’avvio:

sudo systemctl start logstash
sudo systemctl enable logstash

Logstash è ora installato e in esecuzione sul tuo sistema.

Per sistemi basati su YUM (CentOS/RHEL)

1. Scaricare e installare la chiave di firma pubblica per il repository di Logstash:

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

2. Creare un file di repository per Logstash in /etc/yum.repos.d/. Per esempio, creare un file chiamato logstash.repo. Puoi copiare e incollare i contenuti seguenti per creare il file e aggiornare il contenuto:

sudo tee /etc/yum.repos.d/logstash.repo > /dev/null <<EOF
[logstash-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

Il repository è pronto per l’uso.

3. Installare Logstash utilizzando il gestore di pacchetti YUM:

sudo yum install logstash

4. Avviare Logstash e abilitarlo a avviare automaticamente all’avvio:

sudo systemctl start logstash
sudo systemctl enable logstash

Logstash è ora installato e in esecuzione sul tuo sistema.

Step 2 – Installazione del plugin di output Open Search

Puoi installare il plugin di output OpenSearch eseguendo il seguente comando:

/usr/share/logstash/bin/logstash-plugin install logstash-output-opensearch

Puoi trovare maggiori informazioni sul plugin in questo repository del plugin logstash-output-opensearch.

Step 3 – Configurazione di Logstash per inviare i log di Nginx a OpenSearch

Un pipeline di Logstash è costituito da tre fasi principali: input, filtro e output. I pipeline di Logstash utilizzano plugin. Puoi utilizzare plugin comunitari o creare tuoi propii.

  • Input: Questa fase raccoglie dati da varie fonti. Logstash supporta numerosi plugin di input per gestire fonti dati come file di log, database, coda di messaggi e servizi cloud.
  • Filter: Questa fase processa e trasforma i dati raccolti nell’input. I filtri possono modificare, arricchire e strutturare i dati per renderli più utili e semplici da analizzare.
  • Output: Questo stadio invia i dati elaborati in una destinazione. Le destinazioni possono includere database, file e repository dati come OpenSearch.

Ora creiamo un pipeline.

1.Creare file di configurazione di Logstash in /etc/logstash/conf.d/nginx-to-opensearch.conf con i seguenti contenuti:

input {
  file {
    path => "/var/log/nginx/access.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => ["nginx_access"]
  }
  file {
    path => "/var/log/nginx/error.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => ["nginx_error"]
  }
}
filter {
  if "nginx_access" in [tags] {
    grok {
      match => { "message" => "%{IPORHOST:client_ip} - %{USER:ident} \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}\" %{NUMBER:response} %{NUMBER:bytes} \"%{DATA:referrer}\" \"%{DATA:user_agent}\"" }
    }
    mutate {
      remove_field => ["message", "[log][file][path]", "[event][original]"]
    }
  } else if "nginx_error" in [tags] {
    grok {
      match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\] \[%{LOGLEVEL:level}\] \[%{DATA:pid}\] \[%{DATA:tid}\] %{GREEDYDATA:error_message}" }
    }
    mutate {
      remove_field => ["message", "[log][file][path]", "[event][original]"]
    }
  }
}
output {
  if "nginx_access" in [tags] {
    opensearch {
      hosts => ["https://<OpenSearch-Hostname>:25060"]
      user => "doadmin"
      password => "<your_password>"
      index => "nginx_access-%{+YYYY.MM.dd}"
      ssl => true
      ssl_certificate_verification => true
    }
  } else if "nginx_error" in [tags] {
    opensearch {
      hosts => ["https://<OpenSearch-Hostname>:25060"]
      user => "doadmin"
      password => "<your_password>"
      index => "nginx_error-%{+YYYY.MM.dd}"
      ssl => true
      ssl_certificate_verification => true
    }
  }
}

Sostituisci:

  • OpenSearch-Hostname con il nome host del server OpenSearch.
  • <your_password> con la password di OpenSearch.

2.Applicare la nuova configurazione riavviando Logstash:

sudo systemctl restart logstash

3.Controllare i log di Logstash per assicurarsi che stia elaborando e inoltrando i dati correttamente:

sudo tail -f /var/log/logstash/logstash-plain.log

Ripartizione della configurazione di nginx-to-opensearch.conf

INPUT

Il blocco input configura due input file per leggere i log:

Log di Nginx:
Percorsi:
/var/log/nginx/access.log (per i log di accesso)
/var/log/nginx/error.log (per i log di errore)
Posizione di Inizio: beginning – Legge dall’inizio dei file di log.
Percorso sincedb: /dev/null – Disabilita il tracciamento per la lettura continua.
Etichette:
["nginx_access"] per i log di accesso
["nginx_error"] per i log di errore.

Nota: Assicurarsi che il servizio Logstash abbia accesso ai percorsi di input.

FILTRO

Il blocco filter processa i log in base alle loro etichette:

Elaborazione Log:
Log di Accesso:
Utilizza un filtro grok per parse il formato dei log di accesso, estraendo campi come client_ip, timestamp, method, request, http_version, response, bytes, referrer, e user_agent.
Rimuove il messaggio originale message e alcuni campi di metadata.

Log di Errore:
Cerca l’etichetta nginx_error e applica un filtro grok per estrarre campi come timestamp, level, pid, tid, e error_message.
Anche questo rimuove il message e i campi di metadata.

USCITA

Il blocco output indirizza gli eventi a OpenSearch in base alle loro etichette:

Routing a OpenSearch:
Sia per i log di accesso che per quelli di errore, specifica:
Host: URL dell’istanza OpenSearch.
Utente: doadmin per l’autenticazione.
Password: La password di OpenSearch.
Indice:
nginx_access-%{+YYYY.MM.dd} per i log di accesso
nginx_error-%{+YYYY.MM.dd} per i log di errore
Impostazioni SSL: Abilita SSL e la verifica del certificato.

Step 4 – Configurare OpenSearch

1.Apri il tuo browser web e naviga fino alla URL del Pannello OpenSearch:

https://<OpenSearch-Hostname>

Sostituisci OpenSearch-Hostname con l’hostname del tuo server OpenSearch.

2.Crea un modello di indice.
a. Sulla barra laterale sinistra, naviga fino a Gestione > Gestione Pannelli > Modelli di Indice.
b. Clicca su Crea modello di indice in alto a destra.
c. Inserisci nginx_access-* o nginx_error-* come modello di indice per corrispondere a tutti gli indici creati da Logstash e clicca su Prossimo passo.
d. Clicca su Crea modello di indice.

3.Assicurati che il modello di indice sia stato creato con successo e sia visibile nella lista dei modelli di indice.

4.Sulla barra laterale sinistra, vai a Scopri e seleziona il modello di indice che hai creato (nginx_access-* o nginx_error-*). Verifica che le righe del log siano visibili e indicizzati correttamente.

5.Crea Visualizzazioni e Pannelli. Consulta Come creare un Pannello in OpenSearch per maggiori dettagli.

Risoluzione Dei Problemi

Verifica connettività

Puoi verificare che Logstash sia in grado di connettersi ad OpenSearch testando la connettività:

curl -u doadmin:your_password -X GET "https://<OpenSearch-Hostname>:25060/_cat/indices?v"

Sostituisci:

  • OpenSearch-Hostname con il nome host del tuo server OpenSearch.
  • <your_password> con la tua password OpenSearch.

Ingestione dati

Puoi assicurarti che i dati siano indicizzati correttamente in OpenSearch utilizzando il seguente comando curl:

curl -u doadmin:your_password -X GET "http://<OpenSearch-Hostname>:25060/nginx-logs-*/_search?pretty"

Sostituisci:

  • OpenSearch-Hostname con il nome host del tuo server OpenSearch.
  • <your_password> con la tua password OpenSearch.

Configurazione firewall e rete

Assicurati che le regole firewall e le impostazioni di rete permettano il traffico tra Logstash e OpenSearch sulla porta 25060.

Conclusione

In questo guide, hai imparato come impostare Logstash per raccogliere e inoltrare i log di Nginx a OpenSearch.

Hai rivisto come usare i gestori di pacchetti apt o yum, a seconda della tua distribuzione Linux, per far partire Logstash sulla tua Droplet. Inoltre hai creato e modificato il file di configurazione di Logstash per assicurarti che i log di Nginx siano parsati correttamente e inviati a OpenSearch. Poi hai impostato un modello di indice in OpenSearch Dashboards per verificare che i log siano indicizzati correttamente e siano visibili per l’analisi. Compiendo questi passaggi, dovresti ora avere una configurazione funzionante in cui Logstash raccoglie i log di Nginx e li invia a OpenSearch. Questa configurazione ti consente di usare le potenti funzionalità di ricerca e visualizzazione di OpenSearch per analizzare i tuoi log server.

Se ci sono problemi, consulta le consigliere di soluzione fornite e rivolgersi alla documentazione di Logstash e alla documentazione di OpenSearch per ulteriore aiuto. La monitorizzazione regolare mantenterà il tuo sistema di logging funzionante fluentemente e efficientemente.

Source:
https://www.digitalocean.com/community/tutorials/forward-nginx-logs-to-opensearch-using-logstash