Ricerca nel sito web

Inoltra i registri Apache a OpenSearch tramite Logstash


Introduzione

Una gestione efficace dei log del server web è fondamentale per mantenere le prestazioni del tuo sito web, risolvere i problemi e ottenere informazioni dettagliate sul comportamento degli utenti. Apache è uno dei server web più popolari. Genera log di accesso e di errore che contengono informazioni preziose. Per gestire e analizzare in modo efficiente questi registri, è possibile utilizzare Logstash per elaborarli e inoltrarli a OpenSearch gestito di DigitalOcean per l'indicizzazione e la visualizzazione.

In questo tutorial ti guideremo attraverso l'installazione di Logstash su un Droplet, configurandolo per raccogliere i tuoi log Apache e inviarli a Managed OpenSearch per l'analisi.

Prerequisiti

  1. Droplet/i con server Web Apache installato.
  2. Cluster OpenSearch gestito

Passaggio 1: installazione di Logstash

Logstash può essere installato utilizzando i file binari OPPURE tramite i repository dei pacchetti. Per semplificare la gestione e gli aggiornamenti, è generalmente consigliabile utilizzare i repository di pacchetti.

In questa sezione ti guideremo attraverso l'installazione di Logstash sul tuo Droplet utilizzando i gestori di pacchetti APT e YUM.

Identifichiamo il sistema operativo:

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

Utilizza il metodo echo descritto sopra per aggiungere il repository Logstash. Non utilizzare add-apt-repository poiché aggiungerà anche una voce deb-src, ma non forniamo un pacchetto sorgente. Se hai aggiunto la voce deb-src, vedrai un errore come il seguente:

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

Basta eliminare la voce deb-src dal file /etc/apt/sources.list e l'installazione dovrebbe funzionare come previsto.

Esegui sudo apt-get update e il repository sarà 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 quanto segue nel tuo file /etc/yum.repos.d/logstash.repo. Puoi utilizzare "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 ulteriori informazioni fare riferimento alla guida Installazione di Logstash.

Passaggio 2: configurazione di Logstash per inviare i registri a OpenSearch

Una pipeline Logstash è composta da tre fasi principali: input, filtro e output. Le pipeline Logstash utilizzano plugin. Puoi utilizzare i plugin della community o crearne di tuoi.

  • Input: questa fase raccoglie dati da varie fonti. Logstash supporta numerosi plug-in di input per gestire origini dati come file di registro, database, code di messaggi e servizi cloud.

  • Filtro: questa fase elabora e trasforma i dati raccolti nella fase di input. I filtri possono modificare, arricchire e strutturare i dati per renderli più utili e più facili da analizzare.

  • Output: questa fase invia i dati elaborati a una destinazione. Le destinazioni possono includere database, file e archivi dati come OpenSearch.

Passaggio 3: installazione del plug-in di output di ricerca aperta

Il plug-in di output OpenSearch può essere installato eseguendo il comando seguente:

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

Maggiori informazioni possono essere trovate su questo repository logstash-output-opensearch-plugin.

Ora creiamo una pipeline:

Crea un nuovo file nel percorso /etc/logstash/conf.d/ chiamato apache_pipeline.conf e copia 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 con il nome host del tuo server OpenSearch e con la tua password OpenSearch.

