Der Elastic Stack (auch unter ELK Stack bekannt), ist eine Ansammlung von Services des Unternehmens elastic zum zentralen Sammeln und Auswerten von Log Daten.
Ich beschäftige mich in letzter zeit häufig mit diesem Thema.
Daher möchte ich hier eine kurze Anleitung liefern, wie man einen solchen Server für Testzwecke einrichtet.
Um einen Zentralen Logging Server zu betreiben, benötigt man mehrere Komponente von elastic.
Von einem Elastik Stack spricht man, wenn alle Komponenten auf einem Server laufen.
Dieser Elastic Stack Server stellt alle notwendigen Services zur Sammlung, Filterung und Auswertung von Log Daten bereit.
Die Services bestehen aus:
- Kibana = Eine Web Übersicht mit eigens zu erstellenden Dashboards mit Graphen und Tabellen.
- Logstash = Empfängt die Logeinträge und Filtert diese, danach werden diese zur ElasticSearch DB weitergeleitet.
- ElasticSearch = Suchmaschinen DB mit der sich der Datenbestand durchsuchen und analysieren lässt.
- Beats = Agent Service auf den zu überwachenden Clients. Überträgt z.B. Log Files zu Logstash.
Neben diesen Services gibt es z.B. WinLogBeat – zum erfassen von Windows Logs oder PacketBeat zur Netzwerkanalyse.
Diese Services werden bei elastic alle unter dem namen Beats vertrieben.
Die Daten vom Client(z.B. der Filebeat Agent) werden über einen gesonderten Port(5000), verschlüsselt mittels eines x509 Zertifikats an den Logging Server übertragen.
Zusätzlich gibt es noch das X-Pack, welches die Services um Funktionen wie Authentifizierung und Export von Berichten erweitert.
Achtung! Das X-Pack benötigt eine Lizenz von elastic. Wir werden es hier jedoch zu Testzwecken gleich mit installieren.
Die Verschlüsselung der Übertragung mittels x509 wird in diesem Artikel nicht durchgeführt.
Grundeinrichtung
Zuerst wird ein neuer Linux Server eingerichtet.
Ich habe mir hierfür eine kleine VM in VirtualBOX erstellt und mich für ein Debian Linux entschieden.
Als Hostname habe ich „ELK1“ gewählt und ihm eine feste IP gegeben(192.168.0.20)
Zusätzlich habe ich noch den „nano“ Editor installiert. Ihr könnt aber jeden beliebigen Editor nutzen.
Zuerst muss für Logstash Version 5.x noch Java 8 mit folgendem Befehl auf dem System installiert werden
sudo apt install openjdk-8-jre-headless
Die Grundinstallation des Betriebssystems ist hiermit abgeschlossen.
Offiziell wird zur Installation der Elastic Komponenten folgende Reihenfolge empfohlen
- Elasticsearch
- X-Pack für Elastic Search
- Kibana
- X-Pack für Kibana
- Logstash
- Beat Agents
Diese Reihenfolge werden wir in diesem Tutorial auch für den Elastic Stack beibehalten.
1. Elastic Search Installation
Ich beschreibe hier in kurzen Sätzen die Installation der Komponenten nach Vorgaben von Elastic.
Raspberry Pi 5 4GB
71,98 € (von 21. Dezember 2024 12:04 GMT +01:00 - Mehr InformationenProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)Damit alle Elastic Pakete über Apt-Get Installiert werden können, muss deren Public Key hinterlegt werden(das „-“ am ende des Commands nicht vergessen!)
Ebenso muss für APT nocht der HTTPS Transport aktiviert werden und das Elastic Repository hinterlegt werden.wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
- Elastic Search installieren
sudo apt-get update && sudo apt-get install elasticsearch
Elastic Search zum Autostart hinzufügen und starten
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
Nach der Installation werden automatisch die Config, Home und Data Folder erstellt.
- Config folder: /etc/elasticsearch
- Home Folder: /usr/share/elasticsearch
- Data Folder: /var/lib/elasticsearch
Die Konfiguration von elastic Search findet unter /etc/elasticsearch/elasticsearch.yml statt.
Hier wurde die Host IP und zusätzliche Anpassungen für das Elastic X-Pack hinterlegt.
Einfach am Anfang der Datei einfügen, der Rest kann als Hilfe drin bleiben oder entfernt werden.
path: logs: /var/log/elasticsearch node.name: ${HOSTNAME} network.host: 192.168.0.20 http.port: 9200 #anpassung für x-pack action.auto_create_index: .security,.monitoring*,.watches,.triggered_watches,.watcher-history*
2. X-Pack Installation für Elastic Search
Ins Verzeichnis /usr/share/elasticsearch/ wechseln und folgendes Kommando ausführen.
bin/elasticsearch-plugin install x-pack
3. Kibana Installation
Kibana wird genauso wie Elastic Search über den Apt Paketdienst installiert
sudo apt-get update && sudo apt-get install kibana
Auch hier wird der Service wieder zum Autostart hinzugefügt und direkt gestartet
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable kibana.service
sudo systemctl start kibana.service
Auch hier werden automatisch wieder die Home, Config und Data Ordner erstellt.
Die Konfiguration findet unter /etc/kibana/kibana.yml statt
Hier wurde die URL des Elasticsearch Servers hinterlegt.
Laut offizieller Dokumentation soll man nicht die Lokalhost Adresse angeben, auch wenn der Dienst auf dem gleichen Elastic Stack Server läuft.
server.host: "192.168.0.20" server.port: 5601 server.name: "ELK1" elasticsearch.url: "http://192.168.0.20:9200" kibana.index: ".kibana"
4. X-Pack Installation für Kibana
Ins Verzeichnis /usr/share/kibana/ wechseln und folgendes Kommando ausführen.
bin/kibana-plugin install x-pack
Ab jetzt sollte der Zugriff auf das Webinterface von Kibana mittels Login möglich sein.
Default Username: elastic
Default PW: changeme
Bei mir gab es hier beim Aufruf des Kibana Interfaces über http://192.168.0.20:5601/ einen Redirect Fehler.
Auch ein Neustart aller Dienste half nicht. Erst nachdem ich die Linux VM neu gestartet hatte, ging der Zugriff.
Im Kibana Interface wird, nachdem wir die ersten Logs eingelesen haben, der „logstash-*“ Index erstellt
5. Logstash Installation
Auch bei Logstash findet die Installation über den Apt Paketmanager statt
sudo apt-get update && sudo apt-get install logstash
Auch hier wird der Service wieder zum Autostart hinzugefügt und direkt gestartet
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable logstash.service
sudo systemctl start logstash.service
Ebenso werden auch hier automatisch wieder die Home, Config und Data Ordner erstellt.
Die Konfiguration des Service findet unter /etc/logstash/logstash.yml statt
Hier habe ich keine Änderungen vorgenommen
Die eigentliche Einrichtung der Filter als auch der Ports über die Logstash erreichbar ist, wird über den Ordner /etc/logstash/conf.d/* durchgeführt.
Hier werden die Filter Conf Dateien hinterlegt.
Für den ersten Test habe ich hier mal eine simple Windows LogBeat Filterdatei mit dem namen logstash-simple.conf erstellt
Hier wurde die lokale Host-Adresse und der Logstash Port als Input hinterlegt.
Und es wurde als Output der Elasticsearch Service hinterlegt.
input { beats { host => "192.168.0.20" port => "5043" } } output { elasticsearch { hosts => ["192.168.0.20:9200"] user => elastic password => changeme } }
Mittels des folgenden Kommandos kann geprüft werden ob die config funktioniert und ob der port geöffnet wird.
Ins Verzeichnis /usr/share/logstash wechseln und folgendes ausführen:
bin/logstash -f /etc/logstash/conf.d/logstash-simple.conf --config.reload.automatic
Hiernach müsste sich der Port 5043 öffen. Zum testen kann man hier dann eine Telnet Verbindung dorthin aufbauen.
Hat dies funktioniert kann man den Test Modus mittels STG+C beenden und den Logstash Service neu starten
sudo systemctl restart logstash
Die Installation des Elastic Stack ist hiermit abgeschlossen.
6. Windows Beats Agent Installation(Winlogbeat)
Der Winlogbeat Agent kann unter: https://www.elastic.co/downloads/beats/winlogbeat heruntergeladen werden.
Das Zip File nach C:\Programme\Winlogbeat-‚version‘ entpacken.
Hier die install-service-winlogbeat.ps1 Datei in Powershell ausführen.
Jetzt sollte in den Windows Diensten ein neuer Service namens „winlogbeat“ erscheinen.
Zum Konfigurieren wird die Datei „winlogbeat.yml“ im Programmfolder bearbeitet.
Hier habe ich zum testen alle Windows Events als input eingetragen und übergebe das ganze an Logstash.
Ebenso habe ich das lokale Logging aktiviert um z.B. Verbindungsprobleme zu sehen.
winlogbeat.event_logs: - name: Application - name: Security - name: System output.logstash: enabled: true hosts: ["192.168.0.20:5043"] index: "winlogbeat" logging.to_files: true logging.files: path: C:/ProgramData/winlogbeat/Logs logging.level: info
Nun kann der Windows Dienst gestartet werden.
Mit folgendem Kommando wird nun noch ein Windows Log Eintrag erzeugt:
eventcreate /ID 1 /L APPLICATION /T INFORMATION /SO MYEVENTSOURCE /D "My first log"
Nun kann in der Log Datei unter C:\ProgramData\winlogbeat\Logs geprüft werden ob die Übertragung funktioniert hat.
Es sollte die Meldung „Successfully published 1 events“ im Log zu finden sein.
Genau so kann auch Filebeat unter Windows installiert werden.
Um Filebeat zu nutzen musste zusätzlich, einmalig folgendes Kommando ausgeführt werden, um das Filebeat Template in Logstash zu laden
Invoke-WebRequest -Method Put -InFile filebeat.template.json -Uri http://192.168.0.20:9200/_template/filebeat?pretty
In der Filebeat.yml Datei am Beat Client wurden zum einlesen von Logdateien folgende Angaben in der Datei gemacht
#=========================== Filebeat prospectors ============================= filebeat.prospectors: - input_type: log - C:\Logs\* #================================ Outputs ===================================== #----------------------------- Logstash output -------------------------------- output.logstash: # The Logstash hosts hosts: ["192.168.0.20:5043"]
Nun können auch Log Dateien unter C:\Logs\ eingelesen werden.
Hierbei ist zu beachten, dass die Abfrage der Logverzeichnisse nicht rekursiv ist, sprich Unterordner werden hierbei nicht beachtet.
Die Grundeinrichtung ist hiermit abgeschlossen.
Zum Schluss noch im Kibana prüfen, ob die Log-Dateien eingelesen wurden.(zuvor bitte den „logstash-*“ Index in Kibana erstellen)
Nützliche Quellen und weitere To Do’s
Produktiv sollte dieser Server noch nicht eingesetzt werden.
Es fehlt hier noch die Verschlüsselung der Übertragung und das Einrichten von Filtern in Logstash.
Ebenso empfehlt es sich, Kibana über eine vorhandene Active Directory Struktur anzubinden.
Informationen zu dieser Einrichtung als auch einige Beispielkonfigurationen findet ihr unter:
https://www.elastic.co/guide/index.html
Super Anleitung!
Eine frage noch habe alles so eingerichtet(mit Winlogbeat). Jetzt wollte ich aber noch wissen wo die Daten vom Logstash gespeichert werden. Habe auch kein Index beim Elasticsearch.
Bitte um Hilfe vielen Dank
Hi Logstash an sich leitet die Daten ja nur gefiltert weiter. Gespeichert werden sie im ElasticSearch. Wenn du selbst keinen Index angelegt hast müsste normalerweise automatisch einer erstellt werden.
Anbei noch ein Bild wie die Systeme miteinander arbeiten:
https://logz.io/wp-content/uploads/2018/08/image21-1024×328.png