So beheben Sie häufig auftretende ELK-Stack-Probleme

Einführung

Dieses Tutorial ist eine Anleitung zur Fehlerbehebung für ELK Stack (Elasticsearch, Logstash, Kibana). Es wird davon ausgegangen, dass Sie den How To Install Elasticsearch gefolgt sind , Logstash und Kibana (ELK Stack) unter Ubuntu 14.04, aber es kann nützlich sein, um andere allgemeine ELK-Setups zu beheben.

Dieses Lernprogramm enthält eine Reihe allgemeiner Probleme und mögliche Lösungen für diese Probleme sowie Schritte, mit denen Sie überprüfen können, ob die verschiedenen Komponenten Ihres ELK-Stacks ordnungsgemäß funktionieren. Sie können also jederzeit zu den Abschnitten springen, die für die Probleme relevant sind, auf die Sie stoßen.

Problem: Kibana No Default Index Pattern Warning

Wenn Sie über einen Webbrowser auf Kibana zugreifen, wird möglicherweise eine Seite mit der folgenden Warnung angezeigt:

Kibana warning:Warning No default index pattern. You must select or create one to continue.
...
Unable to fetch mapping. Do you have indices matching the pattern?

Hier ist ein Screenshot der Warnung:

image: https://assets.digitalocean.com/articles/elk/troubleshoot-no-default-index-pattern.png [Warnung: Kein Standardindexmuster. Sie müssen eine auswählen oder erstellen, um fortzufahren.]

"Zuordnung kann nicht abgerufen werden" bedeutet, dass Elasticsearch keine Einträge enthält, die dem Standardmuster "+ logstash - * +" entsprechen. In der Regel bedeutet dies, dass Ihre Protokolle aufgrund von Kommunikationsproblemen zwischen Logstash und Elasticsearch und / oder Ihrem Protokollversender (z. Filebeat) zu Logstash. Mit anderen Worten, Ihre Protokolle schaffen es aus irgendeinem Grund nicht durch die Kette von Filebeat, Logstash, Elasticsearch.

Um Kommunikationsprobleme zwischen Logstash und Elasticsearch zu beheben, rufen Sie https://www.digitalocean.com/community/tutorials/how-to-troubleshoot-common-elk-stack-issues#logstash-how-to-check-if- auf. it-is-running-Abschnitte [Logstash-Fehlerbehebung]. Um Kommunikationsprobleme zwischen Filebeat und Logstash zu beheben, rufen Sie https://www.digitalocean.com/community/tutorials/how-to-troubleshoot-common-elk-stack-issues#filebeat-how-to-check-if- auf. it-is-running-Abschnitte [Filebeat Troubleshooting].

Wenn Sie Logstash für die Verwendung eines nicht standardmäßigen Indexmusters konfiguriert haben, können Sie das Problem beheben, indem Sie das richtige Indexmuster in das Textfeld eingeben.

Problem: Kibana Verbindung zu Elasticsearch nicht möglich

Wenn Sie über einen Webbrowser auf Kibana zugreifen, wird möglicherweise eine Seite mit folgendem Fehler angezeigt:

Kibana error:Fatal Error
Kibana: Unable to connect to Elasticsearch

Error: Unable to connect to Elasticsearch
Error: Bad Gateway
...

Hier ist ein Screenshot des Fehlers:

Dies bedeutet, dass Kibana keine Verbindung zu Elasticsearch herstellen kann. Elasticsearch wird möglicherweise nicht ausgeführt, oder Kibana ist möglicherweise so konfiguriert, dass auf dem falschen Host und Port nach Elasticsearch gesucht wird.

Um dieses Problem zu beheben, vergewissern Sie sich, dass Elasticsearch ausgeführt wird, indem Sie den Abschnitten zur Fehlerbehebung in Elasticsearch folgen. Stellen Sie dann sicher, dass Kibana für die Verbindung mit dem Host und dem Port konfiguriert ist, auf dem Elasticsearch ausgeführt wird.

Wenn Elasticsearch beispielsweise auf "+ localhost " an Port " 9200 +" ausgeführt wird, stellen Sie sicher, dass Kibana entsprechend konfiguriert ist.

Öffnen Sie die Kibana-Konfigurationsdatei:

sudo vi /opt/kibana/config/kibana.yml

Stellen Sie dann sicher, dass "+ elasticsearch_url +" richtig eingestellt ist.

/opt/kibana/config/kibana.yml excerpt:# The Elasticsearch instance to use for all your queries.
elasticsearch_url: "http://localhost:9200"

Speichern und schließen.

Starten Sie nun den Kibana-Dienst neu, um Ihre Änderungen zu übernehmen:

sudo service kibana restart

Öffnen Sie nach dem Neustart von Kibana Kibana in einem Webbrowser und überprüfen Sie, ob der Fehler behoben wurde.

Problem: Auf Kibana kann nicht zugegriffen werden

Die Nginx-Komponente des ELK-Stacks dient als Reverse-Proxy für Kibana. Wenn Nginx nicht läuft oder nicht richtig konfiguriert ist, können Sie nicht auf die Kibana-Oberfläche zugreifen. Da sich die übrigen ELK-Komponenten jedoch nicht auf Nginx verlassen, funktionieren sie möglicherweise einwandfrei.