Analizziamo la configurazione di cui sopra.

  • INPUT: serve per configurare una sorgente per gli eventi. Qui viene utilizzato il plug-in di input "file".

  • path => “/var/log/apache2/access.log”: specifica il percorso del file di registro degli accessi Apache da cui Logstash leggerà

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

  • { }

  • start_position => “inizio”: Definisce dove Logstash dovrebbe iniziare a leggere il file di registro. "inizio" indica che Logstash dovrebbe iniziare l'elaborazione del file dall'inizio, anziché dalla fine

  • sincedb_path => “/dev/null”: specifica il percorso di un file sincedb. I file Sincedb vengono utilizzati da Logstash per tenere traccia della posizione corrente nei file di registro, consentendogli di riprendere da dove si era interrotto in caso di riavvii o errori.

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

  • FILTRO: serve per elaborare gli eventi.

    A partire dai condizionali:

    (if "apache_access" in [tags]):
    

    Questo controlla se il tag apache_access esiste nel campo [tags] degli eventi di registro in entrata. Utilizziamo questo condizionale per applicare il filtro GROK appropriato per gli accessi Apache e i log degli errori.

  • Filtro Grok (per i registri di accesso Apache):

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

    Il filtro grok %{HTTPD_COMBINEDLOG} è un modello predefinito in Logstash utilizzato per analizzare il formato del registro di accesso combinato di Apache. Questo estrae campi come indirizzo IP, timestamp, metodo HTTP, URI, codice di stato, ecc., dal campo del messaggio degli eventi in entrata.

  • Mutate Filter Remove (opzionale): dopo che i log di Apache sono stati analizzati, utilizziamo mutate-remove per rimuovere determinati campi.

    mutate {
        remove_field => [ "message","[log][file][path]","[event][original]" ]
    }
    
  • Condizione Else: il blocco else viene eseguito se il tag apache_access non è presente in [tags]. Questo blocco else contiene un altro filtro GROK per i log degli errori di Apache.

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

    Questo filtro grok %{HTTPD24_ERRORLOG} analizza i messaggi che corrispondono al formato del log degli errori di Apache. Estrae i campi rilevanti per i log degli errori come timestamp, livello di log, messaggio di errore, ecc.

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

  • OUTPUT: il plugin di output invia eventi a una destinazione particolare.

    Il blocco di output inizia con una condizione if. Stiamo usando i condizionali if qui

    if "apache_access" in [tags] {}
    

    Questo se condizionale viene utilizzato per instradare i log a OpenSearch a due indici separati, apache_error e apache_access.

    Esploriamo il plug-in Output di OpenSearch:

    hosts            => "https://XXX:25060"  Your Open search Hostname
    user             => "doadmin"            Your Open search Username
    password         => "XXXXX"              OpenSearch Password
    index            => "apache_error"       Index name in OpenSearch
    ssl_certificate_verification => true     Enabled SSL certificate verification
    

Passaggio 4: avviare Logstash

Una volta configurata la Pipeline, avvia il servizio Logstash:

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

Passaggio 5: risoluzione dei problemi

Controlla la connettività

Puoi verificare che Logstash possa connettersi a OpenSearch testando la connettività:

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

Sostituisci <tuo-server-opensearch> con il nome host e <tuo_nome_utente> del tuo server OpenSearch, <tua_password> con le tue credenziali OpenSearch.

Inserimento dati

Assicurati che i dati siano indicizzati correttamente in OpenSearch:

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

Sostituisci <tuo-server-opensearch> con il nome host e <tuo_nome_utente> del tuo server OpenSearch, <tua_password> con le tue credenziali OpenSearch. Allo stesso modo, <your-index-name> con il nome dell'indice.

Firewall e configurazione di rete

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

Registri

I log per Logstash possono essere trovati su /var/log/logstash/logstash-plain.log

Per i dettagli, fare riferimento a Risoluzione dei problemi.

Conclusione

In questa guida, abbiamo illustrato la configurazione di Logstash per raccogliere e inoltrare i registri Apache a OpenSearch. Ecco un breve riepilogo di ciò che abbiamo trattato:

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

Configurazione di Logstash: abbiamo creato e modificato il file di configurazione Logstash per garantire che i registri Apache vengano analizzati e inviati correttamente a OpenSearch.

Verifica in OpenSearch: impostiamo un modello di indice nelle dashboard di OpenSearch per confermare che i tuoi registri siano indicizzati correttamente e siano visibili per l'analisi.

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

Articoli correlati: