Configuration

Logstash est le programme qui va recevoir les évènements des différentes applications ou des agents Beats, les traiter et les envoyer à Elasticsearch pour qu’ils soient insérés en base.

Il fonctionne avec un système de pipeline ou flux de traitement, c’est lors de cette étape que les logs seront formatés suivant des règles prédéfinies ou personnalisées.

Traitement

Les pipelines sont toujours constitués de la même manière, soit :

Entrée → filtrage et formatage → sortie

Les entrées peuvent être de plusieurs types :

  • Entrée standard (stdin)
  • Agent beat
  • Lecture de fichiers

Le traitement sera vu plus tard avec l’outil « Grok »

Les sorties peuvent être de plusieurs types :

  • Sortie standard (stdout)
  • Elasticsearch

Pour chaque section du pipeline, plusieurs définitions sont utilisables en même temps, on peut recevoir en entrée des données issues d'un fichier de log, d'un agent Beat et de stdin en même temps, tout comme en sortie, on peut envoyer les données aux serveurs Elasticsearch et sur stdout

Le flux de traitement des données se définit dans un fichier de configuration, ici, le fichier /etc/logstash/conf.d/pipeline.conf qui se présente sous la forme suivante :

/etc/logstash/conf.d/pipeline.conf
input {
        file {
                type => "syslog-ng"
                path => ["/var/log/syslog","/var/log/messages"]
 
        }
}
output {
        stdout { codec => rubydebug }
        elasticsearch {
                hosts => ["http://10.40.30.186:9200","http://10.40.30.187:9200","http://10.40.30.188:9200"]
 
        }
}

Le fichier de configuration ci-dessus lit les fichiers /var/log/syslog et /var/log/messages, affiche sur la sortie standard l’évènement traité et formaté et l’envoie également aux serveurs Elasticsearch pour être inséré en base de données.

Les possibilités offertes par Logstash se trouvent agrandies lorsqu'on commence à utiliser les plugins. Plusieurs plugins sont mis à notre disposition en entrée, en sortie et même en filtre, plus de détails sur ces plugins sur la page

Plugins

Grok

Il est possible d’aller encore plus loin dans le traitement des données en utilisant le plugin grok qui va permettre d’utiliser des expressions rationnelles pour récupérer les informations intéressantes dans un évènement. C'est là qu'on va se servir de la fonction filter dans le fichier de configuration de Logstash.

filter {
  grok {
    patterns_dir => ["/usr/share/grok/patterns"]
    match => { "message" => "%{IP :monip}" }
  }
}

Ces quelques lignes vont aller lire le fichier contenant les expressions rationnelles à utiliser pour récupérer la valeur souhaitée (/usr/share/grok/patterns), ici pour récupérer une adresse IP, l'expression qu’il va utiliser sera la suivante :

grep "IP " /usr/share/grok/patterns/base
 
IP (?<![0-9])(?:(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2}))(?![0-9])

Il va ensuite chercher dans la partie message toute chaîne de caractère matchant l’expression.

A partir de là, Logstash va créer un champ supplémentaire contenant la chaîne récupérée grâce à l’expression rationnelle et l’afficher dans la partie demandée (monip).

echo '192.168.252.2 - root [13/Feb/2018:13:42:56 +0100] "POST /api/saved_objects/bulk_get HTTP/1.1" 200 431 "https://10.40.30.179/app/kibana" "Mozilla/5.0 (X11; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0"' >> /var/log/syslog
{
       "message" => "192.168.252.2 - root [13/Feb/2018:13:42:56 +0100] \"POST /api/saved_objects/bulk_get HTTP/1.1\" 200 431 \"https://10.40.30.179/app/kibana\" \"Mozilla/5.0 (X11; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0\"",
    "@timestamp" => 2018-02-13T16:59:03.674Z,
          "type" => "syslog-ng",
          "host" => "CIS-ELK-Logstash01",
          "path" => "/var/log/syslog",
      "@version" => "1",
     "monip" => "192.168.252.2"
}

Par défaut, un fichier base est présent dans le répertoire /usr/share/grok/patterns/ avec des expressions à matcher. Il est possible de rajouter des fichiers avec des expressions personnalisées pour matcher nos propres règles.

