Logstash 9.x mit Elasticsearch Kibana

Veröffentlicht am 2025-07-30

« Alle Vorträge ansehen Kontaktieren Sie uns
Logstash 9.x with Elasticsearch Kibana

Einführung

Wir richten Logstash wie folgt ein:diese Dokumentation und es mit Version 9 von Elasticsearch und Kibana funktionieren lassen. Wir gehen davon aus, dass Sie Elasticsearch bereits haben und gemäß dieses Tutorial, obwohl Sie die Installation von Kibana ignorieren können, wenn Sie die UI Dev Tools nicht benötigen (wir können CURL-Befehle zum Überprüfen der Daten verwenden).

Wenn Sie mit Logstash vertraut sind und direkt mit der Verwendung von systemd beginnen möchten, fahren Sie mit dem letzten Schritt fort.

Anforderungen

Im Video verwenden wir eine Instanz von Ubuntu 24.04, die auf einer VM mit 8 GB Speicher läuft. Die VM läuft in einem lokalen privaten Netzwerk. Wir installieren Elastic und Logstash auf diesem Server.

Schritte

Schritt 1 – Ubuntu aktualisieren

Die Ubuntu-Installation ist brandneu. Wir aktualisieren die Distribution und installieren einige Tools, die wir normalerweise auf beiden Maschinen verwenden.

apt-get update && apt dist-upgrade -y && apt-get install -y vim curl zip jq gnupg gpg

Schritt 2 – Logstash installieren

Die Ubuntu-Installationen benötigen diese Abhängigkeiten, führen Sie daher auf beiden diese Befehle aus:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/9.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-9.x.list apt-get update; apt-get install -y apt-transport-https; apt-get install -y logstash;

Schritt 3 – Testen der Logstash-Grundlagen

In den neuesten Versionen von Logstash (im Gegensatz zu früheren Versionen) können Sie Befehlszeilentools nur mit einem Nicht-Wurzel Benutzer, andernfalls erhalten Sie Warnungen. (Wir zeigen die systemd-Methode im letzten Schritt). Um Befehlszeilentools zu verwenden, erstellen wir einen nicht privilegierten Benutzer.

adduser em

Melden Sie sich an als sie Benutzer:

su em cd ~

Testen Sie Logstash jetzt damit.

/usr/share/logstash/bin/logstash -e 'input { stdin { } } output { stdout {} }' --path.settings /home/em --path.data /home/em

Jetzt wird jedes Mal, wenn Sie etwas eingeben, es sofort auf stdout gedruckt:

The stdin plugin is now waiting for input: hello world { "@timestamp" => 2025-07-28T22:38:19.282255105Z, "message" => "hello world", "event" => { "original" => "hello world" }, "@version" => "1", "host" => { "hostname" => "logstash" } }

Sie können drücken CTRL C um den Logstash-Prozess zu stoppen.

Schritt 4 – Testen der Logstash Elasticsearch-Ausgabe

Kopieren Sie http_ca.crt

Als Wurzel Benutzer:

cp /etc/elasticsearch/certs/http_ca.crt /home/em/ chown -R em:em /home/em

CSV aufnehmen und an Elasticsearch ausgeben

In den nächsten Schritten verwenden wir die sie Benutzer.

Machen Sie dies /home/em/customers.csv:

E-Mail, Vorname, Nachname, Ort, Landkreis, Bundesland, Postleitzahl, Web
carol.davis@example.net, Carol, Davis, Seattle, King, WA, 98101, www.caroldavisexample.net
faizal@helloworldexample.com, Faizal, Gupta, Kingston, King, WA, 93211, www.helloworldexample.com

Machen Sie dies /home/em/customers.conf:

Eingabe {
Datei {
Pfad => "/home/em/customers.csv"
Startposition => "Anfang"
sincedb_path => "/dev/null"
}
}

Filter {
CSV {
Trennzeichen => ","
Skip_Header => "true"
Spalten => ["E-Mail", "Vorname", "Nachname", "Stadt", "Landkreis", "Bundesland", "Postleitzahl", "Web"]
}

Mutation {
Konvertieren => { "Postleitzahl" => "Ganzzahl" }
}
}

Ausgabe {
Elasticsearch {
Hosts => ["${ES_HOST}"]
SSL_aktiviert => true
SSL_Zertifikatautoritäten => "/home/em/http_ca.crt"
Benutzer => "Elastic"
Passwort => "${ES_PASS}"
Index => "Kunden"
Dokument-ID => "%{E-Mail}"
}

Standardausgabe { Codec => Rubydebug }
}

Wir verwenden eine Umgebungsvariable für ES_HOST.

Wir müssen die ES_PASS. Da es sich um vertrauliche Informationen handelt, gehen wir wie folgt mit dem Schlüsselspeicher vor:

/usr/share/logstash/bin/logstash-keystore create --path.settings /home/em /usr/share/logstash/bin/logstash-keystore add ES_PASS --path.settings /home/em

Jetzt kann es losgehen:

export ES_HOST="https://192.168.88.7:9200" && \ /usr/share/logstash/bin/logstash -f /home/em/customers.conf --path.settings /home/em --path.data /home/em

Sehen Sie sich die Ergebnisse an:

curl -u elastic:ABCD1234 https://192.168.88.7:9200/customers/_search --cacert /home/em/http_ca.crt | jq .

Schritt 5 – Testen mehrerer Pipelines

Lassen Sie uns mehrere Pipelines gleichzeitig ausführen. Wir erstellen eine neue Pipeline namens /home/em/tasks.conf:

Eingabe {
Datei {
Pfad => "/home/em/tasks.csv"
Startposition => "Anfang"
seitdb_path => "/dev/null"
}
}
Filter {
CSV {
Trennzeichen => ","
Kopfzeilensprung => "true"
Spalten => ["Aufgabenname", "Aufgabenbeschreibung"]
}
}
Ausgabe {
Elasticsearch {
Hosts => ["${ES_HOST}"]
SSL_aktiviert => true
SSL_Zertifikatautoritäten => "/home/em/http_ca.crt"
Benutzer => "Elastic"
Passwort => "${ES_PASS}"
Index => "Aufgaben"
}

Standardausgabe { Codec => Rubydebug }
}

Wir werden aufnehmen /home/em/tasks.csv, die folgenden Inhalt haben sollte:

task_name,task_description eat pizza,time to enjoy pizza drink water,stay hydrated

Fügen wir einen weiteren Eintrag hinzu zu /home/em/customers.csv:

samo@hane.com,Samo,Hane,1st Street,NY,20192,www.samo.com

Und lasst uns ein /home/em/pipelines.yml mit diesem Inhalt:

- pipeline.id: customers path.config: "/home/em/customers.conf" - pipeline.id: tasks path.config: "/home/em/tasks.conf"

Der pipelines.yml Die Datei muss sich im angegebenen Verzeichnis befinden durch --path.settings.

Lassen Sie uns nun beide Pipelines ausführen customers.conf Und tasks.conf:

export ES_HOST="https://192.168.88.7:9200" && \ /usr/share/logstash/bin/logstash --path.settings /home/em --path.data /home/em

Sehen Sie sich die Ergebnisse an:

curl -u elastic:ABCD1234 https://192.168.88.7:9200/tasks/_search --cacert /home/em/http_ca.crt | jq . curl -u elastic:ABCD1234 https://192.168.88.7:9200/customers/_search --cacert /home/em/http_ca.crt | jq .

Schritt 6 – Logstash als Dienst ausführen

Melden Sie sich an als Wurzel Benutzer.

Wir wiederholen alle oben genannten Schritte, jedoch unter Verwendung der standardmäßigen Logstash-Dateisystemorganisation und fügen einige weitere Testdaten hinzu.

mkdir -p /var/lib/logstash/certs/
cp /etc/elasticsearch/certs/http_ca.crt /var/lib/logstash/certs/

