2016-09-21 1 views
0

J'ai des fichiers syslog. J'utilise le filtre plug-in logstash syslog pour traiter ces journaux. Je reçois des messages dans le domaine syslog_message comme celui-ci:comment extraire une partie d'un champ et le stocker dans un autre champ dans le filtre de logstash?

syslog_message:[cdp/interface.ERR] - {- -} Error writing CDP frame on system. Link is down 

Mais je veux un nouveau champ qui devrait contenir seulement la partie avant .ERR i.e. « cdp/interface ». Cette partie varie et je ne sais pas combien de types se produiront. Donc, je veux un nouveau champ et je veux stocker cette partie sur ce champ, afin que je puisse tracer le nombre de ces termes dans kibana.

configuration actuelle logstash:

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 { 
     target => "syslog_timestamp" 
     match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] 
    } 

Après avoir ajouté une nouvelle grok du fichier de configuration tel que suggéré par @val

grok { 
    match => { "syslog_message" => "\[%{PROG:syslog_type}\.%{LOGLEVEL:syslog_level}\] %{GREEDYDATA:syslog_message}" } 
} 

Pour certaines des entrées grokparsefailure passe.
Quelques lignes pour lesquelles il ne parvient sont:

syslog_message: [hald.INFO]: Support query handler called 
syslog_message:[mgmtd.INFO]: Finished database commit 

Toute aide sera appréciée. Merci

+0

Comment se présente votre configuration actuelle de Logstash comme? – Val

+0

J'ai édité avec la configuration logstash actuelle @Val – sabya

Répondre

1

Vous pouvez ajouter un modèle dans votre filtre principal grok ou ajouter un autre filtre grok juste pour le champ syslog_message

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}" ] 

    } 
    # ====> add this <==== 
    grok { 
     match => { "syslog_message" => "\[%{PROG:syslog_type}\.%{LOGLEVEL:syslog_level}\]:? %{GREEDYDATA:syslog_message}" } 

    } 
    date { 
     target => "syslog_timestamp" 
     match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] 
    } 

En conséquence, vous obtiendrez deux champs supplémentaires, à savoir:

  • syslog_type: cdp/interface
  • syslog_level: ERR

et syslog_message ne contiendraient cette - {- -} Error writing CDP frame on system. Link is down

+0

hey, merci pour l'aide rapide mais je reçois grokparsefailure pour beaucoup d'entrées par exemple syslog_message: [hald.INFO]: gestionnaire de requête de soutien appelé pour de tels journaux d'entrée je reçois grokparsefailure. @Val – sabya

+0

Veuillez mettre à jour votre question avec quelques lignes de journal qui échouent. – Val

+0

j'ai édité avec 2 journaux d'entrée pour lesquels il échoue @Val .can vous s'il vous plaît regarder dans le? – sabya