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