
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:
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 .