2017-08-08 3 views
0

J'ai une grande collection de serveurs qui envoient des messages syslog à un serveur rsyslog central, qui à son tour leur envoie un logstash. Le problème que j'ai est que les serveurs d'envoi envoient le nom de la machine en tant que "localhost" ou l'adresse IP 10.0.0.0/8 de leur eth0nic interne, ce qui n'est pas un gros problème car le serveur rsyslog scinde les fichiers journaux sur l'IP source, et il les enregistre dans leur fichier server-server-1.2.3.4.log du serveur. Le problème se produit lorsque le serveur rsyslog envoie (avec *.* @logstash) à logstash puis n'a aucune des informations IP source.Est-il possible de réécrire les champs lors du transfert dans rsyslog?

Est-il possible que rsyslog modifie le nom/IP de la machine source afin qu'elle inclue l'adresse IP source, afin que logstash puisse agréger sur cette adresse IP source correcte?

Voici ma config logstash

input { 
    udp { 
    port => 514 
    type => syslog 
} 
} 

filter { 
    if [type] == "syslog" { 
    grok { 
     match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" } 
     add_field => [ "received_at", "%{@timestamp}" ] 
     add_field => [ "received_from", "%{host}" ] 
    } 
    date { 
     match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] 
    } 
    } 
} 


output { 
elasticsearch { 
    hosts => "esearch1:443" 
    ssl => "true" 
    manage_template => false 
}} 

Merci de

+0

Je ne pouvais pas trouver un moyen de le faire dans syslog ou avec iptables d'une manière qui na pas créer des boucles de circulation, donc je '' 'samplicate''' avec' '' ./samplicate -d 5 -S -p 514 -s 10.3.1.183 10.3.1.183/1554 10.3.1.183/1555''' –

Répondre

0

Il est impossible dans rsyslog de réécrire les champs.

Mais vous pouvez facilement obtenir l'adresse IP du système à partir de laquelle le message est généré.

Il existe une propriété de chaque message rsyslog, fromhost-ip. Vous pouvez l'utiliser dans votre config logstash.

Peut-être quelque chose comme,

match => { "message" => "%{SYSLOG-IP:syslog_fromhost-ip} %{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" } 

Plus ici à ce sujet, http://www.rsyslog.com/doc/master/configuration/properties.html#message-properties