2016-06-07 10 views
0

Ich habe ein Problem mit Dynamikfeldnamen in meiner Logstash-Konfiguration. Dies ist mein Test-config: logstash - Dynamische Feldnamen

input { 
generator { 
    lines => [ "May 15 13:42:55 logstash puppet-agent[3551]: Finished catalog run in 43", 
       "May 16 14:57:07 logstash puppet-agent[3551]: Starting Puppet client version" ] 
    count => 7 
} 
} 
filter { 
    grok { 
    match => [ "message", "%{SYSLOGBASE} %{WORD:log}.*" ] 
    } 

     if "Starting" in [log] { 
     metrics { 
      meter => [ "%{logsource}.%{log}" ] 
      add_tag => [ "metric" ] 
      add_field => { "server" => "%{logsource}" 
         "bad" => "true" } 
      clear_interval => 5 
       } 
     } 
} 
output { 
     stdout { codec => rubydebug } 
} 

und hier ist mein Ausgang: (nur der Ausgang enden)

{ 
     "message" => "May 15 13:42:55 logstash puppet-agent[3551]: Finished catalog run in 43", 
     "@version" => "1", 
    "@timestamp" => "2016-06-07T07:37:50.138Z", 
      "host" => "logstash.test.lan", 
     "sequence" => 6, 
    "timestamp" => "May 15 13:42:55", 
    "logsource" => "test", 
     "program" => "puppet-agent", 
      "pid" => "3551", 
      "log" => "Finished" 
} 
{ 
     "message" => "May 16 14:57:07 logstash puppet-agent[3551]: Starting Puppet client version", 
     "@version" => "1", 
    "@timestamp" => "2016-06-07T07:37:50.138Z", 
      "host" => "logstash.test.lan", 
     "sequence" => 6, 
    "timestamp" => "May 16 14:57:07", 
    "logsource" => "test", 
     "program" => "puppet-agent", 
      "pid" => "3551", 
      "log" => "Starting" 
} 
{ 
     "@version" => "1", 
    "@timestamp" => "2016-06-07T07:37:50.288Z", 
     "message" => "Counting: 7", 
     "logstash.Starting" => { 
      "count" => 7, 
     "rate_1m" => 0.0, 
     "rate_5m" => 0.0, 
     "rate_15m" => 0.0 
    }, 
     "server" => "%{logsource}", 
      "bad" => "true", 
      "tags" => [ 
     [0] "metric" 
    ] 
} 

Warum Feld Server DO NOT logstash als Wert aus der haben Eingangsprotokolle? % {logsource} funktioniert für meter option, also warum nicht für add_field? Thx für Hilfe.

Antwort

0

Wenn ein Protokollereignis empfangen wird, werden die SYSLOGBASE-Informationen aus dem Inhalt extrahiert. Hier wird der Wert% {logsource} definiert. Wenn das Ereignis nicht aus einem Protokolleintrag stammt, der SYSLOGBASE-Informationen enthält, ist die Protokollquelle nicht definiert.

Wenn Sie eine Startnachricht erhalten, wird logsource im Gültigkeitsbereich definiert und Ihrer Nachricht hinzugefügt.

Das Metrik-Plugin generiert eine neue Nachricht pro Intervall. Diese Nachricht wird von Grund auf neu generiert, sodass sie nicht den Wert von logsource oder irgendetwas anderes enthält, das normalerweise von einem einzelnen Protokolleintrag erhalten würde.

+0

Ist es möglich, eine Problemumgehung zu machen, um dynamische Daten vom ursprünglichen Protokoll zum metrischen Feld hinzuzufügen? – Rohlik

+0

Nicht gemäß der Dokumentation. Vielleicht eine Verbesserungsanfrage oder Frage für den Autor ... https://github.com/logstash-plugins/logstash-filter-metrics/issues –