Configurer Logstash sur les Droplets pour transférer les journaux de Nginx vers OpenSearch géré

Introduction

Gérer les journaux de serveur Web est essentiel pour assurer une fluidité à votre site Internet, résoudre les problèmes et comprendre le comportement des utilisateurs. Si vous utilisez Nginx, il génère des journaux d’accès et d’erreurs remplis d’informations précieuses. Pour gérer et analyser ces journaux, vous pouvez utiliser Logstash pour le traitement et le transfert, et l’OpenSearch géré par DigitalOcean pour l’indexation et la visualisation des données.

Dans ce tutoriel, nous vous guiderons à travers l’installation de Logstash sur un Droplet, la configuration pour collecter vos journaux Nginx et l’envoi vers l’OpenSearch géré par DigitalOcean.

Prérequis

Scénario d’utilisation

Vous aurez peut-être besoin de cette configuration si vous souhaitez :

  • Surveiller et résoudre les problèmes : Suivre les performances et les erreurs du serveur Web en analysant les journaux de navigation en direct.
  • Analyser la performance : Obtenir des informations sur les trafics Web et les métriques du serveur.
  • Centraliser les journaux : Agréger les journaux de plusieurs serveurs Nginx vers une seule instance OpenSearch pour une gestion plus facile.

Remarque : Le temps d’installation devrait être d’environ 30 minutes.

Étape 1 – Installez Logstash sur les Droplets

Logstash peut être installé en utilisant les fichiers binaires disponibles ici ou les dépôts de paquets personnalisés pour votre système d’exploitation. Pour une gestion et des mises à jour plus aisées, l’utilisation de dépôts de paquets est généralement recommandée. Vous pouvez utiliser le gestionnaire de paquets APT sur les systèmes basés sur Debian, tels que Ubuntu, tandis que sur les systèmes basés sur Red Hat, tels que CentOS ou RHEL, vous pouvez utiliser yum. Les deux méthodes assurent que Logstash est correctement intégré à l’infrastructure de gestion de paquets de votre système, simplifiant l’installation et le maintenance.

Dans cette section, nous vous guiderons à travers l’installation de Logstash en utilisant à la fois le gestionnaire de paquets apt et yum, vous permettant de configurer Logstash sur votre Droplet, peu importe votre distribution Linux.

Pour trouver le système d’exploitation, exécutez la commande suivante :

cat /etc/os-release

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

1.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

2.Installez apt-transport-https si elle n’est pas déjà installée :

sudo apt-get install apt-transport-https

3.Ajoutez et enregistrez la définition du dépôt Logstash à votre liste des sources 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

Note : Assurez-vous de ne pas utiliser les commandes add-apt-repository car elles peuvent ajouter une entrée deb-src non prise en charge. Si vous rencontrez une erreur liée à une entrée deb-src, supprimez-la du fichier /etc/apt/sources.list. Si vous avez ajouté l’entrée deb-src, vous verrez une erreur similaire à celle suivante :

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

Si vous supprimez simplement l’entrée deb-src du fichier /etc/apt/sources.list, l’installation devrait fonctionner comme prévu.

4. Mettez à jour l’index des paquets pour inclure le nouveau dépôt :

sudo apt-get update

5. Installez Logstash en utilisant le gestionnaire de paquets apt :

sudo apt-get install logstash

6. Démarrez Logstash et activez-le pour démarrer automatiquement à l’initialisation :

sudo systemctl start logstash
sudo systemctl enable logstash

Logstash est maintenant installé et en cours d’exécution sur votre système.

Pour les Systèmes Basés sur YUM (CentOS/RHEL)

1. Téléchargez et installez la clé de signature publique pour le dépôt Logstash :

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

2. Créez un fichier de dépôt pour Logstash dans /etc/yum.repos.d/. Par exemple, créez un fichier nommé logstash.repo. Vous pouvez copier et coller le contenu suivant pour créer le fichier et mettre à jour son contenu :

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

Le dépôt est prêt à être utilisé.

3. Installez Logstash en utilisant le gestionnaire de paquets YUM :

sudo yum install logstash

4. Démarrez Logstash et activez-le pour démarrer automatiquement à l’initialisation :

sudo systemctl start logstash
sudo systemctl enable logstash

Logstash est maintenant installé et en cours d’exécution sur votre système.

Étape 2 – Installation du plugin d’extraction Open Search

Vous pouvez installer le plugin d’extraction OpenSearch en exécutant la commande suivante :

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

Vous pouvez trouver plus d’information sur le plugin sur ce dépôt de plugin logstash-output-opensearch.

Étape 3 – Configuration de Logstash pour envoyer les journaux de Nginx à OpenSearch

Un pipeline Logstash se compose de trois étapes principales : l’entrée, le filtrage et la sortie. Les pipelines Logstash utilisent des plugins. Vous pouvez utiliser des plugins communautaires ou en créer vous-même.

  • Entrée : Cette étape collecte des données à partir de diverses sources. Logstash supporte de nombreux plugins d’entrée pour gérer des sources de données telles que les fichiers de journaux, les bases de données, les files de messages et les services cloud.
  • Filtre : Cette étape traite et transforme les données collectées à l’étape d’entrée. 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 stockages de données tels que OpenSearch.

Maintenant, créez un pipeline.

1.Créer un fichier de configuration Logstash à /etc/logstash/conf.d/nginx-to-opensearch.conf avec les contenu suivants :

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

Remplacez :

  • OpenSearch-Hostname par le nom d’hôte du serveur OpenSearch.
  • <your_password> par votre mot de passe OpenSearch.

2.Appliquez la nouvelle configuration en redémarrant Logstash :

sudo systemctl restart logstash

3.Vérifiez les journaux de Logstash pour s’assurer qu’il traite et transmet correctement les données :

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

Analyse du fichier de configuration nginx-to-opensearch.conf

ENTREE

Le bloc input configure deux entrees de fichier pour lire les journaux :

Journaux Nginx :
chemins :
/var/log/nginx/access.log (pour les journaux d’accès)
/var/log/nginx/error.log (pour les journaux d’erreurs)
Position de démarrage : beginning – Lire depuis le début des fichiers de journal.
Chemin de Sincedb : /dev/null – Désactive le suivi pour la lecture continue.
Étiquettes :
["nginx_access"] pour les journaux d’accès
["nginx_error"] pour les journaux d’erreurs

Note : Assurez-vous que le service Logstash a accès aux chemins d’entrée.

FILTER

Le bloc filter traite les journaux en fonction de leurs étiquettes :

Traitement des journaux :
Journaux d’accès :
Utilise un filtre grok pour parser le format de journal d’accès, extraignant des champs tels que client_ip, timestamp, method, request, http_version, response, bytes, referrer et user_agent.
Supprime l’original message et certains champs de métadonnées.

Journaux d’erreur :
Recherche l’étiquette nginx_error et applique un filtre grok pour extraire des champs tels que timestamp, level, pid, tid et error_message.
Supprime également le message et les champs de métadonnées.

OUTPUT

Le bloc output route les événements vers OpenSearch en fonction de leurs étiquettes :

Route vers OpenSearch :
Pour les journaux d’accès et les journaux d’erreur, il spécifie :
Hôtes : URL de l’instance OpenSearch.
Utilisateur : doadmin pour l’authentification.
Mot de passe : Votre mot de passe OpenSearch.
Index :
nginx_access-%{+YYYY.MM.dd} pour les journaux d’accès
nginx_error-%{+YYYY.MM.dd} pour les journaux d’erreur
Paramètres de SSL : Active le SSL et la vérification du certificat.

Étape 4 – Configurer OpenSearch

1.Ouvrez votre navigateur Web et allez à l’URL du tableau de bord OpenSearch :

https://<OpenSearch-Hostname>

Remplacez OpenSearch-Hostname par l’hôte du serveur OpenSearch.

2.Créer un modèle d’index.
a. Dans la barre latérale de gauche, naviguez vers Gestion > Gestion du tableau de bord > Modèles d’index.
b. Cliquez sur Créer un modèle d’index en haut à droite.
c. Entrez nginx_access-* ou nginx_error-* comme modèle d’index pour correspondre à tous les indices créés par Logstash, puis cliquez sur Suivant.
d. Cliquez sur Créer le modèle d’index.

3.Vérifiez que le modèle d’index a été créé avec succès et est visible dans la liste des modèles d’index.

4.Dans la barre latérale de gauche, allez à Découvrir et sélectionnez le modèle d’index que vous avez créé (nginx_access-* ou nginx_error-*). Vérifiez que les entrées de journal sont visibles et indexées correctement.

5.Créer des visualisations et des tableaux de bord. Consultez Comment Créer un Tableau de Bord dans OpenSearch pour plus de détails.

Dépannage

Vérifier la connectivité

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

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

Remplacez :

  • OpenSearch-Hostname par le nom d’hôte du serveur OpenSearch.
  • <your_password> par votre mot de passe OpenSearch.

Ingestion de données

Vous pouvez vous assurer que les données sont correctement indexées dans OpenSearch en utilisant la commande curl suivante :

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

Remplacez :

  • OpenSearch-Hostname par le nom d’hôte de votre serveur OpenSearch.
  • <your_password> par votre mot de passe OpenSearch

Pare-feu et configuration réseau

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

Conclusion

Dans ce guide, vous avez appris à configurer Logstash pour collecter et transférer les journaux de Nginx vers OpenSearch.

Vous avez également vu comment utiliser les gestionnaires de paquets apt ou yum, selon votre distribution Linux, pour démarrer Logstash sur votre Droplet. Vous avez créé et ajusté le fichier de configuration de Logstash afin que les journaux de Nginx soient correctement parsés et envoyés vers OpenSearch. Ensuite, vous avez configuré un modèle d’index dans les Tableaux de bord d’OpenSearch afin de vérifier que les journaux sont correctement indexés et visibles pour l’analyse.Avec ces étapes terminées, vous devriez désormais avoir une configuration fonctionnelle où Logstash collecte les journaux de Nginx et les envoie vers OpenSearch. Cette configuration permet d’utiliser les puissantes fonctions de recherche et de visualisation d’OpenSearch pour analyser vos journaux de serveur.

Si vous rencontrez des problèmes, consultez les conseils de dépannage que nous avons fournis et référez-vous aux documentations de Logstash et d’OpenSearch pour plus d’aide. Le suivi régulier maintiendra votre système de journalisation en fonctionnement fluide et efficace.

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