Recherche de site Web

Transférer les journaux Apache vers OpenSearch via Logstash


Introduction

Une gestion efficace des journaux du serveur Web est cruciale pour maintenir les performances de votre site Web, résoudre les problèmes et obtenir des informations sur le comportement des utilisateurs. Apache est l'un des serveurs Web les plus populaires. Il génère des journaux d’accès et d’erreurs contenant des informations précieuses. Pour gérer et analyser efficacement ces journaux, vous pouvez utiliser Logstash pour les traiter et les transmettre à Managed OpenSearch de DigitalOcean pour l'indexation et la visualisation.

Dans ce didacticiel, nous vous guiderons dans l'installation de Logstash sur un Droplet, dans sa configuration pour collecter vos journaux Apache et dans leur envoi à Managed OpenSearch pour analyse.

Conditions préalables

  1. Droplet/s avec le serveur Web Apache installé.
  2. Cluster OpenSearch géré

Étape 1 - Installation de Logstash

Logstash peut être installé à l'aide des fichiers binaires OU via les référentiels de packages. Pour une gestion et des mises à jour plus faciles, l'utilisation de référentiels de packages est généralement recommandée.

Dans cette section, nous vous guiderons dans l'installation de Logstash sur votre Droplet à l'aide des gestionnaires de packages APT et YUM.

Identifions le système d'exploitation :

cat /etc/os-release

Pour les systèmes basés sur APT (Ubuntu/Debian)

Téléchargez et installez la clé de signature publique :

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

Vous devrez peut-être installer le paquet apt-transport-https sur Debian avant de continuer :

sudo apt-get install apt-transport-https

Enregistrez la définition du référentiel dans /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

Utilisez la méthode echo décrite ci-dessus pour ajouter le référentiel Logstash. N'utilisez pas add-apt-repository car cela ajoutera également une entrée deb-src, mais nous ne fournissons pas de package source. Si vous avez ajouté l'entrée deb-src, vous verrez une erreur semblable à la suivante :

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

Supprimez simplement l'entrée deb-src du fichier /etc/apt/sources.list et l'installation devrait fonctionner comme prévu.

Exécutez sudo apt-get update et le référentiel est prêt à être utilisé. Vous pouvez l'installer avec :

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

Pour les systèmes basés sur YUM (CentOS/RHEL)

Téléchargez et installez la clé de signature publique :

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

Ajoutez ce qui suit dans votre fichier /etc/yum.repos.d/logstash.repo. Vous pouvez utiliser « tee » pour mettre à jour et créer le fichier.

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

Votre référentiel est prêt à être utilisé. Vous pouvez l'installer avec :

sudo yum install logstash

Pour plus d'informations, veuillez vous référer au guide Installation de Logstash.

Étape 2 - Configuration de Logstash pour envoyer des journaux à OpenSearch

Un pipeline Logstash se compose de trois étapes principales : entrée, filtre et sortie. Les pipelines Logstash utilisent des plugins. Vous pouvez utiliser des plugins communautaires ou créer les vôtres.

  • Saisie : cette étape collecte des données provenant de diverses sources. Logstash prend en charge de nombreux plugins d'entrée pour gérer les sources de données telles que les fichiers journaux, les bases de données, les files d'attente de messages et les services cloud.

  • Filtre : cette étape traite et transforme les données collectées lors de l'étape de saisie. Les filtres peuvent modifier, enrichir et structurer les données pour les rendre plus utiles et plus faciles à analyser.

  • Sortie : cette étape envoie les données traitées vers une destination. Les destinations peuvent inclure des bases de données, des fichiers et des magasins de données comme OpenSearch.

Étape 3 - Installation du plugin de sortie Open Search

Le plugin de sortie OpenSearch peut être installé en exécutant la commande suivante :

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

Plus d'informations peuvent être trouvées sur ce référentiel logstash-output-opensearch-plugin.

Créons maintenant un pipeline :

Créez un nouveau fichier dans le chemin /etc/logstash/conf.d/ appelé apache_pipeline.conf et copiez le contenu suivant.

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

Remplacez le par le nom d'hôte de votre serveur OpenSearch et le par votre mot de passe OpenSearch.