mkdir -p /var/lib/logstash/data/

cat > /var/lib/logstash/data/customers.csv <<EOL
E-Mail, Vorname, Nachname, Ort, Landkreis, Bundesland, Postleitzahl, Web
cappy@example1.com,Cappy,Do,Toronto,King,WA,98101,www.example1.com
bluey@example2.net,Bluey,Whaly,Miami,King,WA,83211,www.example2.net
EOL

cat > /etc/logstash/conf.d/customers.conf <<'EOL'
Eingabe {
Datei {
Pfad => "/var/lib/logstash/data/customers.csv"
start_position => "Anfang"
seitdb_path => "/dev/null"
}
}

filter {
csv {
trennzeichen => ","
überspringen_header => "true"
spalten => ["E-Mail", "Vorname", "Nachname", "Ort", "Landkreis", "Bundesland", "Postleitzahl", "Web"]
}

ändern {
konvertieren => { "Postleitzahl" => "Ganzzahl" }
}
}

ausgabe {
elasticsearch {
hosts => ["${ES_HOST}"]
ssl_aktiviert => true
ssl_certificate_authorities => "/var/lib/logstash/certs/http_ca.crt"
benutzer => "elastic"
passwort => "${ES_PASS}"
index => "kunden"
dokument_id => "%{email}"
}

stdout { codec => rubydebug }
}
EOL

cat > /var/lib/logstash/data/tasks.csv <<EOL
Aufgabenname, Aufgabenbeschreibung
Hausaufgaben machen, Kinder lieben Hausaufgaben
Abwaschen, Papa spült gerne ab
EOL
cat > /etc/logstash/conf.d/tasks.conf <<'EOL'
Eingabe {
Datei {
Pfad => "/var/lib/logstash/data/tasks.csv"
Startposition => "Anfang"
sincedb_path => "/dev/null"
}
}
Filter {
CSV {
Trennzeichen => ","
Skip_Header => "true"
Spalten => ["Aufgabenname", "Aufgabenbeschreibung"]
}
}
Ausgabe {
Elasticsearch {
Hosts => ["${ES_HOST}"]
SSL_aktiviert => true
ssl_certificate_authorities => "/var/lib/logstash/certs/http_ca.crt"
Benutzer => "elastic"
Passwort => "${ES_PASS}"
Index => "Aufgaben"
}

stdout { Codec => rubydebug }
}
EOL

cat > /etc/logstash/pipelines.yml <<'EOL'
- pipeline.id: Kunden
path.config: "/etc/logstash/conf.d/customers.conf"
- pipeline.id: Aufgaben
path.config: "/etc/logstash/conf.d/tasks.conf"
EOL

chown -R logstash:logstash /var/lib/logstash
chown -R logstash:logstash /etc/logstash

An diesem Punkt müssen wir die ES_HOST Umgebungsvariable:

systemctl edit logstash.service Dann machen Sie Folgendes:

[Dienst]
Umgebung="ES_HOST=https://192.168.88.7:9200"

Es sollte so aussehen:

logstash.service

Und dann hinzufügen ES_PASS zum Schlüsselspeicher:

/usr/share/logstash/bin/logstash-keystore create --path.settings /etc/logstash /usr/share/logstash/bin/logstash-keystore add ES_PASS --path.settings /etc/logstash

Jetzt geht's los

systemctl enable logstash systemctl daemon-reload systemctl start logstash

Von Zeit zu Zeit können Sie den Status überprüfen mit systemctl status logstash, oder schauen Sie in der /var/log/syslog.

Sie sollten in der Lage sein, Inhalte in Elasticsearch mit Folgendem anzuzeigen:

curl --cacert /var/lib/logstash/certs/http_ca.crt -u elastic:ABCD1234 https://192.168.88.7:9200/customers/_search | jq . curl --cacert /var/lib/logstash/certs/http_ca.crt -u elastic:ABCD1234 https://192.168.88.7:9200/tasks/_search | jq .