Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
logstash [2014/03/27 16:56] – [Configuration des dépôts yum] madkologstash [2014/04/18 11:57] (Version actuelle) – [Configuration] madko
Ligne 30: Ligne 30:
  
 <file> <file>
-[elasticsearch-1.0+[elasticsearch-1.1
-name=Elasticsearch repository for 1.0.x packages +name=Elasticsearch repository for 1.1.x packages 
-baseurl=http://packages.elasticsearch.org/elasticsearch/1.0/centos+baseurl=http://packages.elasticsearch.org/elasticsearch/1.1/centos
 gpgcheck=1 gpgcheck=1
 gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
Ligne 43: Ligne 43:
  
 <file> <file>
-[logstash-1.3+[logstash-1.4
-name=logstash repository for 1.3.x packages +name=logstash repository for 1.4.x packages 
-baseurl=http://packages.elasticsearch.org/logstash/1.3/centos+baseurl=http://packages.elasticsearch.org/logstash/1.4/centos
 gpgcheck=1 gpgcheck=1
 gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
Ligne 57: Ligne 57:
  
  
 +<code>
 yum install elasticsearch yum install elasticsearch
 +</code>
  
  
Ligne 63: Ligne 65:
  
  
 +<code>
 yum install logstash yum install logstash
 +</code>
  
 ==== Configuration ==== ==== Configuration ====
Ligne 70: Ligne 73:
  
 <file> <file>
 +# Ouverture en entrée d'un port d'écoute utilisant le protocol syslog
 input { input {
-tcp {+  tcp { 
 +    port => 5544  
 +    type => syslog  
 +  } 
 +  udp { 
 +    port => 5544  
 +    type => syslog  
 +  } 
 +}
  
-port => 5544\\  +filter { 
-type => syslog\\ +  # Traitement type syslog, le type étant marqué sur les données entrant par nos ports de type syslog 
 +  if [type] == "syslog"
 +    grok { 
 +      # Si on ne veut pas garder le message non traité 
 +      overwrite => "message" 
 +        # rsyslong envoi des messages de type : <Numero>Ligne Syslog avec le message 
 +      match => 
 +        "message" => [ "^(?:<%{NONNEGINT:syslog_pri}>)?%{SYSLOGBASE2} %{GREEDYDATA:message}", "^(?:<%{NONNEGINT:syslog_pri}>)(?:%{SYSLOGTIMESTAMP:timestamp}|%{TIMESTAMP_ISO8601:timestamp8601}) %{SYSLOGHOST:logsource} %{DATA:program}:%{GREEDYDATA:message}"
 +      } 
 +      # on ajoute des tags perso, pratique pour filtrer dans l'interface kibana 
 +      add_tag => [ "syslog", "grokked" ]  
 +    } 
 +    # On ignore le champ syslog_pri 
 +    syslog_pri { }
  
 +    # on crée une colonne hostip avec le contenu de la variable host
 +    mutate {
 +      add_field => [ "hostip", "%{host}"
 +    }
 +
 +    # on resoud l'ip présent dans la colonne host
 +    dns {
 +      reverse => [ "host"
 +      action => "replace" 
 +    }
 +  }
 } }
-udp { 
- 
-port => 5544\\  
-type => syslog\\  
  
 +# on stock dans elasticsearch
 +output {
 +  elasticsearch {
 +    host => "localhost" 
 +  }
 } }
-}+</file>
  
-filter { +===== Architecture avec broker =====
-# Process syslog +
-if [type] == "syslog" {+
  
-grok {\\  
-  overwrite => "message"\\  
-  match => {\\  
-    "message" => "^(?:<%{NONNEGINT:syslog_pri}>)?%{SYSLOGBASE2} %{GREEDYDATA:message}"\\  
-    }\\  
-  add_tag => [ "syslog", "grokked" ]\\  
-}\\  
-syslog_pri { } 
  
-mutate {+Le broker va servir de cache pour la reception des logs. Cela améliore les performances de logstash et permet d'éviter de perdre certains logs en cas de soucis. Mais le principal intérêt est de pouvoir utiliser l'agent logstash sur les clients pour envoyer des évènements qui ne seraient pas gérés par rsyslog.
  
-  add_field => [ "hostip", "%{host}" ]\\  
-} 
  
-dns {+En gros l'agent logstash envoi ces données préparsées dans la base du broker. Ensuite le logstash sur le collecteur lit régulièrement le broker pour voir si des évènements sont arrivés. Il les supprime du broker et les traite.
  
-  reverse => [ "host" ]\\  
-  action => "replace"\\  
-} 
  
-+Logstash agent => Broker (sur collecteur) <= logstash serveur
-}+
  
-output { 
-elasticsearch { 
  
-host => "localhost"\+Il est possible d'utiliser "redis" comme broker en frontal de logstash. 
 + 
 +==== Installation de redis ==== 
 + 
 + 
 +Le paquet redis est dispo dans le dépôt EPEL. 
 + 
 + 
 +<code> 
 +yum install redis 
 +</code> 
 + 
 +==== ​Configuration de redis ==== 
 + 
 + 
 +Par défaut redis n'écoute que sur 127.0.0.1. Son fichier de configuration est /etc/redis.conf. Il faut changer la ligne bind 127.0.0.1. 
 + 
 + 
 +==== Configuration du logstash agent ==== 
 + 
 + 
 +Logstash sur un noeud à monitorer est dit agent. En entrée il surveille des fichiers de logs (souvent non gérés par syslog), et en sortie envoi le résultat sur le logstash (ou broken) sur le collecteur. 
 + 
 + 
 +Exemple de configuration pour parser un fichier de log puppet: 
 + 
 + 
 +<file> 
 +input { 
 +  file { 
 +    path => "/var/log/puppet/puppet.log" 
 +    type => "puppet" 
 +  } 
 + 
 +filter { 
 +  if [type] == "puppet"
 +    # Ex: Tue Mar 25 18:07:07 +0100 2014 Puppet (notice): Finished catalog run in 51.85 seconds 
 +    mutate { replace => { "type" => "puppet" } } 
 +    grok { 
 +      overwrite => "message" 
 +      match => { 
 +        "message" => "%{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{ISO8601_TIMEZONE} %{YEAR} %{DATA:puppet_module} \(%{DATA:puppet_loglevel}): %{GREEDYDATA:message}" 
 +      } 
 +      add_tag => [ "puppet", "grokked"
 +    } 
 +  } 
 + 
 +output {
  
-} 
 } }
 </file> </file>
 +
 +==== Configuration du logstash collecteur ====
 +
 +
 +Le serveur logstash centralisant les logs a juste besoin d'une nouvelle entrée lui indiquant qu'il doit passer par un broker de type redis, en lui précisant son adresse:
 +
 +
 +CONF ICI
  
  • logstash.1395939399.txt.gz
  • Dernière modification : 2014/03/27 16:56
  • de madko