Ursache: Nginx läuft nicht

Wenn Nginx nicht ausgeführt wird und Sie versuchen, in einem Webbrowser auf Ihren ELK-Stack zuzugreifen, wird möglicherweise ein ähnlicher Fehler angezeigt:

Nginx Error:This webpage is not available
ERR_CONNECTION_REFUSED

Dies weist normalerweise darauf hin, dass Nginx nicht ausgeführt wird.

Sie können den Status des Nginx-Dienstes mit diesem Befehl überprüfen:

sudo service nginx status

Wenn gemeldet wird, dass der Dienst nicht ausgeführt wird oder nicht erkannt wird, beheben Sie das Problem, indem Sie den Anweisungen unter https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana- folgen. elk-stack-on-ubuntu-14-04 # install-nginx [Install Nginx section] des ELK-Stack-Tutorials. Wenn gemeldet wird, dass der Dienst ausgeführt wird, müssen Sie Nginx gemäß denselben Anweisungen neu konfigurieren.

Ursache: Nginx wird ausgeführt, kann jedoch keine Verbindung zu Kibana herstellen

Wenn auf Kibana nicht zugegriffen werden kann und der Fehler "+502 Bad Gateway" angezeigt wird, wird Nginx ausgeführt, es kann jedoch keine Verbindung zu Kibana hergestellt werden.

Der erste Schritt zur Behebung dieses Problems besteht darin, zu überprüfen, ob Kibana mit dem folgenden Befehl ausgeführt wird:

sudo service kibana status

Wenn Kibana nicht ausgeführt wird oder nicht erkannt wird, befolgen Sie die Anweisungen unter https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-ubuntu -14-04 # install-kibana [Install Kibana section] des ELK-Stack-Tutorials.

Wenn sich das Problem dadurch nicht beheben lässt, liegt möglicherweise ein Problem mit Ihrer Nginx-Konfiguration vor. Sie sollten den Konfigurationsabschnitt der https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-ubuntu-14-04#install- durchlesen. nginx [Install Nginx section] des ELK-Stack-Tutorials. Sie können die Nginx-Fehlerprotokolle auf Hinweise überprüfen:

sudo tail /var/log/nginx/error.log

Hier erfahren Sie genau, warum Nginx keine Verbindung zu Kibana herstellen kann.

Ursache: Benutzer kann nicht authentifiziert werden

Wenn Sie die Standardauthentifizierung aktiviert haben und Probleme beim Übergeben des Authentifizierungsschritts haben, sollten Sie sich die Nginx-Fehlerprotokolle ansehen, um die Einzelheiten des Problems zu ermitteln.

Verwenden Sie diesen Befehl, um die letzten Nginx-Fehler anzuzeigen:

sudo tail /var/log/nginx/error.log

Wenn der Fehler "+ Benutzer wurde nicht gefunden" angezeigt wird, ist der Benutzer in der Datei "+ htpasswd" nicht vorhanden. Diese Art von Fehler wird durch den folgenden Protokolleintrag angezeigt:

Nginx error logs (user was not found):2015/10/26 12:11:57 [error] 3933#0: *242 user "NonExistentUser" was not found in "/etc/nginx/htpasswd.users", client: 108.60.145.130, server: example.com, request: "GET / HTTP/1.1", host: "45.55.252.231"

Wenn Sie den Fehler "+ password mismatch +" sehen, existiert der Benutzer, aber Sie haben das falsche Passwort eingegeben. Diese Art von Fehler wird durch den folgenden Protokolleintrag angezeigt:

Nginx error logs (user password mismatch):2015/10/26 12:12:56 [error] 3933#0: *242 user "kibanaadmin": password mismatch, client: 108.60.145.130, server: example.com, request: "GET / HTTP/1.1", host: "45.55.252.231"

Die Lösung für diese beiden Fehler besteht darin, entweder die richtigen Anmeldeinformationen anzugeben oder Ihre vorhandene "+ htpasswd " - Datei mit den erwarteten Benutzeranmeldungen zu ändern. Verwenden Sie beispielsweise den folgenden Befehl, um einen Benutzer mit dem Namen " kibanaadmin " in der Datei " htpasswd.users +" zu erstellen oder zu überschreiben:

sudo htpasswd /etc/nginx/htpasswd.users

Geben Sie dann Ihr gewünschtes Passwort ein und bestätigen Sie es.

Wenn der Fehler "+ Keine solche Datei oder solches Verzeichnis" angezeigt wird, ist die in der Nginx-Konfiguration angegebene "+ htpasswd" -Datei nicht vorhanden. Diese Art von Fehler wird durch den folgenden Protokolleintrag angezeigt:

Nginx error logs (htpasswd file does not exist):2015/10/26 12:17:38 [error] 3933#0: *266 open() "/etc/nginx/htpasswd.users" failed (2: No such file or directory), client: 108.60.145.130, server: example.com, request: "GET / HTTP/1.1", host: "45.55.252.231"

Hier sollten Sie eine neue + / etc / nginx / htpasswd.users + Datei erstellen und einen Benutzer (in diesem Beispiel + kibanaadmin +) hinzufügen, mit diesem Befehl:

sudo htpasswd -c /etc/nginx/htpasswd.users

Geben Sie ein neues Passwort ein und bestätigen Sie es.

Versuchen Sie nun, sich als der Benutzer zu authentifizieren, den Sie gerade erstellt haben.

Logstash: So prüfen Sie, ob es ausgeführt wird

Wenn Logstash nicht ausgeführt wird, können Sie keine Protokolle von Protokollversendern wie Filebeat empfangen und analysieren und die verarbeiteten Protokolle in Elasticsearch speichern. In diesem Abschnitt erfahren Sie, wie Sie überprüfen, ob Logstash ordnungsgemäß funktioniert.

Überprüfen Sie, ob der Dienst ausgeführt wird

Die grundlegendste zu überprüfende Sache ist der Status des Logstash-Status:

sudo service logstash status

Wenn Logstash ausgeführt wird, wird folgende Ausgabe angezeigt:

Logstash status (OK):logstash is running

Andernfalls wird folgende Meldung angezeigt, wenn der Dienst nicht ausgeführt wird:

Logstash status (Bad):logstash is not running

Wenn Logstash nicht ausgeführt wird, versuchen Sie, es mit dem folgenden Befehl zu starten:

sudo service logstash start

Überprüfen Sie den Status nach einigen Sekunden erneut. Logstash ist eine Java-Anwendung, die nach jedem Startversuch einige Sekunden lang als "aktiv" gemeldet wird. Warten Sie daher einige Sekunden, bevor Sie den Status "nicht aktiv" überprüfen. Wenn es als "nicht ausgeführt" gemeldet wird, ist es wahrscheinlich falsch konfiguriert. Die nächsten beiden Abschnitte behandeln die Fehlerbehebung bei häufigen Problemen mit Logstash.

Problem: Logstash wird nicht ausgeführt

Wenn Logstash nicht ausgeführt wird, gibt es einige mögliche Ursachen. In diesem Abschnitt werden verschiedene häufige Fälle behandelt, in denen Logstash nicht ausgeführt werden kann, und mögliche Lösungen vorgeschlagen.

Ursache: Konfiguration enthält einen Syntaxfehler

Wenn Logstash Fehler in den Konfigurationsdateien hat, die sich im Verzeichnis "+ / etc / logstash / conf.d +" befinden, kann der Dienst nicht ordnungsgemäß gestartet werden. Am besten überprüfen Sie die Logstash-Protokolle auf Hinweise, warum dies fehlschlägt.

Öffnen Sie zwei Terminalsitzungen auf Ihrem Server, damit Sie die Logstash-Protokolle anzeigen können, während Sie versuchen, den Dienst zu starten.

In der ersten Terminalsitzung sehen wir uns die Protokolle an:

tail -f /var/log/logstash/logstash.log

Dadurch werden die letzten Protokolleinträge sowie alle zukünftigen Protokolleinträge angezeigt.

Versuchen Sie in der zweiten Terminalsitzung, den Logstash-Dienst zu starten:

sudo service logstash start

Wechseln Sie zurück zur ersten Terminalsitzung, um die Protokolle anzuzeigen, die beim Start von Logstash generiert werden.

Wenn Sie Protokolleinträge sehen, die Fehlermeldungen enthalten, lesen Sie die Meldungen, um herauszufinden, was falsch läuft. Hier ist ein Beispiel für die Fehlerprotokolle, die möglicherweise angezeigt werden, wenn die Logstash-Konfiguration einen Syntaxfehler aufweist (nicht übereinstimmende geschweifte Klammern):

Logstash logs (Syntax error):...
{:timestamp=>"2015-10-28T11:51:09.205000-0400", :message=>"Error: Expected one of #, => at line 12, column 6 (byte 209) after input {\n  lumberjack {\n    port => 5043\n    type => \"logs\"\n    ssl_certificate => \"/etc/pki/tls/certs/logstash-forwarder.crt\"\n    ssl_key => \"/etc/pki/tls/private/logstash-forwarder.key\"\n  \n}\n\n\nfilter {\n  if "}
{:timestamp=>"2015-10-28T11:51:09.228000-0400", :message=>"You may be interested in the '--configtest' flag which you can\nuse to validate logstash's configuration before you choose\nto restart a running system."}

Die letzte Meldung, die besagt, dass wir möglicherweise an der Überprüfung der Konfiguration interessiert sind, weist darauf hin, dass die Konfiguration einen Syntaxfehler enthält. Die vorherige Meldung enthält eine genauere Fehlermeldung. In diesem Fall fehlt eine schließende geschweifte Klammer im Abschnitt "+ input +" der Konfiguration. Bearbeiten Sie den fehlerhaften Teil Ihrer Logstash-Konfiguration, um dieses Problem zu beheben:

sudo vi /etc/logstash/conf.d/

Suchen Sie die Zeile mit dem fehlerhaften Eintrag, korrigieren Sie sie, speichern Sie sie und beenden Sie sie.

Starten Sie nun auf dem zweiten Terminal den Logstash-Dienst:

sudo service logstash start

Wenn das Problem behoben wurde, sollten keine neuen Protokolleinträge vorhanden sein (Logstash protokolliert keinen erfolgreichen Start). Überprüfen Sie nach einigen Sekunden den Status des Logstash-Dienstes:

sudo service logstash status

Wenn es ausgeführt wird, haben Sie das Problem behoben.

Möglicherweise liegt ein anderes Konfigurationsproblem vor als in unserem Beispiel. Wir werden einige andere häufig auftretende Probleme bei der Logstash-Konfiguration behandeln. Versuchen Sie es wie immer selbst, wenn Sie herausfinden können, was der Fehler bedeutet.

Ursache: SSL-Dateien sind nicht vorhanden

Eine weitere häufige Ursache dafür, dass Logstash nicht ausgeführt wird, ist ein Problem mit dem SSL-Zertifikat und den Schlüsseldateien. Wenn sie beispielsweise dort nicht vorhanden sind, wo es Ihre Logstash-Konfiguration vorschreibt, wird in Ihren Protokollen ein Fehler wie der folgende angezeigt:

Logstash logs (SSL key file does not exist):{:timestamp=>"2017-12-01T16:51:31.656000+0000", :message=>"Invalid setting for beats input plugin:\n\n  input {\n    beats {\n      # This setting must be a path\n      # File does not exist or cannot be opened /etc/pki/tls/certs/logstash-forwarder.crt\n      ssl_certificate => \"/etc/pki/tls/certs/logstash-forwarder.crt\"\n      ...\n    }\n  }", :level=>:error}
{:timestamp=>"2017-12-01T16:51:31.671000+0000", :message=>"Invalid setting for beats input plugin:\n\n  input {\n    beats {\n      # This setting must be a path\n      # File does not exist or cannot be opened /etc/pki/tls/private/logstash-forwarder.key\n      ssl_key => \"/etc/pki/tls/private/logstash-forwarder.key\"\n      ...\n    }\n  }", :level=>:error}
{:timestamp=>"2017-12-01T16:51:31.685000+0000", :message=>"Error: Something is wrong with your configuration.", :level=>:error}

Um dieses spezielle Problem zu beheben, müssen Sie sicherstellen, dass Sie über eine SSL-Schlüsseldatei verfügen (https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-4-on) -ubuntu-14-04 # generiere-ssl-Zertifikate [generiere eines], wenn du es vergessen hast) und dass es an der richtigen Stelle abgelegt ist (+ / etc / pki / tls / private / logstash-forwarder.key +), im Beispiel). Wenn Sie bereits über eine Schlüsseldatei verfügen, müssen Sie diese an den richtigen Speicherort verschieben und sicherstellen, dass die Logstash-Konfiguration darauf verweist.

Starten Sie jetzt den Logstash-Dienst:

sudo service logstash start

Wenn das Problem behoben wurde, sollten keine neuen Protokolleinträge vorhanden sein. Überprüfen Sie nach einigen Sekunden den Status des Logstash-Dienstes:

sudo service logstash status

Wenn es ausgeführt wird, haben Sie das Problem behoben.

Problem: Logstash wird ausgeführt, speichert jedoch keine Protokolle in Elasticsearch

Wenn Logstash ausgeführt wird, aber keine Protokolle in Elasticsearch speichert, kann Elasticsearch nicht erreicht werden. Dies ist in der Regel darauf zurückzuführen, dass Elasticsearch nicht ausgeführt wird. In diesem Fall werden in den Logstash-Protokollen folgende Fehlermeldungen angezeigt:

Logstash logs (Elasticsearch isn't running):{:timestamp=>"2017-12-01T16:53:29.571000+0000", :message=>"Connection refused (Connection refused)", :class=>"Manticore::SocketException", :backtrace=>[], :level=>:error}

Stellen Sie in diesem Fall sicher, dass Elasticsearch ausgeführt wird, indem Sie die Schritte zur Fehlerbehebung für Elasticsearch ausführen.

Möglicherweise werden auch solche Fehler angezeigt:

Logstash logs (Logstash is configured to send its output to the wrong host):{:timestamp=>"2017-12-01T16:56:26.274000+0000", :message=>"Attempted to send a bulk request to Elasticsearch configured at '[\"http://localhost:9200/\"]', but Elasticsearch appears to be unreachable or down!", :error_message=>"Connection refused (Connection refused)", :class=>"Manticore::SocketException", :client_config=>{:hosts=>["http://localhost:9200/"], :ssl=>nil, :transport_options=>{:socket_timeout=>0, :request_timeout=>0, :proxy=>nil, :ssl=>{}}, :transport_class=>Elasticsearch::Transport::Transport::HTTP::Manticore, :logger=>nil, :tracer=>nil, :reload_connections=>false, :retry_on_failure=>false, :reload_on_failure=>false, :randomize_hosts=>false}, :level=>:error}
{:timestamp=>"2017-12-01T16:57:49.090000+0000", :message=>"SIGTERM received. Shutting down the pipeline.", :level=>:warn}

Dies weist darauf hin, dass der Abschnitt "+ output +" Ihrer Logstash-Konfiguration möglicherweise auf den falschen Host verweist. Um dieses Problem zu beheben, stellen Sie sicher, dass Elasticsearch ausgeführt wird, und überprüfen Sie Ihre Logstash-Konfiguration:

sudo vi /etc/logstash/conf.d/30-elasticsearch-output.conf

Stellen Sie sicher, dass die Zeile + hosts ⇒ [" "] + auf den Host verweist, auf dem Elasticsearch ausgeführt wird

Logstash output configuration excerptoutput {
 elasticsearch {
   hosts => ["localhost:9200"]
   sniffing => true
. . .

Speichern und schließen. In diesem Beispiel wird davon ausgegangen, dass Elasticsearch auf "+ localhost +" ausgeführt wird.

Starten Sie den Logstash-Dienst neu.

sudo service logstash restart

Überprüfen Sie dann die Logstash-Protokolle auf Fehler.

Filebeat: So prüfen Sie, ob es ausgeführt wird

Filebeat wird auf Ihren * Client * -Maschinen ausgeführt und sendet Protokolle an Ihren ELK-Server. Wenn Filebeat nicht ausgeführt wird, können Sie die verschiedenen Protokolle nicht an Logstash senden. Infolgedessen werden die Protokolle nicht in Elasticsearch gespeichert und in Kibana nicht angezeigt. In diesem Abschnitt erfahren Sie, wie Sie überprüfen, ob Filebeat ordnungsgemäß funktioniert.

Überprüfen Sie, ob die Protokolle erfolgreich versendet wurden

Am einfachsten können Sie feststellen, ob Filebeat Protokolle ordnungsgemäß an Logstash sendet, indem Sie im Syslog-Protokoll nach Filebeat-Fehlern suchen.

sudo tail /var/log/syslog | grep filebeat

Wenn alles richtig eingerichtet ist, sollten Sie einige Protokolleinträge sehen, wenn Sie den Filebeat-Prozess anhalten oder starten, aber sonst nichts.

Wenn Sie keine Protokolleinträge sehen, sollten Sie sicherstellen, dass Filebeat ausgeführt wird.

Überprüfen Sie, ob der Dienst ausgeführt wird

Das Grundlegendste, was überprüft werden muss, ist der Status von Filebeat:

sudo service filebeat status

Wenn Filebeat ausgeführt wird, wird folgende Ausgabe angezeigt:

Output* filebeat is running

Andernfalls wird folgende Meldung angezeigt, wenn der Dienst nicht ausgeführt wird:

Output * filebeat is not running

Wenn Filebeat nicht ausgeführt wird, versuchen Sie, es mit dem folgenden Befehl zu starten:

sudo service filebeat start

Überprüfen Sie anschließend den Status erneut. Wenn sich das Problem dadurch nicht beheben lässt, finden Sie in den folgenden Abschnitten Informationen zur Behebung Ihrer Filebeat-Probleme. Wir befassen uns mit allgemeinen Filebeat-Problemen und deren Behebung.

Problem: Filebeat wird nicht ausgeführt

Wenn Filebeat nicht auf Ihrem Client-Computer ausgeführt wird, kann dies mehrere Ursachen haben. In diesem Abschnitt werden verschiedene häufige Fälle behandelt, in denen Filebeat nicht ausgeführt werden kann, und mögliche Lösungen vorgeschlagen.

Ursache: Konfiguration enthält einen Syntaxfehler

Wenn Filebeat Fehler in seiner Konfigurationsdatei hat, die sich unter "+ /etc/filebeat/filebeat.yml +" befindet, kann der Dienst nicht ordnungsgemäß gestartet werden. Es wird sofort mit folgenden Fehlern beendet:

OutputLoading config file error: YAML config parsing failed on /etc/filebeat/filebeat.yml: yaml: line 13: could not find expected ':'. Exiting.

In diesem Fall befindet sich ein Tippfehler in der Konfigurationsdatei. Bearbeiten Sie den fehlerhaften Teil der Filebeat-Konfiguration, um dieses Problem zu beheben. Anleitungen finden Sie im Unterabschnitt * Configure Filebeat * unter https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-ubuntu-14-. 04 # set-up-filebeat- (Client-Server hinzufügen) [Set-up-filebeat (Client-Server hinzufügen)]) des ELK-Stack-Tutorials.

Versuchen Sie nach dem Bearbeiten der Filebeat-Konfiguration, den Dienst erneut zu starten:

sudo service filebeat start

Wenn Sie keine Fehlerausgabe sehen, ist das Problem behoben.

Ursache: SSL-Zertifikat fehlt oder ist ungültig

Für die Kommunikation zwischen Filebeat und Logstash ist ein SSL-Zertifikat für die Authentifizierung und Verschlüsselung erforderlich. Wenn Filebeat nicht ordnungsgemäß gestartet wird, sollten Sie das Syslog auf Fehler überprüfen, die den folgenden ähneln:

OutputError Initialising publisher: open /etc/pki/tls/certs/logstash-forwarder.crt: no such file or directory

Dies weist darauf hin, dass sich die Datei "+ logstash-forwarder.crt +" nicht am richtigen Speicherort befindet. Um dieses Problem zu beheben, kopieren Sie das SSL-Zertifikat vom ELK-Server auf Ihren Client-Computer, indem Sie den entsprechenden Unterabschnitten der https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and- folgen. kibana-elk-stack-on-ubuntu-14-04 # set-up-filebeat- (Client-Server hinzufügen) [Abschnitt Einrichten von Filebeat (Client-Server hinzufügen)] des ELK-Stack-Tutorials.

Starten Sie Filebeat erneut, nachdem Sie die entsprechende SSL-Zertifikatdatei am richtigen Speicherort abgelegt haben.

Wenn das SSL-Zertifikat ungültig ist, sollten die Protokolle folgendermaßen aussehen:

syslog (Certificate is invalid):transport.go:125: SSL client failed to connect with: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "elk.example.com")

Beachten Sie, dass die Fehlermeldung angibt, dass das Zertifikat vorhanden, aber ungültig ist. In diesem Fall müssen Sie dem https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-ubuntu-14-04#generate folgen -ssl-certificates [Abschnitt SSL-Zertifikate generieren] im ELK-Stack-Lernprogramm und kopieren Sie das SSL-Zertifikat auf den Clientcomputer (https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash- and-kibana-elk-stack-on-ubuntu-14-04 # set-up-filebeat- (Client-Server hinzufügen) [Filebeat einrichten (Client-Server hinzufügen)]).

Nachdem Sie sichergestellt haben, dass das Zertifikat gültig ist und sich am richtigen Speicherort befindet, müssen Sie Logstash (auf dem ELK-Server) neu starten, um die Verwendung des neuen SSL-Schlüssels zu erzwingen:

sudo service logstash restart

Starten Sie dann Filebeat (auf dem Client-Computer):

sudo service filebeat start

Überprüfen Sie die Protokolle erneut, um sicherzustellen, dass das Problem behoben wurde.

Problem: Filebeat kann keine Verbindung zu Logstash herstellen

Wenn Logstash (auf dem ELK-Server) von Filebeat (Ihrem Client-Server) nicht erreichbar ist, sehen Sie Fehlerprotokolleinträge wie diesen:

syslog  (Connection refused):transport.go:125: SSL client failed to connect with: dial tcp 203.0.113.4:5044: getsockopt: connection refused

Häufige Gründe dafür, dass Logstash nicht erreichbar ist, sind:

  • Logstash läuft nicht (auf dem ELK Server)

  • Firewalls auf beiden Servern blockieren die Verbindung an Port "+ 5043 +"

  • Filebeat ist nicht mit der richtigen IP-Adresse, dem richtigen Hostnamen oder dem richtigen Port konfiguriert

Um dieses Problem zu beheben, überprüfen Sie zunächst, ob Logstash auf dem ELK-Server ausgeführt wird, indem Sie den Abschnitten zur Fehlerbehebung in Logstash in diesem Handbuch folgen. Stellen Sie zweitens sicher, dass die Firewall den Netzwerkverkehr nicht blockiert. Stellen Sie drittens sicher, dass Filebeat mit der richtigen IP-Adresse (oder dem richtigen Hostnamen) und dem richtigen Port des ELK-Servers konfiguriert ist.

Die Filebeat-Konfiguration kann mit diesem Befehl bearbeitet werden:

sudo vi /etc/filebeat/filebeat.yml

Starten Sie Filebeat neu, nachdem Sie überprüft haben, ob die Logstash-Verbindungsinformationen korrekt sind:

sudo service filebeat restart

Überprüfen Sie die Filebeat-Protokolle erneut, um sicherzustellen, dass das Problem behoben wurde.

Allgemeine Anleitungen zu Filebeat finden Sie im Unterabschnitt * Configure Filebeat * unter https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-ubuntu- 14-04 # set-up-filebeat- (Client-Server hinzufügen) [Einrichten von Filebeat (Client-Server hinzufügen)] des ELK-Stack-Tutorials.

Elasticsearch: So prüfen Sie, ob es ausgeführt wird

Wenn Elasticsearch nicht ausgeführt wird, funktioniert keiner Ihrer ELK-Stapel. Logstash kann Elasticsearch keine neuen Protokolle hinzufügen, und Kibana kann keine Protokolle von Elasticsearch zur Berichterstellung abrufen. In diesem Abschnitt erfahren Sie, wie Sie überprüfen, ob Elasticsearch ordnungsgemäß funktioniert.

Überprüfen Sie, ob der Dienst ausgeführt wird

Das Grundlegendste, was zu überprüfen ist, ist der Status des Elasticsearch-Dienstes:

sudo service elasticsearch status

Wenn Elasticsearch ausgeführt wird, wird folgende Ausgabe angezeigt:

Elasticsearch status (OK): * elasticsearch is running

Andernfalls wird folgende Meldung angezeigt, wenn der Dienst nicht ausgeführt wird:

Elasticsearch status (Bad): * elasticsearch is not running

In diesem Fall sollten Sie die nächsten Abschnitte befolgen, in denen die Fehlerbehebung bei Elasticsearch behandelt wird.

Stellen Sie sicher, dass es auf HTTP-Anforderungen reagiert

Standardmäßig antwortet Elasticsearch auf HTTP-Anforderungen an Port "+ 9200 " (dies kann in der Konfigurationsdatei durch Angabe eines neuen " http.port " - Werts angepasst werden). Wir können " curl +" verwenden, um Anfragen an Elasticsearch zu senden und nützliche Informationen von Elasticsearch abzurufen.

Senden Sie mit diesem Befehl eine HTTP-GET-Anfrage mit curl (vorausgesetzt, Ihre Elasticsearch ist unter + localhost + erreichbar):

curl localhost:9200

Wenn Elasticsearch ausgeführt wird, sollte eine Antwort angezeigt werden, die ungefähr so ​​aussieht:

Output{
 "name" : "Hildegarde",
 "cluster_name" : "elasticsearch",
 "cluster_uuid" : "E8q9kr-0RxycYhSLNx8xeA",
 "version" : {
   "number" : "2.4.6",
   "build_hash" : "5376dca9f70f3abef96a77f4bb22720ace8240fd",
   "build_timestamp" : "2017-07-18T12:17:44Z",
   "build_snapshot" : false,
   "lucene_version" : "5.5.4"
 },
 "tagline" : "You Know, for Search"
}

Mit diesem Befehl können Sie auch den Zustand Ihres Elasticsearch-Clusters überprüfen:

curl localhost:9200/_cluster/health?pretty

Ihre Ausgabe sollte ungefähr so ​​aussehen:

Output{
 "cluster_name" : "elasticsearch",
 "status" : "yellow",
 "timed_out" : false,
 "number_of_nodes" : 1,
 "number_of_data_nodes" : 1,
 "active_primary_shards" : 6,
 "active_shards" : 6,
 "relocating_shards" : 0,
 "initializing_shards" : 0,
 "unassigned_shards" : 6,
 "delayed_unassigned_shards" : 0,
 "number_of_pending_tasks" : 0,
 "number_of_in_flight_fetch" : 0,
 "task_max_waiting_in_queue_millis" : 0,
 "active_shards_percent_as_number" : 50.0
}

Beachten Sie, dass wenn Ihr Elasticsearch-Cluster aus einem einzelnen Knoten besteht, Ihr Cluster wahrscheinlich den Status "+ gelb " hat. Dies ist normal für einen einzelnen Knotencluster. Sie können ein Upgrade auf den Status " grün +" durchführen, indem Sie Ihrem Elasticsearch-Cluster mindestens einen weiteren Knoten hinzufügen.

Problem: Elasticsearch wird nicht ausgeführt

Wenn Elasticsearch nicht ausgeführt wird, gibt es viele mögliche Ursachen. In diesem Abschnitt werden verschiedene häufige Fälle behandelt, in denen Elasticsearch nicht ausgeführt werden kann, und mögliche Lösungen vorgeschlagen.

Ursache: Es wurde nie begonnen

Wenn Elasticsearch nicht ausgeführt wird, wurde es möglicherweise noch nicht gestartet. Elasticsearch startet nach der Installation nicht automatisch. Die Lösung hierfür besteht darin, es beim ersten Mal manuell zu starten:

sudo service elasticsearch start

Dies sollte anzeigen, dass Elasticsearch gestartet wird. Warten Sie ca. 10 Sekunden und überprüfen Sie dann erneut den Status von Elasticsearch.

Ursache: Der Elasticsearch-Dienst wurde nicht aktiviert und der Server neu gestartet

Wenn Elasticsearch einwandfrei funktioniert hat, aber nicht mehr funktioniert, ist es möglicherweise nicht richtig aktiviert. Standardmäßig kann der Elasticsearch-Dienst nicht beim Booten gestartet werden. Sie müssen Elasticsearch explizit aktivieren, damit es beim Booten automatisch gestartet wird:

sudo update-rc.d elasticsearch defaults 95 10

Elasticsearch sollte jetzt automatisch beim Booten starten. Testen Sie, ob es funktioniert, indem Sie Ihren Server neu starten.

Ursache: Elasticsearch ist falsch konfiguriert

Wenn Elasticsearch Fehler in seiner Konfigurationsdatei hat, die sich unter "+ /etc/elasticsearch/elasticsearch.yml +" befindet, kann der Dienst nicht ordnungsgemäß gestartet werden. Am besten überprüfen Sie die Elasticsearch-Fehlerprotokolle auf Hinweise, warum dies fehlschlägt.

Öffnen Sie zwei Terminalsitzungen auf Ihrem Server, damit Sie die Elasticsearch-Protokolle anzeigen können, während Sie versuchen, den Dienst zu starten.

In der ersten Terminalsitzung sehen wir uns die Protokolle an:

tail -f /var/log/elasticsearch/elasticsearch.log

Dadurch werden die letzten Protokolleinträge sowie alle zukünftigen Protokolleinträge angezeigt.

Versuchen Sie in der zweiten Terminalsitzung, den Dienst Elasticsearch zu starten:

sudo service elasticsearch start

Wechseln Sie zurück zur ersten Terminalsitzung, um die Protokolle anzuzeigen, die beim Start von Elasticsearch generiert werden.

Wenn Sie Protokolleinträge sehen, die auf Fehler oder Ausnahmen hinweisen (z. + ERROR,` + Exception` oder + error) versuchen Sie, eine Zeile zu finden, die angibt, was den Fehler verursacht hat. Hier ist ein Beispiel für die Fehlerprotokolle, die angezeigt werden, wenn für Elasticsearch + network.host + ein Hostname oder eine IP-Adresse festgelegt ist, die nicht aufgelöst werden kann:

Elasticsearch logs (Bad):...
[2015-10-27 15:24:43,495][INFO ][node                     ] [Shadrac] starting ...
[2015-10-27 15:24:43,626][ERROR][bootstrap                ] [Shadrac] Exception
org.elasticsearch.transport.BindTransportException: Failed to resolve host [null]
   at org.elasticsearch.transport.netty.NettyTransport.bindServerBootstrap(NettyTransport.java:402)
   at org.elasticsearch.transport.netty.NettyTransport.doStart(NettyTransport.java:283)
   at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:85)
   at org.elasticsearch.transport.TransportService.doStart(TransportService.java:153)
   at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:85)
   at org.elasticsearch.node.internal.InternalNode.start(InternalNode.java:257)
   at org.elasticsearch.bootstrap.Bootstrap.start(Bootstrap.java:160)
   at org.elasticsearch.bootstrap.Bootstrap.main(Bootstrap.java:248)
   at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:32)
Caused by: java.net.UnknownHostException: : unknown error
...

Beachten Sie, dass die letzte Zeile der Beispielprotokolle angibt, dass ein "+ UnknownHostException: " - Fehler aufgetreten ist. Dieses spezielle Beispiel zeigt an, dass " network.host " auf " wrong_hostname " gesetzt ist, was nicht in irgendetwas aufgelöst wird. In einem Elasticsearch-Setup mit einem Knoten sollte dies auf " localhost " oder " 127.0.0.1 +" gesetzt werden.

Bearbeiten Sie die Elasticsearch-Konfigurationsdatei, um dieses Problem zu beheben:

sudo vi /etc/elasticsearch/elasticsearch.yml

Suchen Sie die Zeile mit dem fehlerhaften Eintrag und korrigieren Sie sie. Im Beispiel sollten wir nach der Zeile suchen, die "+ network.host: wrong_hostname +" angibt, und sie so ändern, dass sie so aussieht:

/etc/elasticsearch/elasticsearch.yml Auszug

...
network.host:
...

Speichern und schließen.

Starten Sie nun auf dem zweiten Terminal den Dienst Elasticsearch:

sudo service elasticsearch start

Wenn das Problem behoben wurde, sollten fehlerfreie Protokolle angezeigt werden, die darauf hinweisen, dass Elasticsearch gestartet wurde. Es könnte ungefähr so ​​aussehen:

