Ci-dessous, les différences entre deux révisions de la page.
wiki:monitoring:elk:logstash [2019/01/14 18:17] frazew quelques rectifications |
wiki:monitoring:elk:logstash [2020/06/27 18:16] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Logstash ====== | ||
- | ===== Pourquoi ? ===== | ||
- | |||
- | [[http:// | ||
- | La sortie formatée est ensuite envoyée au cluster Elasticsearch afin d' | ||
- | |||
- | Nous utilisons actuellement la version 2.0 de Logstash. | ||
- | |||
- | |||
- | ===== Comment ? ===== | ||
- | |||
- | ==== Architecture syslog ==== | ||
- | |||
- | Pour chaque machine un serveur syslog (rsyslog ou syslog-ng) surveille les fichiers journaux. | ||
- | Chaque nouveau message est ainsi transféré vers le serveur Logstash, où il est analysé et formaté avant d' | ||
- | |||
- | ==== Architecture snmp ==== | ||
- | |||
- | Chaque WLC est configuré pour envoyer des traps SNMP sur logstash. Le niveau de verbosité de ces traps est configuré au niveau du WLC. Ces traps sont variés et contiennent une grande richesse d' | ||
- | |||
- | |||
- | ==== Configuration ==== | ||
- | |||
- | === rsyslog === | ||
- | |||
- | Pour transmettre les journaux vers Logstash, il est nécessaire de créer sur la machine concernée le fichier **/ | ||
- | |||
- | Par défaut rsyslog surveille déjà tous les messages système (cron, authentification, | ||
- | |||
- | Pour rajouter un fichier supplémentaire, | ||
- | |||
- | $ModLoad imfile | ||
- | |||
- | Puis pour chaque fichier à surveiller : | ||
- | |||
- | < | ||
- | $InputFileName / | ||
- | $InputFileTag mon-service: | ||
- | $InputFileStateFile stat-mon-service | ||
- | $InputFileSeverity info | ||
- | $InputRunFileMonitor | ||
- | </ | ||
- | |||
- | Le champ **Tag** doit contenir par défaut le nom du service d'où est issu le journal, mais il est possible de rajouter des règles supplémentaires dans Logstash. | ||
- | |||
- | Par exemple, pour un serveur web Apache : | ||
- | |||
- | < | ||
- | $InputFileTag apache-mon-site-error: | ||
- | </ | ||
- | |||
- | créera un champ " | ||
- | |||
- | A noter que les deux points ":" | ||
- | |||
- | Puis pour tout envoyer vers le container Logstash sur le port 514 en UDP : | ||
- | |||
- | < | ||
- | *.* @logstash.priv.minet.net: | ||
- | </ | ||
- | |||
- | === logstash === | ||
- | |||
- | Les fichiers de configuration de Logstash sont situés sur la machine logstashvm à l' | ||
- | |||
- | Les différents fichiers décrivent les étapes de récupération des logs. | ||
- | |||
- | On note principalement trois sections : | ||
- | |||
- | * La section '' | ||
- | |||
- | < | ||
- | udp { | ||
- | type => udp | ||
- | port => 514 | ||
- | } | ||
- | </ | ||
- | |||
- | * Les sections '' | ||
- | |||
- | < | ||
- | grok { | ||
- | match => [ " | ||
- | } | ||
- | </ | ||
- | |||
- | Une liste des expressions pré-définies et de leur valeur est disponible sur le [[https:// | ||
- | |||
- | Ensuite, on écrit les bons patterns pour matcher les logs radius, DHCP, etc. | ||
- | |||
- | * La section '' | ||
- | |||
- | < | ||
- | output { | ||
- | elasticsearch { | ||
- | hosts => [' | ||
- | template_overwrite => true | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | ==== Configuration snmp ==== | ||
- | |||
- | === WLC === | ||
- | |||
- | La configuration des traps SNMP peut se faire en SSH sur le WLC ou en cliclic sur l' | ||
- | |||
- | === logstash === | ||
- | |||
- | On utilise le plugin snmptrap pour configurer une entrée de type SNMP trap dans '' | ||
- | |||
- | < | ||
- | snmptrap { | ||
- | yamlmibdir => "/ | ||
- | type => " | ||
- | community => " | ||
- | host => " | ||
- | port => " | ||
- | type => " | ||
- | tags => [" | ||
- | } | ||
- | </ | ||
- | |||
- | Le rôle de la ligne de configuration '' | ||
- | |||
- | On ajoute ensuite une série de filtres pour parser unifier les différentes clés et les rendre "plus jolies" | ||
- | |||
- | < | ||
- | ruby { | ||
- | code => " | ||
- | begin | ||
- | keys = event.to_hash.keys | ||
- | keys.each{|key| | ||
- | if ( key =~ / | ||
- | |||
- | newkey = key.gsub(/ | ||
- | event.set(newkey, | ||
- | if ( newkey =~ / | ||
- | event.set(newkey, | ||
- | end | ||
- | |||
- | end | ||
- | } | ||
- | |||
- | rescue Exception => e | ||
- | event.set(' | ||
- | end | ||
- | " | ||
- | } | ||
- | </ | ||
- | |||
- | Le plugin SNMP renvoie les MACs en ASCII et pas en hexa, ce qui rend à la base leur lecture particulièrement désagréable. Ce petit bout de ruby permet de corriger ça. | ||
- | |||
- | <WRAP center round important 90%> | ||
- | **Note :** Il faut installer le plugin '' | ||
- | </ | ||
- | |||
- | == Retour sur yamlmibdir == | ||
- | |||
- | Comme vous le savez sans doute, le SNMP fonctionne par OID qui ont la forme suivante : '' | ||
- | |||
- | Ces MIBs doivent être téléchargés et " | ||
- | Pour celà, on télécharge les MIBs nécessaires ainsi que leurs dépendances dans le dossier ''/ | ||
- | |||
- | <wrap lo>Les MIBs Cisco sont disponibles sur leur site, les non-Cisco peuvent être trouvés sur [[http:// | ||
- | |||
- | Le chemin de base pour " | ||
- | |||
- | <wrap lo>Notez que l' | ||
- | |||
- | |||
- | Si tout se passe bien, les mibs sont générés en YAML dans ''/ | ||
- | |||
- | Comme pour les autres composants de la [[: |