Website-Suche

So installieren Sie Elasticsearch, Logstash und Kibana (ELK Stack) unter CentOS/RHEL 7


Wenn Sie für die Überprüfung und Analyse von Systemprotokollen unter Linux verantwortlich sind oder waren, wissen Sie, was für ein Albtraum diese Aufgabe sein kann, wenn mehrere Dienste gleichzeitig überwacht werden.

In der Vergangenheit musste diese Aufgabe größtenteils manuell erledigt werden, wobei jeder Protokolltyp separat behandelt wurde. Glücklicherweise ist die Kombination aus Elasticsearch, Logstash und Kibana auf der Serverseite, zusammen mit Filebeat auf dem Client Andererseits lässt diese einst schwierige Aufgabe heute wie ein Kinderspiel aussehen.

Die ersten drei Komponenten bilden einen sogenannten ELK-Stack, dessen Hauptzweck darin besteht, Protokolle von mehreren Servern gleichzeitig zu sammeln (auch bekannt als zentralisierte Protokollierung).

Empfohlene Lektüre: 4 gute Open-Source-Tools zur Protokollüberwachung und -verwaltung für Linux

Über eine integrierte Java-basierte Weboberfläche können Sie Protokolle schnell und auf einen Blick überprüfen, um den Vergleich und die Fehlerbehebung zu erleichtern. Diese Client-Protokolle werden von Filebeat an einen zentralen Server gesendet, der als Protokollversand-Agent bezeichnet werden kann.

Mal sehen, wie all diese Teile zusammenpassen. Unsere Testumgebung wird aus folgenden Maschinen bestehen:

Central Server: CentOS 7 (IP address: 192.168.0.29). 2 GB of RAM.
Client #1: CentOS 7 (IP address: 192.168.0.100). 1 GB of RAM.
Client #2: Debian 8 (IP address: 192.168.0.101). 1 GB of RAM.

Bitte beachten Sie, dass es sich bei den hier angegebenen RAM-Werten nicht um strenge Voraussetzungen, sondern um empfohlene Werte für eine erfolgreiche Implementierung des ELK-Stacks auf dem zentralen Server handelt. Weniger RAM auf den Clients wird, wenn überhaupt, keinen großen Unterschied machen.

ELK Stack auf dem Server installieren

Beginnen wir mit der Installation des ELK-Stacks auf dem Server, zusammen mit einer kurzen Erklärung der Funktionsweise der einzelnen Komponenten:

  1. Elasticsearch speichert die Protokolle, die von den Clients gesendet werden.
  2. Logstash verarbeitet diese Protokolle.
  3. Kibana stellt die Weboberfläche bereit, die uns bei der Inspektion und Analyse der Protokolle hilft.

Installieren Sie die folgenden Pakete auf dem zentralen Server. Zunächst installieren wir Java JDK Version 8 (Update 102, das neueste zum Zeitpunkt des Verfassens dieses Artikels), was eine Abhängigkeit darstellt der ELK-Komponenten.

Möglicherweise möchten Sie zunächst auf der Java-Downloadseite hier nachsehen, ob ein neueres Update verfügbar ist.

yum update
cd /opt
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jre-8u102-linux-x64.rpm"
rpm -Uvh jre-8u102-linux-x64.rpm

Zeit zu überprüfen, ob die Installation erfolgreich abgeschlossen wurde:

java -version

Um die neuesten Versionen von Elasticsearch, Logstash und Kibana zu installieren, müssen wir manuell Repositorys für yum erstellen wie folgt:

Aktivieren Sie das Elasticsearch-Repository

1. Importieren Sie den öffentlichen GPG-Schlüssel von Elasticsearch in den RPM-Paketmanager:

rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

2. Fügen Sie die folgenden Zeilen in die Repository-Konfigurationsdatei elasticsearch.repo ein:

[elasticsearch]
name=Elasticsearch repository
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

3. Installieren Sie das Elasticsearch-Paket.

yum install elasticsearch

Wenn die Installation abgeschlossen ist, werden Sie aufgefordert, Elasticsearch zu starten und zu aktivieren:

4. Starten und aktivieren Sie den Dienst.

systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch

5. Erlauben Sie Datenverkehr über den TCP-Port 9200 in Ihrer Firewall:

firewall-cmd --add-port=9200/tcp
firewall-cmd --add-port=9200/tcp --permanent

6. Überprüfen Sie, ob Elasticsearch auf einfache Anfragen über HTTP reagiert:

curl -X GET http://localhost:9200

Die Ausgabe des obigen Befehls sollte etwa so aussehen:

