Logstash 9.x avec Elasticsearch Kibana

Publié le 30/07/2025

« Voir toutes les conférences Contactez-nous
Logstash 9.x with Elasticsearch Kibana

Introduction

Nous allons configurer Logstash conformément à cette documentation et le faire fonctionner avec la version 9 d'Elasticsearch et Kibana. Nous supposons que vous possédez déjà Elasticsearch et que vous l'avez créé conformément à ce tutoriel, bien que vous puissiez ignorer l'installation de Kibana si vous n'avez pas besoin des outils de développement de l'interface utilisateur (nous pouvons utiliser les commandes CURL pour inspecter les données).

Si vous connaissez déjà Logstash et souhaitez utiliser directement systemd, passez à l’étape finale.

Exigences

Dans la vidéo, nous avons utilisé une instance d'Ubuntu 24.04 exécutée sur une machine virtuelle dotée de 8 Go de mémoire. La machine virtuelle fonctionnera sur un réseau privé local. Nous installerons Elastic et Logstash sur ce serveur.

Mesures

Étape 1 - Mettre à jour Ubuntu

L'installation d'Ubuntu est toute récente. Nous mettons à jour la distribution et installons certains outils que nous utilisons habituellement sur les deux machines.

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

Étape 2 - Installer Logstash

Les installations d'Ubuntu ont besoin de ces dépendances, alors exécutez ces commandes sur les deux :

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;

Étape 3 - Tester les bases de Logstash

Dans les dernières versions de Logstash (contrairement aux versions précédentes), vous ne pouvez exécuter des outils de ligne de commande qu'avec un-racine utilisateur, sinon vous recevrez des avertissements. (Nous présenterons la méthode systemd à l'étape finale.) Pour utiliser les outils en ligne de commande, créons un utilisateur sans privilège.

adduser em

Connectez-vous en tant que eux utilisateur:

su em cd ~

Testez maintenant Logstash avec ceci.

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

Désormais, chaque fois que vous tapez quelque chose, il est immédiatement imprimé sur stdout :

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" } }

Vous pouvez appuyer sur CTRL C pour arrêter le processus logstash.

Étape 4 - Tester la sortie Elasticsearch de Logstash

Copier http_ca.crt

Comme le racine utilisateur:

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

Ingérer le fichier CSV et le transmettre à Elasticsearch

Dans les prochaines étapes, nous utiliserons le eux utilisateur.

Fais ça /home/em/customers.csv:

e-mail, prénom, nom, ville, comté, État, code postal, site 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

Fais ça /home/em/customers.conf:

entrée {
fichier {
chemin => "/home/em/clients.csv"
position_début => "début"
chemin_de_la_base_de_données => "/dev/null"
}
}

filtre {
csv {
séparateur => ","
en-tête_ignorer => "true"
colonnes => ["e-mail", "prénom", "nom", "ville", "comté", "état", "code postal", "web"]
}

mutation {
conversion => { "code postal" => "entier" }
}
}

sortie {
elasticsearch {
hôtes => ["${ES_HOST}"]
ssl_activé => true
autorités_certificat_ssl => "/home/em/http_ca.crt"
utilisateur => "elastic"
mot_de_passe => "${ES_PASS}"
index => "clients"
id_document => "%{email}"
}

sortie standard { codec => rubydebug }
}

Nous utiliserons une variable d’environnement pour ES_HOST.

Nous devons fixer le ES_PASS. Puisqu'il s'agit d'informations sensibles, faisons ceci avec le keystore :

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

Vous pouvez maintenant commencer :

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

Voir les résultats :

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

Étape 5 – Tester plusieurs pipelines

Exécutons plusieurs pipelines simultanément. Nous allons créer un nouveau pipeline appelé /home/em/tasks.conf:

