GNU/Linux >> Tutoriels Linux >  >> Linux

Comment configurer Logstash sur Linux avec ElasticSearch, Redis, Nginx

Logstash est une application open source de gestion des fichiers journaux centraux.

Vous pouvez collecter les journaux de plusieurs serveurs, de plusieurs applications, analyser ces journaux et les stocker dans un emplacement central. Une fois qu'il est stocké, vous pouvez utiliser une interface graphique Web pour rechercher des journaux, explorer les journaux et générer divers rapports.

Ce didacticiel explique les principes de base de logstash et tout ce que vous devez savoir sur l'installation et la configuration de logstash sur votre système.

1. Télécharger le binaire Logstatsh

Logstash fait partie de la famille elasticsearch. Téléchargez-le sur le site Web de logstash ici. Veuillez noter que Java doit être installé sur votre machine pour que cela fonctionne.

ou, utilisez curl pour le télécharger directement depuis le site Web.

wget https://download.elasticsearch.org/logstash/logstash/logstash-1.4.2.tar.gz 

tar zxvf logstash-1.4.2.tar.gz 

cd logstash-1.4.2

Remarque :Nous installerons logstash en utilisant yum plus tard. Pour l'instant, nous allons d'abord télécharger manuellement le binaire pour vérifier son fonctionnement à partir de la ligne de commande.

2. Logstash Spécifiez les options dans la ligne de commande

Pour comprendre les bases de logstash, à des fins de test, vérifions rapidement quelques éléments à partir de la ligne de commande.

Exécutez le logstash à partir de la ligne de commande comme indiqué ci-dessous. Lorsqu'il vous y invite, tapez simplement "hello world" comme entrée.

# bin/logstash -e 'input { stdin { } } output { stdout {} }' 
hello world 
2014-07-06T17:27:25.955+0000 base hello world

Dans la sortie ci-dessus, la 1ère ligne est le "hello world" que nous avons entré en utilisant stdin.

La 2ème ligne est la sortie affichée par logstash à l'aide de stdout. Fondamentalement, il recrache tout ce que nous avons entré dans le stdin.

Veuillez noter que la spécification de l'indicateur de ligne de commande -e permet à Logstash d'accepter une configuration directement à partir de la ligne de commande. Ceci est très utile pour tester rapidement des configurations sans avoir à modifier un fichier entre les itérations.

3. Modifier le format de sortie à l'aide du codec

Le codec rubydebug affichera vos données d'événement Logstash à l'aide de la bibliothèque ruby-awesome-print.

Ainsi, en reconfigurant la sortie "stdout" (ajout d'un "codec"), nous pouvons modifier la sortie de Logstash. En ajoutant des entrées, des sorties et des filtres à votre configuration, il est possible de masser les données du journal de plusieurs façons, afin de maximiser la flexibilité des données stockées lorsque vous les interrogez.

# bin/logstash -e 'input { stdin { } } output { stdout { codec => rubydebug } }' 
hello world 
{ 
       "message" => "", 
      "@version" => "1", 
    "@timestamp" => "2014-07-06T17:40:48.775Z", 
          "host" => "base" 
} 
{ 
       "message" => "hello world", 
      "@version" => "1", 
    "@timestamp" => "2014-07-06T17:40:48.776Z", 
          "host" => "base" 
}

4. Télécharger ElasticSearch

Maintenant que nous avons vu comment fonctionne le Logstash, allons de l'avant. Il est évident que nous ne pouvons pas transmettre manuellement l'entrée et la sortie de chaque journal. Donc, pour surmonter ce problème, nous devrons installer un logiciel appelé Elasticsearch .

Téléchargez l'elasticsearch à partir d'ici.

Ou, utilisez wget comme indiqué ci-dessous.

curl -O https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.4.0.tar.gz

tar zxvf elasticsearch-1.4.0.tar.gz

Démarrez le service elasticsearch comme indiqué ci-dessous :

cd elasticsearch-1.4.0/ 

./bin/elasticsearch

Remarque :ce didacticiel spécifie l'exécution de Logstash 1.4.2 avec Elasticsearch 1.4.0. Chaque version de Logstash a une version recommandée d'Elasticsearch avec laquelle s'associer. Assurez-vous que les versions correspondent en fonction de la version de Logstash que vous exécutez.

5. Vérifier ElasticSearch

Par défaut, elasticsearch s'exécute sur le port 9200.

À des fins de test, nous prendrons toujours l'entrée du stdin (similaire à notre exemple précédent), mais la sortie ne sera pas affichée sur le stdout. Au lieu de cela, il ira à elasticsearch.

Pour vérifier elasticsearch, exécutons ce qui suit. Lorsqu'il demande l'entrée, tapez simplement "les trucs de geek" comme indiqué ci-dessous.

# bin/logstash -e 'input { stdin { } } output { elasticsearch { host => localhost } }' 
the geek stuff

Puisque nous ne verrons pas la sortie dans le stdout, nous devrions regarder l'elasticsearch.

Accédez à l'URL suivante :

http://localhost:9200/_search?pretty

Ce qui précède affichera tous les messages disponibles dans elasticsearch. Vous devriez voir le message que nous avons entré dans la commande logstash ci-dessus ici dans la sortie.

{ 
  "took" : 4, 
  "timed_out" : false, 
  "_shards" : { 
    "total" : 5, 
    "successful" : 5, 
    "failed" : 0 
  }, 
  "hits" : { 
    "total" : 9, 
    "max_score" : 1.0, 
    "hits" : [ { 
      "_index" : "logstash-2014.07.06", 
      "_type" : "logs", 
      "_id" : "G3uZPQCMQ6ed4joNCuseew", 
      "_score" : 1.0, "_source" : {"message":"the geek stuff","@version":"1","@timestamp":"2014-07-06T18:09:46.612Z","host":"base"} 
    } ] 
  }

6. Entrées, sorties et codecs Logstash

Les entrées, les sorties, les codecs et les filtres sont au cœur de la configuration de Logstash. En créant un pipeline de traitement des événements, Logstash est capable d'extraire les données pertinentes de vos logs et de les mettre à disposition d'elasticsearch, afin d'interroger efficacement vos données.

Voici quelques-unes des entrées disponibles. Les entrées sont le mécanisme de transmission des données de journal à Logstash

  • fichier :lit à partir d'un fichier sur le système de fichiers, un peu comme la commande UNIX "tail -0a"
  • syslog :écoute sur le port 514 bien connu les messages syslog et les analyse selon le format RFC3164
  • redis :lit à partir d'un serveur redis, en utilisant à la fois les canaux redis et les listes redis. Redis est souvent utilisé comme "courtier" dans une installation Logstash centralisée, qui met en file d'attente les événements Logstash des "expéditeurs" Logstash distants
  • lumberjack :traite les événements envoyés dans le protocole bûcheron. Maintenant appelé logstash-forwarder.

Voici quelques-uns des filtres. Les filtres sont utilisés comme dispositifs de traitement intermédiaires dans la chaîne Logstash. Ils sont souvent combinés avec des conditionnels afin d'effectuer une certaine action sur un événement, s'il correspond à des critères particuliers.

  • grok :analyse un texte arbitraire et le structure. Grok est actuellement le meilleur moyen dans Logstash d'analyser les données de journal non structurées en quelque chose de structuré et interrogeable. Avec 120 modèles intégrés à Logstash, il est plus que probable que vous en trouviez un qui réponde à vos besoins !
  • mutation :le filtre de mutation vous permet d'effectuer des mutations générales sur les champs. Vous pouvez renommer, supprimer, remplacer et modifier les champs de vos événements.
  • drop :supprimer complètement un événement, par exemple, les événements de débogage.
  • cloner :faire une copie d'un événement, éventuellement en ajoutant ou en supprimant des champs.
  • geoip :ajoute des informations sur l'emplacement géographique des adresses IP (et affiche des graphiques étonnants dans kibana)

Voici quelques-uns des codecs. Les sorties sont la phase finale du pipeline Logstash. Un événement peut passer par plusieurs sorties pendant le traitement, mais une fois que toutes les sorties sont terminées, l'événement a terminé son exécution.

  • elasticsearch :si vous prévoyez d'enregistrer vos données dans un format efficace, pratique et facilement interrogeable
  • fichier :écrit les données d'événement dans un fichier sur le disque.
  • graphite :envoie des données d'événement à graphite, un outil open source populaire pour le stockage et la représentation graphique des métriques
  • statsd :un service qui "écoute les statistiques, telles que les compteurs et les minuteurs, envoyées via UDP et envoie des agrégats à un ou plusieurs services backend enfichables".

7. Utiliser le fichier de configuration Logstash

Il est maintenant temps de passer des options de ligne de commande au fichier de configuration. Au lieu de spécifier les options dans la ligne de commande, vous pouvez les spécifier dans un fichier .conf comme indiqué ci-dessous :

# vi logstash-simple.conf 
input { stdin { } } 
output { 
  elasticsearch { host => localhost } 
  stdout { codec => rubydebug } 
}

Maintenant, demandons au logstast de lire le fichier de configuration que nous venons de créer en utilisant l'option -f comme indiqué ci-dessous. À des fins de test, cela utilise toujours stdin et stdout. Alors, tapez un message après avoir entré cette commande.

# bin/logstash -f logstash-simple.conf 
This is Vadiraj
{ 
       "message" => "This is Vadiraj", 
      "@version" => "1", 
    "@timestamp" => "2014-11-07T04:59:20.959Z", 
          "host" => "base.thegeekstuff.com" 
}

8. Analyser le message de journal Apache d'entrée

Maintenant, faisons des configurations un peu plus avancées. Supprimez toutes les entrées du fichier logstash-simple.conf et ajoutez les lignes suivantes :

# vi logstash-simple.conf 
input { stdin { } } 

filter { 
  grok { 
    match => { "message" => "%{COMBINEDAPACHELOG}" } 
  } 
  date { 
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] 
  } 
} 

output { 
  elasticsearch { host => localhost } 
  stdout { codec => rubydebug } 
}

Maintenant, exécutez la commande logstash comme indiqué ci-dessous :

# bin/logstash -f logstash-filter.conf

Mais, cette fois, collez l'exemple d'entrée de fichier journal apache suivant comme entrée.

# bin/logstash -f logstash-filter.conf 
"127.0.0.1 - - [11/Dec/2013:00:01:45 -0800] "GET /xampp/status.php HTTP/1.1" 200 3891 "http://cadenza/xampp/navi.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0""

La sortie de logstatsh ressemblera à ce qui suit :

{ 
    "message" => "127.0.0.1 - - [11/Dec/2013:00:01:45 -0800] \"GET /xampp/status.php HTTP/1.1\" 200 3891 \"http://cadenza/xampp/navi.php\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0\"", 
   "@version" => "1", 
 "@timestamp" => "2013-12-11T08:01:45.000Z", 
       "host" => "base.tgs.com", 
   "clientip" => "127.0.0.1", 
      "ident" => "-", 
       "auth" => "-", 
  "timestamp" => "11/Dec/2013:00:01:45 -0800", 
       "verb" => "GET", 
    "request" => "/xampp/status.php", 
"httpversion" => "1.1", 
   "response" => "200", 
      "bytes" => "3891", 
   "referrer" => "\"http://cadenza/xampp/navi.php\"", 
      "agent" => "\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0\"" 
}

Comme vous le voyez dans la sortie ci-dessus, notre entrée est analysée en conséquence et toutes les valeurs sont divisées et stockées dans les champs correspondants.

Le filtre grok a extrait le journal apache et l'a divisé en morceaux utiles afin que nous puissions interroger plus tard.

9. Fichier de configuration Logstash pour le journal des erreurs Apache

Créez le fichier de configuration logstash suivant pour le fichier apache error_log.

# vi logstash-apache.conf 
input { 
  file { 
    path => "/var/log/httpd/error_log" 
    start_position => beginning 
  } 
} 

filter { 
  if [path] =~ "error" { 
    mutate { replace => { "type" => "apache_error" } } 
    grok { 
      match => { "message" => "%{COMBINEDAPACHELOG}" } 
    } 
  } 
  date { 
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] 
  } 
} 

output { 
  elasticsearch { 
    host => localhost 
  } 
  stdout { codec => rubydebug } 
}

Dans le fichier de configuration ci-dessus :

  • Le fichier d'entrée est /var/log/httpd/error_log et la position de départ sera le début du fichier.
  • Filtrez le fichier d'entrée et renommez (mutez) tout ce qui contient une erreur en apache_error. grok créera un apachelog combiné dans la colonne de message et les données afficheront l'horodatage au format donné.
  • La sortie sera stockée dans elasticsearch dans localhost et renvoyée via stdout au format d'impression ruby ​​avec le codec => rubydebug

10. Fichier de configuration Logstash pour le journal des erreurs Apache et le journal des accès

Nous pouvons spécifier une charte générique pour lire tous les fichiers journaux avec *_log comme indiqué ci-dessous.

Mais, nous devons également modifier les conditions en conséquence pour analyser à la fois le journal des accès et celui des erreurs, comme indiqué ci-dessous.

# vi logstash-apache.conf 
input { 
  file { 
    path => "/var/log/httpd/*_log" 
  } 
} 

filter { 
  if [path] =~ "access" { 
    mutate { replace => { type => "apache_access" } } 
    grok { 
      match => { "message" => "%{COMBINEDAPACHELOG}" } 
    } 
    date { 
      match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] 
    } 
  } else if [path] =~ "error" { 
    mutate { replace => { type => "apache_error" } } 
  } else { 
    mutate { replace => { type => "random_logs" } } 
  } 
} 

output { 
  elasticsearch { host => localhost } 
  stdout { codec => rubydebug } 
}

11. Configurer des référentiels Yum supplémentaires

Les tests sont terminés. Nous savons maintenant comment Logstash fonctionne avec elasticseach.

Nous allons installer les éléments suivants :

  • logstash – Notre serveur de journalisation central
  • Elasticsearch – Pour stocker les journaux
  • Redis – Pour le filtre
  • Nginx – Pour exécuter Kibana
  • Kibana – Est un magnifique tableau de bord graphique et rassemble tout

Avant l'installation, configurez les dépôts suivants :

# cd /etc/yum.repos.d/ 

# vi /etc/yum.repos.d/logstash.repo 
[logstash] 
name=Logstash
baseurl=http://packages.elasticsearch.org/logstash/1.4/centos 
gpgcheck=1 
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch 
enabled=1 

# vi /etc/yum.repos.d/elasticsearch.repo 
[elasticsearch] 
name=Elasticsearch
baseurl=http://packages.elasticsearch.org/elasticsearch/1.4/centos 
gpgcheck=1 
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch 
enabled=1

Configurez également le référentiel EPEL comme nous l'avons vu précédemment.

12. Installez Elasticsearch, Nginx et Redis et Logstash

Mettez d'abord le système à jour, puis installez logstash avec elasticsearch, redis et nginx comme indiqué ci-dessous :

yum clean all 

yum update -y 

yum install -y install elasticsearch redis nginx logstash

13. Installer Kibana

Installez Kibana pour le tableau de bord comme indiqué ci-dessous :

cd /opt/ 
wget https://download.elasticsearch.org/kibana/kibana/kibana-3.1.2.tar.gz

tar -xvzf kibana-3.1.2.tar.gz 

mv kibana-3.1.2 /usr/share/kibana3

14. Configurer Kibana

Nous devons parler à kibana d'elasticsearch. Pour cela, modifiez le config.js suivant.

# vi /usr/share/kibana3/config.js 
elasticsearch: "http://log.thegeekstuff.com:9200"

Dans le fichier ci-dessus, recherchez elasticsearch et remplacez "dev.kanbier.lan" dans cette ligne par votre domaine (par exemple :log.thegeekstuff.com)

15. Configurer Kibana pour qu'il s'exécute à partir de Nginx

Nous devons également faire en sorte que kibana s'exécute à partir du serveur Web nginx.

Ajoutez ce qui suit à nginx.conf

server { 
  listen                *:80 ; 

  server_name           log.thegeekstuff.com; 
  access_log            /var/log/nginx/kibana.myhost.org.access.log; 

  location / { 
    root  /usr/share/kibana3; 
    index  index.html  index.htm; 
  }

N'oubliez pas non plus de définir l'adresse IP appropriée de votre serveur dans le fichier redis.conf.

16. Configurer le fichier de configuration Logstash

Nous devons maintenant créer un fichier de configuration logstash similaire à l'exemple de fichier de configuration que nous avons utilisé précédemment.

Nous allons définir le chemin des fichiers journaux, le port sur lequel recevoir les journaux distants et informer logstash de l'outil elasticsearch.

# vi /etc/logstash/conf.d/logstash.conf 
input { 
  file { 
   type => "syslogpath => [ "/var/log/*.log", "/var/log/messages", "/var/log/syslog" ] 
   sincedb_path => "/opt/logstash/sincedb-access" 
  } 
  redis { 
    host => "10.37.129.8" 
    type => "redis-input" 
    data_type => "list" 
    key => "logstash" 
  } 
  syslog { 
    type => "syslog" 
    port => "5544" 
  } 
} 

filter { 
  grok { 
    type => "syslog" 
    match => [ "message", "%{SYSLOGBASE2}" ] 
    add_tag => [ "syslog", "grokked" ] 
  } 
} 

output { 
 elasticsearch { host => "log.thegeekstuff.com" } 
}"

17. Vérifier et démarrer Logstash, Elasticsearch, Redis et Nginx

Démarrez tous ces services comme indiqué ci-dessous :

service elasticsearch start 

service logstash start 

service nginx start 

service redis start

18. Vérifier l'interface graphique Web de Logstash

Ouvrez un navigateur et accédez au nom du serveur (hôte) utilisé dans le fichier de configuration ci-dessus. Par exemple :log.thegeekstuff.com

Vous verrez un graphique similaire à ce qui suit, à partir duquel vous pouvez manipuler, parcourir, explorer tous les fichiers journaux collectés par le logstash.

Maintenant que le serveur de logs est prêt, il ne vous reste plus qu'à rediriger les fichiers de logs des serveurs distants gérés par rsyslog vers ce serveur central en modifiant le fichier rsyslog.conf.


Linux
  1. Comment sécuriser Nginx avec Letsencrypt sur Rocky Linux/Centos 8

  2. Comment installer ModSecurity avec Nginx sur Rocky Linux 8

  3. Comment configurer Rsync avec SSH sur UNIX / Linux (rsync sans mot de passe)

  4. Comment configurer Rsync sans mot de passe avec SSH sous UNIX / Linux ?

  5. Comment vérifier le mot de passe avec Linux?

Comment configurer le pare-feu avec Gufw sur le bureau Linux

Comment configurer MySQL avec Docker sous Linux

Comment sécuriser les serveurs Linux avec SE Linux

Configurer l'équilibrage de charge avec HAProxy, Nginx et Keepalived sous Linux

Comment installer le framework Sails.js avec Nginx sur Rocky Linux 8

Cron Vs Anacron :Comment configurer Anacron sous Linux (avec un exemple)