Stellen Sie sicher, dass Sie die oben genannten Schritte ausführen und fahren Sie dann mit Logstash fort. Da sowohl Logstash als auch Kibana den Elasticsearch GPG-Schlüssel teilen, ist es nicht erforderlich, ihn vor der Installation der Pakete erneut zu importieren.

Empfohlene Lektüre: Verwalten Sie Systemprotokolle (Konfigurieren, Rotieren und Importieren in die Datenbank) in CentOS 7

Aktivieren Sie das Logstash-Repository

7. Fügen Sie die folgenden Zeilen in die Repository-Konfigurationsdatei logstash.repo ein:

[logstash]
name=Logstash
baseurl=http://packages.elasticsearch.org/logstash/2.2/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1

8. Installieren Sie das Logstash-Paket:

yum install logstash

9. Fügen Sie ein SSL-Zertifikat basierend auf der IP-Adresse des ELK-Servers in der folgenden Zeile unter dem Abschnitt [ v3_ca ] in /etc/pki/tls/openssl.cnf:

[ v3_ca ]
subjectAltName = IP: 192.168.0.29

10. Erstellen Sie ein selbstsigniertes Zertifikat, das 365 Tage gültig ist:

cd /etc/pki/tls
openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

11. Konfigurieren Sie Logstash-Eingabe-, Ausgabe- und Filterdateien:

Eingabe: Erstellen Sie /etc/logstash/conf.d/input.conf und fügen Sie die folgenden Zeilen ein. Dies ist notwendig, damit Logstash „lernen“ kann, wie man Beats von Clients verarbeitet. Stellen Sie sicher, dass der Pfad zum Zertifikat und Schlüssel mit den richtigen Pfaden übereinstimmt, wie im vorherigen Schritt beschrieben:

