2016-10-05 3 views
1

Ich bin wie folgt festgelegt, während wir den ESK-Stack testen und zu lernen, wie das alles funktioniert:Verlust von Nachrichten zwischen logstash und Elasticsearch

  • Client-Server (CS) läuft filebeat sendet Ausgabe an logstash Vor-Ort-Aggregatorknoten (AN) ausführen.

  • AN läuft mit einigen Filtern logstash und leitet dann auf unserem Elasticsearch/Kibana Knoten (ESK) an rabbitmq weiter.

  • ESK startet rabbitmq und logstash zieht Nachrichten von rabbitmq, bevor die Ausgabe an elasticsearch gesendet wird (ohne Filterung). Kibana ist unsere Visualisierung (offensichtlich) und wir sind alle ziemlich neu bei elasticsearch, also machen wir nicht viel direkt damit.

Hier ist das Problem:

CS erzeugt eine Nachricht. Es wird definitiv an AN gesendet, wo Logstash es filtert und es weiterfährt (nachdem es auf logstash.stdout geantwortet hat). Die Logstash-Instanz in ESK sieht sie auch (und schreibt sie in logstash.stdout). Ich kann die Nachrichten in beiden Logstash-Instanzen sehen. Sie passen zusammen und sind entsprechend markiert. Aber sie sind in Kibana nicht sichtbar.

Unsere configs und eine Beispielnachricht von beiden Protokolle sind alle hier in Kern Form: https://gist.github.com/wortmanb/ebd37b8bea278d06ffa058c1513ef940

Wo könnten diese Nachrichten gehen? Sie werden nicht in Kibana angezeigt - wenn ich nach Nachrichten mit Tags filtern: "Puppe", bekomme ich im Grunde nichts während der Zeit, wenn ich weiß, dass diese Nachrichten fließen.

Alle Debugging-Vorschläge?

+0

Sehen Sie Ihre Protokolle in Elasticsearch? Können Sie Ihre Hand auf ein Protokoll legen, das nicht in Elasticsearch indiziert wurde? – Erik

+0

Ja - die Logmeldungen des Puppet Servers kommen nicht rein. Nun, mehr auf den Punkt, diejenigen, die mit "_grokparsefailure" getaggt werden, kommen herein. Diejenigen, die ich erfolgreich analysiere, sind nicht. Wir bekommen gelegentlich einen mehrzeiligen Stapelspeicherdump, der nicht parsen kann - ich habe mich noch nicht damit befasst. Ich habe diese gefunden, indem ich in Kibana nach der Quelle "/var/log/puppetlabs/puppetserver/puppetserver.log" gesucht habe. – Bret

+0

Nur auf deiner Architektur, brauchst du wirklich rabbitmq? Sie können Ihr Protokoll einfach direkt vom Logstash auf dem Aggregatorknoten (AN) zu ES auf Ihrem Elasticsearch/Kibana-Knoten (ESK) übertragen. Oder vielleicht gibt es hier nicht näher beschriebene Zwänge, die diese Architektur erzwingen. – baudsp

Antwort

1

Das Problem besteht darin, dass Sie das Datum des Protokolls mit dem Datumsfilter analysieren, der standardmäßig das Feld @timestamp ersetzt, das zum Filtern nach dem Datum verwendet wird.

Ich bekomme im Grunde nichts während Zeitrahmen, wenn ich weiß, dass diese Nachrichten fließen.

So sind die Nachrichten nicht in dem Zeitraum, in dem sie fließen, aber während des Zeitrahmens wurden sie geschrieben.

Sie können die "_grokparsefailure" Protokolle sehen, da ihr Datum nicht analysiert wird, dann ist das @timestamp das Empfangsdatum in Logstash.

Sie werden also Ihren Zeitrahmen zu einem einschließlich der Daten Ihrer Protokolle ändern.

+0

Ich habe meinen Zeitrahmen so eingestellt, dass er diese Zeitstempel enthält und trotzdem nicht angezeigt werden kann.Ich habe einen Zeitrahmen von "letzten 2 Wochen" verwendet und sehe keinen. Ich sage nicht, dass du falsch liegst - gibt es eine Möglichkeit, alle meine Daten zu löschen und im Grunde von vorne zu beginnen, so dass all meine Experimente nicht in die Quere kommen? Glücklicherweise ist dies eine Testumgebung, sodass ich ungestraft Schaden anrichten kann. – Bret

+0

@Bret zu schlecht, es funktioniert nicht, ich war mir sicher, dass es dieses Problem war, da ich es bereits angetroffen habe und es war ziemlich ähnlich. Ich habe eine andere Idee, in deinem Date-Filter verwendest du dieses Muster 'yyyy-dd-mm ...', ich denke, es sollte 'yyyy-mm-dd' sein und dieses Datum aus deinen Beispielen betrachten:' 2016-10 -05 15: 32: 18,038' – baudsp

+0

@Bret Wenn es nicht so ist, können Sie alle Ihre Daten löschen, indem Sie ein ES-Plugin wie kopf verwenden und den gesamten Index löschen. Oder du kannst curl benutzen und 'curl -XDELETE [url to your ES]/_ all' machen. Es löscht ** alle ** Ihre Daten, einschließlich jeder Kibana-Konfiguration. Sie können Index für Index mit 'curl -XDELETE [url to your ES]/[index name]' löschen; Um Indexnamen abzurufen, können Sie 'curl -XGET [url zu Ihrem ES]/_ cat/indices' verwenden – baudsp

Verwandte Themen