Afin de matcher des contenus complexes, Grok va enchaîner des expressions rationnelles jusqu’à avoir la forme souhaitées, c'est le cas du pattern COMBINEDAPACHELOG qui aura la forme suivante:

COMBINEDAPACHELOG %{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response} (?:%{NUMBER:bytes}|-) (?:"(?:%{URI:referrer}|-)"|%{QS:referrer}) %{QS:agent}

Ou IPORHOST est lui même une combinaison des patterns IP (vu plus haut) et hostname:

HOSTNAME \b(?:[0-9A-Za-z][0-9A-Za-z-]{0,62})(?:\.(?:[0-9A-Za-z][0-9A-Za-z-]{0,62}))*(\.?|\b)
IP (?<![0-9])(?:(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2}))(?![0-9])
IPORHOST (?:%{HOSTNAME}|%{IP})

Vous l'aurez compris, Grok est extrêmement puissant et permet de traiter n'importe quelle donnée à partir du moment ou on peut lui appliquer des expressions rationnelles.

GeoIP

Traitements multiples

Selon le type de données à traiter ainsi que les filtres à appliquer, il est possible de définir plusieurs traitements dans plusieurs fichiers de configuration. Ces fichiers se trouvent tous dans le répertoire /etc/logstash/conf.d et prennent la même forme que le fichier pipeline.conf.

Afin que tous les fichiers soient pris en compte lors du démarrage de Logstash, il est nécessaire de modifier le fichier /etc/logstash/pipeline.yml qui se présente sous la forme suivante :

/etc/logstash/pipeline.yml
- pipeline.id: global
  path.config: "/etc/logstash/conf.d/*.conf"

Ici, Logstash utilisera tous les fichiers présents dans le dossier en y appliquant la même configuration.

Il est possible de configurer chaque traitement avec des paramètres spécifiques comme le nombre de workers ou encore la queue persistante ( stockage sur le disque en cas d'indisponibilité du service Logstash).

/etc/logstash/pipeline.yml
- pipeline.id: traitement01
  path.config: "/etc/logstash/conf.d/t1.config"
  pipeline.workers: 3
- pipeline.id: traitement02
  path.config: "/etc/logstash/conf.d/t2.config"
  queue.type: persisted

Beats

Les Beats sont des agents placés sur les machines à surveiller. Il est possible de configurer ces agents pour leur faire envoyer les données à plusieurs endroits, soit directement aux Elasticsearchs, soit à un Logstash.

Les deux agents qui nous intéressent sont Filebeat et Metricbeat.

Il est possible pour les agents d'utiliser des modules en les activant via la commande suivante:

metricbeat modules enable <module>

Les modules disponibles se trouvent dans le répertoire /etc/metricbeat/modules.d/

Filebeat

L’agent Filebeat va récupérer les évènements présents dans les fichiers de logs, il est possible de lui spécifier quels fichiers utiliser.

La configuration de l’agent se fait dans le fichier /etc/filebeat/filebeat.yml :

/etc/filebeat/filebeat.yml
- type: log
  enabled: true
  paths:
    - /var/log/testlog.log
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
setup.template.settings:
  index.number_of_shards: 3
  index.codec: best_compression
 
output.logstash :
        hosts :["10.116.45.253 :5044"]

Metricbeat

L’agent Metricbeat va récupérer les métriques systèmes tels que la charge CPU, la RAM utilisée, les débits réseaux…

La configuration de l’agent se fait dans le fichier /etc/metricbeat/metricbeat.yml :

/etc/metricbeat/metricbeat.yml
metricbeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
setup.template.settings:
  index.number_of_shards: 1
  index.codec: best_compression
 
output.logstash :
        hosts :["10.116.45.253 :5044"]

Logstash

L’utilisation des agents demande également une modification des fichiers de traitement utilisés par Logstash afin qu’ils puissent recevoir en entrée les données envoyées par les agents.

Cette modification s’effectue dans la partie input de Logstash :

input {
         beats{
                port => "5044"
        }
}

Le port doit correspondre à celui spécifié dans la configuration des agents Beat.

wiki/utilisation.avancee.de.logstash.txt · Dernière modification: 2018/04/24 10:51 par root
CC0 1.0 Universal
Powered by PHP Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 Valid HTML5