input {
  beats {
	port => 5044
	ssl => true
	ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
	ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

Ausgabedatei (/etc/logstash/conf.d/output.conf):


output {
  elasticsearch {
	hosts => ["localhost:9200"]
	sniffing => true
	manage_template => false
	index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
	document_type => "%{[@metadata][type]}"
  }
}

Filterdatei (/etc/logstash/conf.d/filter.conf). Der Einfachheit halber werden wir Syslog-Meldungen protokollieren:


filter {
if [type] == "syslog" {
	grok {
  	match => { "message" => "%{SYSLOGLINE}" }
	}

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

12. Überprüfen Sie die Logstash-Konfigurationsdateien.

service logstash configtest

13. Logstash starten und aktivieren:

systemctl daemon-reload
systemctl start logstash
systemctl enable logstash

14. Konfigurieren Sie die Firewall so, dass Logstash die Protokolle von den Clients abrufen kann (TCP-Port 5044):

firewall-cmd --add-port=5044/tcp
firewall-cmd --add-port=5044/tcp --permanent

Aktivieren Sie das Kibana-Repository

14. Fügen Sie die folgenden Zeilen in die Repository-Konfigurationsdatei kibana.repo ein:

[kibana]
name=Kibana repository
baseurl=http://packages.elastic.co/kibana/4.4/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

15. Installieren Sie das Kibana-Paket:

yum install kibana

16. Starten und aktivieren Sie Kibana.

systemctl daemon-reload
systemctl start kibana
systemctl enable kibana

17. Stellen Sie sicher, dass Sie von einem anderen Computer aus auf die Weboberfläche von Kibana zugreifen können (lassen Sie Datenverkehr auf dem TCP-Port 5601 zu):

firewall-cmd --add-port=5601/tcp
firewall-cmd --add-port=5601/tcp --permanent

18. Starten Sie Kibana (http://192.168.0.29:5601), um zu überprüfen, ob Sie auf die Weboberfläche zugreifen können:

Wir kehren hierher zurück, nachdem wir Filebeat auf den Clients installiert und konfiguriert haben.

Empfohlene Lektüre: Überwachen Sie Serverprotokolle in Echtzeit mit dem Tool „Log.io“ unter Linux

Installieren Sie Filebeat auf den Client-Servern

Wir zeigen Ihnen, wie Sie dies für Client #1 tun (wiederholen Sie den Vorgang anschließend für Client #2 und ändern Sie dabei ggf. die Pfade für Ihre Distribution).

1. Kopieren Sie das SSL-Zertifikat vom Server auf die Clients:

scp /etc/pki/tls/certs/logstash-forwarder.crt [email :/etc/pki/tls/certs/

2. Importieren Sie den öffentlichen GPG-Schlüssel von Elasticsearch in den RPM-Paketmanager:

rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

3. Erstellen Sie ein Repository für Filebeat (/etc/yum.repos.d/filebeat.repo) in CentOS basierte Verteilungen:

[filebeat]
name=Filebeat for ELK clients
baseurl=https://packages.elastic.co/beats/yum/el/$basearch
enabled=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
gpgcheck=1

4. Konfigurieren Sie die Quelle, um Filebeat auf Debian und seinen Derivaten zu installieren:

aptitude install apt-transport-https
echo "deb https://packages.elastic.co/beats/apt stable main" > /etc/apt/sources.list.d/filebeat.list
aptitude update

5. Installieren Sie das Filebeat-Paket:

yum install filebeat        [On CentOS and based Distros]
aptitude install filebeat   [On Debian and its derivatives]

6. Filebeat starten und aktivieren:

systemctl start filebeat
systemctl enable filebeat

Konfigurieren Sie Filebeat

Hier ein Wort der Vorsicht. Die Filebeat-Konfiguration wird in einer YAML-Datei gespeichert, die eine strikte Einrückung erfordert. Seien Sie dabei vorsichtig, wenn Sie /etc/filebeat/filebeat.yml wie folgt bearbeiten:

  1. Geben Sie unter Pfade an, welche Protokolldateien an den ELK-Server „versendet“ werden sollen.
  2. Unter Prospektoren:
input_type: log
document_type: syslog
  1. Unter Ausgabe:

    1. Kommentieren Sie die Zeile aus, die mit logstash beginnt.
    2. Geben Sie die IP-Adresse Ihres ELK-Servers und den Port an, an dem Logstash Hosts überwacht.
    3. Stellen Sie sicher, dass der Pfad zum Zertifikat auf die tatsächliche Datei verweist, die Sie oben in Schritt I (Abschnitt Logstash) erstellt haben.

Die oben genannten Schritte werden im folgenden Bild veranschaulicht:

Speichern Sie die Änderungen und starten Sie dann Filebeat auf den Clients neu:

systemctl restart filebeat

Sobald wir die oben genannten Schritte für die Clients abgeschlossen haben, können Sie fortfahren.

Filebeat testen

Um zu überprüfen, ob die Protokolle von den Clients erfolgreich gesendet und empfangen werden können, führen Sie den folgenden Befehl auf dem ELK-Server aus:

curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'

Die Ausgabe sollte ähnlich sein wie (beachten Sie, wie Nachrichten von /var/log/messages und /var/log/secure von client1 empfangen werden und Client2):

Überprüfen Sie andernfalls die Filebeat-Konfigurationsdatei auf Fehler.

journalctl -xe

Nach dem Neustartversuch weist Filebeat Sie auf die fehlerhafte(n) Zeile(n) hin.

Kibana testen

Nachdem wir überprüft haben, dass Protokolle von den Clients versendet und erfolgreich auf dem Server empfangen werden. Das erste, was wir in Kibana tun müssen, ist, ein Indexmuster zu konfigurieren und es als Standard festzulegen.

Sie können einen Index als vollständige Datenbank in einem relationalen Datenbankkontext beschreiben. Wir verwenden filebeat-* (oder Sie können ein präziseres Suchkriterium verwenden, wie in der offiziellen Dokumentation erläutert).

Geben Sie filebeat-* in das Feld Indexname oder Muster ein und klicken Sie dann auf Erstellen:

Bitte beachten Sie, dass Sie später detailliertere Suchkriterien eingeben können. Klicken Sie anschließend auf den Stern im grünen Rechteck, um es als Standardindexmuster zu konfigurieren:

Schließlich finden Sie im Menü Entdecken mehrere Felder, die Sie dem Protokollvisualisierungsbericht hinzufügen können. Bewegen Sie einfach den Mauszeiger darüber und klicken Sie auf Hinzufügen:

Die Ergebnisse werden im mittleren Bereich des Bildschirms angezeigt, wie oben gezeigt. Probieren Sie ruhig herum (fügen Sie Felder zum Protokollbericht hinzu und entfernen Sie sie), um sich mit Kibana vertraut zu machen.

Standardmäßig zeigt Kibana die Datensätze an, die in den letzten 15 Minuten verarbeitet wurden (siehe obere rechte Ecke), aber Sie können dieses Verhalten ändern, indem Sie einen anderen Zeitrahmen auswählen:

Zusammenfassung

In diesem Artikel haben wir erklärt, wie man einen ELK-Stack einrichtet, um die von zwei Clients, einem CentOS 7- und einem Debian 8-Rechner, gesendeten Systemprotokolle zu sammeln.

Jetzt können Sie in der offiziellen Elasticsearch-Dokumentation nachlesen, wie Sie mit diesem Setup Ihre Protokolle effizienter prüfen und analysieren können.

Wenn Sie Fragen haben, zögern Sie nicht, diese zu stellen. Wir freuen uns von Ihnen zu hören.