Inoltrare i log di Apache a OpenSearch tramite Logstash

Introduzione

La gestione efficiente dei log del server web è cruciale per mantenere la performance del sito web, risolvere problemi e ottenere insights sull’utilizzo degli utenti. Apache è uno dei server web più popolari, e genera log di accesso e errori che contengono informazioni preziose. Per gestire e analizzare questi log in maniera efficiente, è possibile usare Logstash per processare e inviarli a DigitalOcean OpenSearch gestito per l’indicizzazione e la visualizzazione.

In questo tutorial, vi guiderò attraverso l’installazione di Logstash su una Droplet, configurarlo per raccogliere i vostri log Apache e inviarli a OpenSearch gestito per l’analisi.

Prerequisiti

  1. Droplet/i con installato il server web Apache.
  2. Gruppo OpenSearch gestito

Step 1 – Installa Logstash

Logstash può essere installato utilizzando i file binari o tramite i repository dei pacchetti. Per una gestione e aggiornamenti più facili, è generalmente consigliato l’uso di repository di pacchetti.

In questa sezione, vi guiderà attraverso l’installazione di Logstash sulla vostra Droplet utilizzando entrambi i gestori di pacchetti APT e YUM.

Identifichiamo l’OS:

cat /etc/os-release

Per Sistemi Basati su APT (Ubuntu/Debian)

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

Potrebbe essere necessario installare il pacchetto apt-transport-https su Debian prima di procedere:

sudo apt-get install apt-transport-https

Salva la definizione del repository in /etc/apt/sources.list.d/elastic-8.x.list:

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

Usa il metodo echo descritto prima per aggiungere il repository di Logstash. Non usare add-apt-repository perché aggiungerà anche un’entrata deb-src, ma non forniamo un pacchetto sorgente. Se hai aggiunto l’entrata 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)

Semplicemente elimina l’entrata deb-src dal file /etc/apt/sources.list e l’installazione dovrebbe funzionare come atteso.

Esegui sudo apt-get update e il repository è pronto per l’uso. Puoi installarlo con:

sudo apt-get update && sudo apt-get install logstash

Per sistemi basati su YUM (CentOS/RHEL)

Scarica e installa la chiave di firma pubblica:

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

Aggiungi il seguente nel tuo file /etc/yum.repos.d/logstash.repo. Puoi usare ‘tee’ per aggiornare e creare il file.

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 tuo repository è pronto per l’uso. Puoi installarlo con:

sudo yum install logstash

Per ulteriore informazione, consulta il guidetto Installing Logstash.

Fase 2 – Configurazione di Logstash per inviare i log a OpenSearch

Un pipeline di Logstash consta di tre fasi principali: input, filtro e output. I pipeline di Logstash usano plugin. Puoi usare plugin comunitari o creare i tuoi stessi.

  • Input: Questa fase raccoglie dati da varie fonti. Logstash supporta numerosi plugin di input per gestire fonti di dati come file di log, database, coda di messaggi e servizi cloud.

  • Filter: Questo stadio processa e trasforma i dati raccolti nell’stadio di input. I filtri possono modificare, arricchire e strutturare i dati per renderli più utili e facili da analizzare.
  • Output: Questo stadio invia i dati processati in una destinazione. Le destinazioni possono includere database, file e archivi dati come OpenSearch.

Step 3 – Installazione del Plugin di Output Open Search

Il plugin di output OpenSearch può essere installato eseguendo il seguente comando:

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

Maggiori informazioni sono disponibili in questo logstash-output-opensearch-plugin repository.

Ora creiamo un pipeline:

Creare un nuovo file nella directory /etc/logstash/conf.d/ denominato apache_pipeline.conf e copiare il seguente contenuto.

input {
  file {
    path => "/var/log/apache2/access.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => "apache_access"
  }

  file {
    path => "/var/log/apache2/error.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => "apache_error"
  }
}

filter {
  if "apache_access" in [tags] {
    grok {
        match => { "message" => "%{HTTPD_COMBINEDLOG}" }
    }
    mutate {
        remove_field => [ "message","[log][file][path]","[event][original]" ]
      }
   } else {
   grok {
        match => { "message" => "%{HTTPD24_ERRORLOG}" }
    }
   }
}

output {
  if "apache_access" in [tags] {
  opensearch {
    hosts       => "https://<OpenSearch-Hostname>:25060"
    user        => "doadmin"
    password    => "<your_password>"
    index       => "apache_access"
    ssl_certificate_verification => true
  }

  } else {
  opensearch {
    hosts       => "https://<OpenSearch-Hostname>:25060"
    user        => "doadmin"
    password    => "<your_password>"
    index       => "apache_error"
    ssl_certificate_verification => true
  }
  }
}

Sostituisci <OpenSearch_Host> con il nome host del tuo server OpenSearch e <OpenSearch_Password> con la tua password OpenSearch.