entrée {
fichier {
chemin => "/home/em/tasks.csv"
position_début => "début"
chemin_de_la_base_de_données => "/dev/null"
}
}
filtre {
csv {
séparateur => ","
en-tête_ignoré => "true"
colonnes => ["nom_tâche", "description_tâche"]
}
}
sortie {
elasticsearch {
hôtes => ["${ES_HOST}"]
ssl_activé => true
autorités_certificat_ssl => "/home/em/http_ca.crt"
utilisateur => "elastic"
mot_de_passe => "${ES_PASS}"
index => "tâches"
}

sortie_standard { codec => rubydebug }
}

Nous allons ingérer /home/em/tasks.csv, qui devrait avoir ce contenu :

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

Ajoutons une entrée supplémentaire à /home/em/customers.csv:

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

Et créons un /home/em/pipelines.yml avec ce contenu :

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

Le pipelines.yml le fichier doit être dans le répertoire spécifié par --path.settings.

Exécutons maintenant les deux pipelines customers.conf et tasks.conf:

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

Voir les résultats :

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 .

Étape 6 – Exécuter Logstash en tant que service

Connectez-vous en tant que racine utilisateur.

Nous répétons toutes les étapes ci-dessus, mais sous l'organisation par défaut du système de fichiers Logstash et ajoutons quelques données de test supplémentaires.

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,prénom,nom,ville,comté,état,code postal,web
cappy@exemple1.com,Cappy,Do,Toronto,King,WA,98101,www.exemple1.com
bluey@exemple2.net,Bluey,Whaly,Miami,King,WA,83211,www.exemple2.net
EOL

cat > /etc/logstash/conf.d/customers.conf <<'EOL'
input {
file {
path => "/var/lib/logstash/data/customers.csv"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}

filter {
csv {
separator => ","
skip_header => "true"
columns => ["email", "first_name", "last_name", "city", "county", "state", "zip", "web"]
}

mutate {
convert => { "zip" => "integer" }
}
}

output {
elasticsearch {
hosts => ["${ES_HOST}"]
ssl_enabled => true
ssl_certificate_authorities => "/var/lib/logstash/certs/http_ca.crt"
user => "elastic"
password => "${ES_PASS}"
index => "customers"
document_id => "%{email}"
}

stdout { codec => rubydebug }
}
EOL

cat > /var/lib/logstash/data/tasks.csv <<EOL
nom_tâche,description_tâche
faire ses devoirs, les enfants adorent faire leurs devoirs
faire la vaisselle, papa adore faire la vaisselle
EOL
cat > /etc/logstash/conf.d/tasks.conf <<'EOL'
input {
file {
path => "/var/lib/logstash/data/tasks.csv"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
csv {
separator => ","
skip_header => "true"
columns => ["nom_tâche", "description_tâche"]
}
}
output {
elasticsearch {
hosts => ["${ES_HOST}"]
ssl_enabled => true
ssl_certificate_authorities => "/var/lib/logstash/certs/http_ca.crt"
utilisateur => "elastic"
mot de passe => "${ES_PASS}"
index => "tâches"
}

stdout { codec => rubydebug }
}
EOL

cat > /etc/logstash/pipelines.yml <<'EOL'
- pipeline.id: clients
path.config: "/etc/logstash/conf.d/customers.conf"
- pipeline.id: tâches
path.config: "/etc/logstash/conf.d/tasks.conf"
EOL

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

À ce stade, nous devons définir le ES_HOST variable d'environnement :

systemctl edit logstash.service Alors fais ceci :

[Service]
Environnement = "ES_HOST=https://192.168.88.7:9200"

Cela devrait ressembler à ceci :

logstash.service

Et puis ajoutez ES_PASS au keystore :

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

Maintenant, commençons les choses

systemctl enable logstash systemctl daemon-reload systemctl start logstash

De temps en temps, vous pouvez vérifier le statut avec systemctl status logstash, ou regardez dans le /var/log/syslog.

Vous devriez pouvoir voir le contenu dans elasticsearch avec :

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 .