Apache-logbestanden doorsturen naar OpenSearch via Logstash

Inleiding

Effectief beheren van web server logbestanden is cruciaal voor het behoud van de prestaties van uw website, het oplossen van problemen en het verkrijgen van inzichten in gebruikersgedrag. Apache is een van de meest populaire web servers. Het genereert toegangs- en foutlogbestanden die nuttige informatie bevatten. Om deze logbestanden efficiënt te beheren en te analyseren, kunt u Logstash gebruiken om ze te verwerken en door te sturen naar DigitalOcean’s Managed OpenSearch voor indelen en visualisatie.

In deze handleiding zullen we u doorsturen hoe u Logstash kunt installeren op een Droplet, hem configureert om uw Apache logbestanden te verzamelen en ze naar Managed OpenSearch stuurt voor analyse.

Vereisten

  1. Droplets met een Apache Webserver geïnstalleerd.
  2. Gemanaged OpenSearch Cluster

Stap 1 – Installatie van Logstash

Logstash kan geïnstalleerd worden met de binaire bestanden of via de pakketbronnen. Om gemakkelijker te kunnen beheren en bij te werken, wordt het gebruik van pakketbronnen over het algemeen aanbevolen.

In dit gedeelte zullen we u doorsturen hoe u Logstash kunt installeren op uw Droplet, zowel met de APT als de YUM pakketbeheerders.

Laten we de OS identificeren:

cat /etc/os-release

Voor systeem op basis van APT (Ubuntu/Debian)

Download en installeer de Publieke Handtekeningtoets:

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

U moet misschien het pakket apt-transport-https op Debian installeren voordat u doorgaat:

sudo apt-get install apt-transport-https

Sla de repository definitie op 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

Gebruik de methode echo zoals hierboven beschreven om de Logstash repository toe te voegen. Gebruik add-apt-repository niet, want dit zal ook een deb-src item toevoegen, maar we bieden geen bronpakket aan. Als u het deb-src item heeft toegevoegd, zult u een foutmelding zien die er ongeveer uitziet:

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

Verwijder alleen het deb-src item uit het bestand /etc/apt/sources.list en de installatie zou zoals verwacht moeten werken.

Voer sudo apt-get update uit en de repository is klaar voor gebruik. U kunt hem installeren met:

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

Voor systemen gebaseerd op YUM (CentOS/RHEL)

Download en installeer de openbare handtekeningssleutel:

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

Voeg het volgende toe aan uw bestand /etc/yum.repos.d/logstash.repo. U kunt ‘tee’ gebruiken om het bestand bij te werken en te maken.

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

Uw opslagplaats is klaar voor gebruik. U kunt hem installeren met:

sudo yum install logstash

Voor meer informatie, raadpleeg de Installeren van Logstashhandleiding.

Stap 2 – Configureren van Logstash om logboeken naar OpenSearch te verzenden

Een Logstash pijpleiding bestaat uit drie hoofdstadia: invoer, filter en uitvoer. Logstash pijpleidingen gebruiken plugins. U kunt gemeenschapsplug-ins gebruiken of u kunt uw eigen maken.

  • Invoer: In deze fase worden gegevens verzameld van verschillende bronnen. Logstash ondersteunt veel invoerplug-ins om gegevensbronnen zoals logbestanden, databases, berichtenwachtrijen en clouddiensten te kunnen verwerken.

  • Filter: In deze fase worden de in de invoerfase verzamelde gegevens verwerkt en veranderd. Filters kunnen de gegevens wijzigen, verrijkken en opbouwen om ze handiger en gemakkelijker te kunnen analyseren.
  • Uitvoer: In deze fase worden de verwerkt gegevens naar een bestemming verzonden. Bestemmingen kunnen bestaan uit databases, bestanden en gegevensopslag zoals OpenSearch.

Stap 3 – Installeren van de Open Search Uitvoer Plugin

Het OpenSearch uitvoerplugin kan worden geïnstalleerd door de volgende opdracht uit te voeren:

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

Meer informatie vindt u op dit logstash-output-opensearch-plugin archief.

Nu laten we een pijpleiding aanmaken:

Maak een nieuw bestand aan in de map /etc/logstash/conf.d/ genaamd apache_pipeline.conf en kopieer het volgende inhoud.

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
  }
  }
}

Vervang <OpenSearch_Host> door de hostname van uw OpenSearch-server en <OpenSearch_Password> door uw OpenSearch-wachtwoord.

Laat ons de bovenstaande configuratie uitleggen.

  • INPUT: Hiermee wordt een bron voor gebeurtenissen geconfigureerd. Het ‘file’ input plugin wordt hier gebruikt.

  • path => “/var/log/apache2/access.log” : Geeft de weg naar het Apache toegangslogbestand dat Logstash vanaf deze plek zal lezen

    Zorg ervoor dat de Logstash-dienst toegang heeft tot de invoerpaden.

  • start_position => “beginning”: Geeft aan waar Logstash moet beginnen met het lezen van het logbestand. “beginning” betekent dat Logstash moet beginnen met het verwerken van het bestand vanaf het begin, in plaats van vanaf het einde.

  • sincedb_path => “/dev/null”: Specificeert het pad naar een sincedb-bestand. Sincedb-bestanden worden door Logstash gebruikt om de huidige positie in logbestanden bij te houden, zodat het kan hervatten waar het was gebleven in geval van herstarts of storingen.

  • tags => “apache_access”: Wijst een tag toe aan gebeurtenissen die vanuit deze invoer worden gelezen. Tags zijn nuttig voor het identificeren en filteren van gebeurtenissen binnen Logstash, vaak gebruikt in de uitvoer- of filterfasen van de configuratie. We gebruiken tags voor het laatste

  • FILTER: wordt gebruikt om gebeurtenissen te verwerken.

    Beginnen met condities:

    (if "apache_access" in [tags]):
    

    Dit controleert of de tag apache_access bestaat in het [tags] veld van de inkomende logboekgebeurtenissen. We gebruiken deze conditie om de juiste GROK-filter toe te passen op Apache toegang en foutlogboeken.

  • Grok-filter (voor Apache toegangslogboeken):

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

    Het Grok-filter %{HTTPD_COMBINEDLOG} is een voorgedefinieerd patroon in Logstash dat gebruikt wordt om de Apache gecombineerde toegangslogboekindeling te parsen. Dit extracteert velden zoals IP-adres, tijdstip, HTTP-methode, URI, statuscode, etc., uit het berichtveld van inkomende gebeurtenissen.

  • Mutatiefilter Verwijderen (optioneel): Na het parsen van de Apache-logbestanden gebruiken we mutate-remove om bepaalde velden te verwijderen.

    mutate {
        remove_field => [
            "message",
            "[log][file][path]",
            "[event][original]"
        ]
    }
    
  • Andere voorwaarde: De else-blok wordt uitgevoerd als de tag apache_access niet in [tags] aanwezig is. Dit else-blok bevat een ander GROK-filter voor Apache foutenlogboeken.

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

    Dit GROK-filter %{HTTPD24_ERRORLOG} doorloopt berichten die overeenkomen met het Apache foutenlogboekformaat. Het extraheert velden relevant voor foutenlogboeken zoals timestampe, logniveau, foutmelding, enzovoort.

    GROK- patronen zijn te vinden op: https://github.com/logstash-plugins/logstash-patterns-core/tree/main/patterns.

  • UITVOER: De uitvoerplug-in zendt gebeurtenissen naar een bepaalde bestemming.

    Het uitvoerblok begint met een if-conditie. We gebruiken hier if-condities

    als "apache_access" in [tags] {}
    

    Deze if-conditie wordt gebruikt om logs naar OpenSearch te routeren naar twee aparte indexen, apache_error en apache_access.

    Laten we de OpenSearch Uitvoerplug-in bekijken:

    hosts            => "https://XXX:25060"  Uw OpenSearch Hostnaam
    user             => "doadmin"            Uw OpenSearch Gebruikersnaam
    password         => "XXXXX"              OpenSearch Wachtwoord
    index            => "apache_error"       Indexnaam in OpenSearch
    ssl_certificate_verification => true     SSL-certificaatverificatie ingeschakeld
    

Stap 4 – Start Logstash

Zodra de Pipeline is geconfigureerd, start de Logstash dienst:

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

Stap 5 – Probleemoplossing

Controleer de Connectiviteit

U kunt controleren of Logstash kan verbinden met OpenSearch door de verbindingsondersteuning te testen:

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

Vervang `` door de hostname van uw OpenSearch server en ``, `` door uw OpenSearch inloggegevens.

Data Ingestie

Zorg ervoor dat data correct geindexeerd wordt in OpenSearch:

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

Vervang `` door de hostname van uw OpenSearch server en ``, `` door uw OpenSearch inloggegevens. Ook `` moet u vervangen door de indexnaam.

Firewall en Netwerk Configuratie

Verzeker u ervan dat de firewallregels en netwerkinstellingen toestaan dat er verkeer tussen Logstash en OpenSearch wordt doorgevoerd op poort 25060.

Logs

De Logstash-logbestanden zijn te vinden op /var/log/logstash/logstash-plain.log

Voor details, raadpleeg Probleemoplossing.

Conclusie

In deze handleiding zijn we doorheen het instellen van Logstash om Apache-logbestanden te verzamelen en door te sturen naar OpenSearch gegaan. Hier is een snel overzicht van wat we hebben besproken:

Logstash installeren: We hebben beschreven hoe u Logstash kunt installeren op uw Droplet, afhankelijk van uw Linux-distributie, met behulp van APT of YUM pakketbeheerders.

Logstash configureren: We hebben een Logstash-configuratiebestand aangemaakt en aangepast om ervoor te zorgen dat Apache-logbestanden correct worden geparsed en naar OpenSearch worden verzonden.

Verificatie in OpenSearch: We hebben een indexpatroon in OpenSearch Dashboards ingesteld om te controleren of uw logbestanden correct zijn geïndexeerd en zichtbaar zijn voor analyse.

Na de uitvoering van deze stappen zou u nu een functionele setup moeten hebben waarin Logstash Apache-logbestanden verzameld en naar OpenSearch verzendt.

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