Ora analizzeremo la configurazione sopra indicata.

  • INPUT: questo è utilizzato per configurare una sorgente per gli eventi. Il plugin di input ‘file’ è utilizzato qui.

  • path => “/var/log/apache2/access.log” : Specifica il percorso del file di log di accesso di Apache che Logstash leggerà.

    Assicurati che il servizio di Logstash abbia accesso al percorso di input.

  • start_position => “beginning”: Define da dove Logstash dovrebbe iniziare a leggere il file di log. “beginning” indica che Logstash dovrebbe iniziare a processare il file dall’inizio invece che dalla fine

  • sincedb_path => “/dev/null”: Specifica il percorso di un file sincedb. I file sincedb sono utilizzati da Logstash per tenere traccia della posizione corrente nei file di log, consentendo di riprendere da dove è stato interrotto in caso di riavvii o guasti.

  • tags => “apache_access”: Assegna un tag agli eventi letti da questo input. I tag sono utili per identificare e filtrare eventi all’interno di Logstash, spesso utilizzati a valle nelle fasi di output o filtraggio della configurazione. Utilizziamo i tag per quest’ultimo scopo

  • FILTER: viene utilizzato per elaborare gli eventi.

    Iniziamo con le condizioni:

    (if "apache_access" in [tags]):
    

    Questo verifica se il tag apache_access esiste nel campo [tags] degli eventi di log in arrivo. Usiamo questa condizione per applicare il filtro GROK appropriato per i log di accesso ed errore di Apache.

  • Filtro Grok (per i Log di Accesso di Apache):

    grok {
        match => { "message" => "%{HTTPD_COMBINEDLOG}" }
    }
    

    Il filtro Grok %{HTTPD_COMBINEDLOG} è un modello predefinito in Logstash utilizzato per analizzare il formato dei log di accesso combinati di Apache. Questo estrae campi come l’indirizzo IP, l’orario, il metodo HTTP, l’URI, il codice di stato, ecc., dalla colonna messaggio degli eventi in entrata.

  • Filtro di Mutazione Rimuovi (opzionale): Dopo aver parsificato i log di Apache, usiamo mutate-remove per rimuovere certi campi.

    mutate {
        remove_field => [
            "message",
            "[log][file][path]",
            "[event][original]"
        ]
    }
    
  • Altro caso: La sezione else viene eseguita se la tag apache_access non è presente in [tags]. Questo blocco else contiene un altro filtro GROK per i log di errore Apache.

    grok {
        match => { "message" => "%{HTTPD24_ERRORLOG}" }
    }
    

    Questo filtro GROK %{HTTPD24_ERRORLOG} analizza i messaggi che corrispondono al formato dei log di errore Apache. Estrae i campi relativi ai log di errore come timestamp, livello di log, messaggio di errore, ecc.

    I pattern GROK possono essere trovati in: https://github.com/logstash-plugins/logstash-patterns-core/tree/main/patterns.

  • OUTPUT: Il plugin output invia eventi in una destinazione specifica.

    Il blocco output inizia con una condizione if. qui utilizziamo condizioni if.

    if "apache_access" in [tags] {}
    

    Questa condizione if è utilizzata per indirizzare i log a OpenSearch in due indici separati, apache_error e apache_access.

    Esploriamo il plugin Output OpenSearch:

    hosts            => "https://XXX:25060"  Il tuo hostname Open search
    user             => "doadmin"            Il tuo nome utente Open search
    password         => "XXXXX"              Password OpenSearch
    index            => "apache_error"       Nome dell'indice in OpenSearch
    ssl_certificate_verification => true     Abilitazione della verifica del certificato SSL
    

Step 4 – Avviare Logstash

Una volta configurata la Pipeline, avvia il servizio Logstash:

systemctl enable logstash.service
systemctl start logstash.service
systemctl status logstash.service

Step 5 – Soluzione problemi

Verifica della connettività

Potete verificare che Logstash sia in grado di connettersi a OpenSearch testando la connettività:

curl -u your_username:your_password -X GET "https://your-opensearch-server:25060/_cat/indices?v"

Sostituite <your-opensearch-server> con l’hostname del server OpenSearch e <your_username>, <your_password> con le credenziali OpenSearch.

Ingestione dati

Assicuratevi che i dati siano indiziati correttamente in OpenSearch:

curl -u your_username:your_password -X GET "http://your-opensearch-server:25060/<your-index-name>/_search?pretty"

Sostituite <your-opensearch-server> con l’hostname del server OpenSearch e <your_username>, <your_password> con le vostre credenziali OpenSearch. Allo stesso modo, sostituite <your-index-name> con il nome dell’indice.

Firewall e Configurazione della Rete

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

Log

I log di Logstash possono essere trovati in /var/log/logstash/logstash-plain.log

Per i dettagli, fai riferimento a Troubleshooting.

Conclusione

In questa guida, abbiamo spiegato come configurare Logstash per raccogliere e inoltrare i log di Apache a OpenSearch. Ecco un rapido riepilogo di ciò che abbiamo coperto:

Installazione di Logstash: Abbiamo spiegato come utilizzare i gestori di pacchetti APT o YUM, a seconda della tua distribuzione Linux, per installare Logstash sul tuo Droplet.

Configurazione di Logstash: Abbiamo creato e regolato il file di configurazione di Logstash per garantire che i log di Apache siano correttamente analizzati e inviati a OpenSearch.

Verifica in OpenSearch: Abbiamo configurato un modello di indice in OpenSearch Dashboards per confermare che i tuoi log siano indicizzati correttamente e visibili per l’analisi.

Con questi passaggi completati, dovresti ora avere una configurazione funzionale in cui Logstash raccoglie i log di Apache e li invia a OpenSearch.

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