Elasticsearch logs (Good):...
[2015-10-27 15:29:21,980][INFO ][node                     ] [Garrison Kane] initializing ...
[2015-10-27 15:29:22,084][INFO ][plugins                  ] [Garrison Kane] loaded [], sites []
[2015-10-27 15:29:22,124][INFO ][env                      ] [Garrison Kane] using [1] data paths, mounts [[/ (/dev/vda1)]], net usable_space [52.1gb], net total_space [58.9gb], types [ext4]
[2015-10-27 15:29:24,532][INFO ][node                     ] [Garrison Kane] initialized
[2015-10-27 15:29:24,533][INFO ][node                     ] [Garrison Kane] starting ...
[2015-10-27 15:29:24,646][INFO ][transport                ] [Garrison Kane] bound_address {inet[/127.0.0.1:9300]}, publish_address {inet[localhost/127.0.0.1:9300]}
[2015-10-27 15:29:24,682][INFO ][discovery                ] [Garrison Kane] elasticsearch/WJvkRFnbQ5mLTgOatk0afQ
[2015-10-27 15:29:28,460][INFO ][cluster.service          ] [Garrison Kane] new_master [Garrison Kane][WJvkRFnbQ5mLTgOatk0afQ][elk-run][inet[localhost/127.0.0.1:9300]], reason: zen-disco-join (elected_as_master)
[2015-10-27 15:29:28,561][INFO ][http                     ] [Garrison Kane] bound_address {inet[/127.0.0.1:9200]}, publish_address {inet[localhost/127.0.0.1:9200]}
[2015-10-27 15:29:28,562][INFO ][node                     ] [Garrison Kane] started
...

Wenn Sie nun den Elasticsearch-Status überprüfen, sollten Sie feststellen, dass er ordnungsgemäß ausgeführt wird.

Möglicherweise liegt ein anderes Konfigurationsproblem vor als in unserem Beispiel. Wenn Sie herausfinden können, was der Fehler bedeutet, versuchen Sie, ihn selbst zu beheben. Wenn dies fehlschlägt, durchsuchen Sie das Internet nach einzelnen Fehlerzeilen, die keine für Ihren Server spezifischen Informationen enthalten (z. die IP-Adresse oder den automatisch generierten Elasticsearch-Knotennamen).

Fazit

Hoffentlich hat Ihnen diese Anleitung zur Fehlerbehebung dabei geholfen, Probleme zu beheben, die Sie bei der Einrichtung Ihres ELK-Stacks hatten. Wenn Sie Fragen oder Anregungen haben, hinterlassen Sie diese in den Kommentaren unten!