2014-05-16 5 views
0

J'ai un certain nombre de serveurs ESXi qui transmettent les journaux à un loghost central. Mon loghost exécute rsyslog. Cela semble fonctionner correctement.Logstash, obtention du nom de serveur distant

Le problème principal que je rencontre est que Logstash voit tous les messages comme provenant de l'hôte de consignation, pas du serveur ESXi distant qui a envoyé le journal. Le nom de domaine complet du serveur ESXi se trouve dans le message, mais ce que j'aimerais vraiment, c'est qu'il apparaisse comme provenant de cette machine, donc je peux faire correspondre sur [hôte] et ainsi de suite.

Une caractéristique majeure dont j'ai besoin est de pouvoir faire correspondre ce nom et lui assigner une étiquette, comme sur le campus de ce serveur.

Je n'ai pas vraiment trouvé un moyen de le faire avec logstash et je commence à me demander si je dois faire cette modification dans mon rsyslog.conf à la place.

Pour plus de clarté (simplifié), tous les messages apparaissent comme

datestamp loghost "esxiserver.domain.com message"

Ce que je voudrais est

datestamp esxiserver.domain.com « un message "

Voici ma config, assez simple pour l'instant juste essayer de le faire fonctionner.

input { 
    file { 
      type => "syslog" 
      path => [ "/var/log/rsyslog/**/*.log" ] 
      start_position => "beginning" 
    } 
} 

filter { 
    if [type] == "syslog" { 
    grok { 
     overwrite => "message" 
     match => { 
     "message" => "^(?:<%{POSINT:syslog_pri}>)?%{SYSLOGTIMESTAMP:timestamp} % 
{@source_host} %{IPORHOST:host} (?:%{PROG:program}(?:\[%{POSINT:pid}\])?:)?%{GR 
EEDYDATA:message}" 
     } 
    } 
    syslog_pri { } 
    date { 
     match => [ "timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss", "ISO8601" ] 

    } 
    } 
} 

filter { 
    multiline { 
    pattern => "^\s" 
    what => "previous" 
} 
} 

filter { 
    multiline { 
      pattern => "\\$" 
      what => "next" 
    } 
} 

output { 
     stdout { 
            codec => rubydebug 
           } 
    #elasticsearch { 
    #  cluster => "paoli" 
    #} 
} 

Résultat:

"syslog_severity_code" => 5, 
"syslog_facility_code" => 1, 
    "syslog_facility" => "user-level", 
    "syslog_severity" => "notice" 
} 
{ 
      "message" => "May 18 00:48:27 lexington.amr.ch2m.com Vpxa: [FF98F780 verbose  'Default'] Set internal stats for VM: 7 (vpxa VM id), 444 (vpxd VM id). Is FT primary? 0", 
      "@version" => "1", 
      "@timestamp" => "2014-05-27T20:48:35.492Z", 
       "type" => "syslog", 
       "host" => "paoli", 
       "path" => "/var/log/rsyslog/lexington.amr.ch2m.com/Vpxa.log", 
       "tags" => [ 
    [0] "_grokparsefailure" 
], 

Comme vous pouvez le voir dans le message, le nom complet de la machine en cours est affiché juste après l'horodatage. Cependant, tous ces messages apparaissent dans Elasticsearch/Kibana comme provenant du loghost (paoli). Une fois que je peux grep sur le nom réel, je prévois d'étiqueter les messages afin que je puisse faire plus avec eux.

Toute assistance ici serait appréciée.

+0

Pouvez-vous ajouter vos configurations logstash actuelles? ou au moins les parties pertinentes? –

+0

Salut, je pointe essentiellement logstash à /var/log/rsyslog/**/*.log. Cela fonctionne très bien, je veux juste voir les journaux comme provenant de la machine réelle à laquelle le journal appartient, pas de l'hôte du log. – Jeremy

+0

Vous devez analyser votre message. Par exemple, obtenez le nom de domaine complet du message. Pouvez-vous donner le format du journal de sorte que nous puissions discuter de la façon dont vous l'analyser. –

Répondre

0

J'ai commencé à travailler. Quelque part, j'ai raté le fait que j'avais besoin de deux instances de logstash, l'une pour alimenter les redis et l'autre pour lire les redis. Chaque article/tutoriel sur cette pile semble devenir obsolète rapidement, donc je ne sais pas si c'est nouveau ou juste quelque chose que j'ai raté.

Questions connexes