Décomposons la configuration ci-dessus.

  • INPUT : Ceci est utilisé pour configurer une source pour les événements. Le plugin d'entrée « fichier » est utilisé ici.

  • path => « /var/log/apache2/access.log » : Spécifie le chemin d'accès au fichier journal d'accès Apache à partir duquel Logstash lira

    Assurez-vous que le service Logstash a accès au chemin d'entrée.

  • { }

  • start_position => « beginning » : définit où Logstash doit commencer à lire le fichier journal. « début » indique que Logstash doit commencer à traiter le fichier depuis le début plutôt que depuis la fin

  • Sincedb_path => « /dev/null » : Spécifie le chemin d'accès à un fichier Sincedb. Les fichiers Sincedb sont utilisés par Logstash pour garder une trace de la position actuelle dans les fichiers journaux, lui permettant de reprendre là où il s'était arrêté en cas de redémarrage ou d'échec.

  • tags => « apache_access » : attribue une balise aux événements lus à partir de cette entrée. Les balises sont utiles pour identifier et filtrer les événements dans Logstash, souvent utilisées en aval dans les étapes de sortie ou de filtrage de la configuration. Nous utilisons des balises pour ce dernier

  • FILTRE : est utilisé pour traiter les événements.

    En commençant par les conditions :

    (if "apache_access" in [tags]):
    

    Cela vérifie si la balise apache_access existe dans le champ [tags] des événements de journal entrants. Nous utilisons ce conditionnel pour appliquer le filtre GROK approprié pour les journaux d'accès et d'erreurs Apache.

  • Filtre Grok (pour les journaux d'accès Apache) :

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

    Le filtre grok %{HTTPD_COMBINEDLOG} est un modèle prédéfini dans Logstash utilisé pour analyser le format de journal d'accès combiné Apache. Cela extrait des champs tels que l'adresse IP, l'horodatage, la méthode HTTP, l'URI, le code d'état, etc., du champ de message des événements entrants.

  • Mutate Filter Remove (facultatif) : une fois les journaux Apache analysés, nous utilisons mutate-remove pour supprimer certains champs.

    mutate {
        remove_field => [ "message","[log][file][path]","[event][original]" ]
    }
    
  • Condition Else : Le bloc else est exécuté si la balise apache_access n'est pas présente dans [tags]. Ce bloc else contient un autre filtre GROK pour les journaux d'erreurs Apache.

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

    Ce filtre grok %{HTTPD24_ERRORLOG} analyse les messages qui correspondent au format du journal des erreurs Apache. Il extrait les champs pertinents pour les journaux d'erreurs comme l'horodatage, le niveau de journalisation, le message d'erreur, etc.

    Les modèles GROK peuvent être trouvés sur : https://github.com/logstash-plugins/logstash-patterns-core/tree/main/patterns.

  • OUTPUT : Le plugin de sortie envoie des événements à une destination particulière.

    Le bloc de sortie commence par une condition if. Nous utilisons ici des conditionnelles if

    if "apache_access" in [tags] {}
    

    Ceci, si conditionnel, est utilisé pour acheminer les journaux vers OpenSearch vers deux index distincts, apache_error et apache_access.

    Explorons le plugin OpenSearch Output :

    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
    

Étape 4 - Démarrer Logstash

Une fois le Pipeline configuré, démarrez le service Logstash :

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

Étape 5 - Dépannage

Vérifier la connectivité

Vous pouvez vérifier que Logstash peut se connecter à OpenSearch en testant la connectivité :

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

Remplacez <votre-opensearch-server> par le nom d'hôte de votre serveur OpenSearch et <votre_nom d'utilisateur>, <votre_mot de passe> par vos informations d'identification OpenSearch.

Ingestion de données

Assurez-vous que les données sont correctement indexées dans OpenSearch :

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

Remplacez <votre-opensearch-server> par le nom d'hôte de votre serveur OpenSearch et <votre_nom d'utilisateur>, <votre_mot de passe> par vos informations d'identification OpenSearch. De même, <votre-nom-index> avec le nom de l'index.

Configuration du pare-feu et du réseau

Assurez-vous que les règles de pare-feu et les paramètres réseau autorisent le trafic entre Logstash et OpenSearch sur le port 25060.

Journaux

Les journaux de Logstash peuvent être trouvés à l'adresse /var/log/logstash/logstash-plain.log

Pour plus de détails, reportez-vous à Dépannage.

Conclusion

Dans ce guide, nous avons expliqué la configuration de Logstash pour collecter et transférer les journaux Apache vers OpenSearch. Voici un bref récapitulatif de ce que nous avons couvert :

Installation de Logstash : nous avons expliqué comment utiliser les gestionnaires de packages APT ou YUM, en fonction de votre distribution Linux, pour installer Logstash sur votre Droplet.

Configuration de Logstash : nous avons créé et ajusté le fichier de configuration Logstash pour garantir que les journaux Apache sont correctement analysés et envoyés à OpenSearch.

Vérification dans OpenSearch : nous avons configuré un modèle d'index dans les tableaux de bord OpenSearch pour confirmer que vos journaux sont correctement indexés et sont visibles pour l'analyse.

Une fois ces étapes terminées, vous devriez maintenant disposer d'une configuration fonctionnelle dans laquelle Logstash collecte les journaux Apache et les envoie à OpenSearch.

Articles connexes: