Utilisation de variable d'environnement pour les paramètres de logstash

Bonjour,
je souhaite pouvoir déployer logstash pour une communauté d'utilisateurs.
Aujourd'hui, la commande logstash nécessite de positionner correctement les variables data.path et path.log sur la ligne de commande, car les valeurs par défaut pointent dans le répertoire de l'installation du produit.
Serait-il possible de positionner cela via des variables d'environnement ?
Merci.

Bonjour,
C'est tout à fait possible.
Voila ce que je fait pour mon instance sous Windows:

SET LS_SETTINGS_DIR=%APP_HOME%\bin-conf\%PROCESS%-%LS_VERSION%
SET LS_JVM_OPTIONS_CONFIG=%LS_SETTINGS_DIR%\jvm.options
SET LS_PATH_DATA=%APP_HOME%\data\%PROCESS%-%LS_VERSION%\
SET LS_PATH_CONFIG=%APP_HOME%\conf\%PROCESS%
SET LS_PATH_LOGS=%APP_HOME%\logs\%PROCESS%-%LS_VERSION%\

Puis dans le fichier logstash.yml:

path.data: ${LS_PATH_DATA}
path.config: ${LS_PATH_CONFIG}/*.conf
path.logs: ${LS_PATH_LOGS}

Et je lance Logstash sans paramètres, il récupère son fichier de configuration à partir de LS_SETTINGS_DIR.

La doc : https://www.elastic.co/guide/en/logstash/current/running-logstash-command-line.html

--path.settings SETTINGS_DIR
Set the directory containing the logstash.yml settings file as well as the log4j logging configuration. This can also be set through the LS_SETTINGS_DIR environment variable. The default is the config directory under Logstash home.

J'ai essayé de positionner les variables LS_PATH_DATA et LS_PATH_LOGS pour le logstash que je fais tourner en environnement Linux, mais il n'a pas l'air de les utiliser, j'ai la même erreur :

An unexpected error occurred! {:error=>#<ArgumentError ... " must be a writable directory. It is not writable...

La directory du message est celle où est installé le produit Logstash.

C'est un problème d'écriture dans un des répertoires (data ou logs ou les deux)
Personnellement je positionnerai ces variables en dehors du répertoire d'installation.

Logs --> /var/logs/logstash/
Data --> /var/data/logstash/

En m'assurant que le user faisant tourner le process logstash a bien les droits d'écriture dans ces répertoires

J'ai positionné les variables pour pointer dans le /tmp, donc les droits d'écritures sont corrects ...
Le problème c'est que le message est le même qu'avant, il indique que c'est le répertoire où est installé le logiciel qui n'est pas ouvert à l'écriture (ce qui est normal). Il ne semble pas utiliser les variables d'environnement !

Il faudrait que tu donnes un peu plus d'information sur la façon de lancer logstash.
Service ou lancement de process via shell ?

je le lance en mode shell, avec un fichier de configuration en paramètre

Pourrais-tu partager ?

  • Le shell de définition des variables
  • Le shell contenant la ligne de commande de lancement de logstash

export LS_PATH_DATA=/tmp/jcp
export LS_PATH_LOGS=/tmp/jcp

logstash -f <fichier_de_conf_logstash>

Je précise que j'arrive à faire fonctionner logstash avec ce fichier de configuration lorsque j'utilise une version de logstash que j'ai installé dans mes propres répertoires (donc a priori, le fichier de conf ne pose pas de problème)

J'ai beau chercher dans la doc, je ne vois pas trop de références à ces variables ...

Dans ton cas, la variable LS_SETTINGS_DIR n'est pas positionnée, Logstash va lire le fichier de conf logstash.yml qui est dans le sous-répertoire config du répertoire d'install.
Si tu ne l'as pas modifié, il utilise toujours les répertoires par défaut.

Il faut que tu ajoutes les 2 lignes suivantes dans le fichier logstash.yml:

path.data: ${LS_PATH_DATA}
path.logs: ${LS_PATH_LOGS}

Les chemins seront remplacés par la valeur des variables d'environnement

Si tu n'as pas les droits de modifier le fichier logstash.yml:

  1. Il te faut positionner la variable LS_SETTINGS_DIR pour la faire pointer vers un répertoire dans lequel tu as les droits et tu y copies les fichiers contenus dans config et tu les modifies.
  2. ou tu lances logstash avec le paramètre --path.settings suivi du répertoire contenant logstash.yml

En espérant avoir été clair

1 Like

c'est clair. Je n'ai pas encore testé cette solution, car je me retrouve toujours confronté au même problème !!
Le produit Logstash est déployé chez nous automatiquement (avec l'outil spack). Donc je n'ai pas vraiment la main pour pouvoir modifier le fichier de configuration afin de déclarer les deux variables d'environnement.
Je souhaite que les utilisateurs potentiel de Logstash n'ai pas à faire la copie a priori du fichier de conf, le modifier pour pouvoir utiliser les variables (ce serait aussi "compliqué" que de leur demander de passer les paramètres sur la ligne de commande.
Je vais regarder s'il serait possible de modifier le "paquet" Logstash à la fin du déploiement ...
Merci pour les explications, c'est dommage que ces variables ne soient pas déclarées par défaut.

Bonjour,
Vous pouvez transmettre des variables d'environnements au démon logstash via les fichiers type /etc/sysconfig/logstash ou /etc/default/logstash, selon votre distribution et vos paramètres systèmes.

Bonjour,
merci pour ces indications, mais les fichiers que vous indiquez sont "hors de portée" (à cause des droits d’accès) pour un utilisateur basique.
Le but de ma question était justement de pouvoir changer le contenu de ces variables par un utilisateur basique de Logstash.
Pour le moment (peut être que cela évoluera dans les versions futures de Logstash :wink: ) les variables ne sont pas déclarées dans les fichiers de paramétrage par défaut de Logstash, donc seul un administrateur peut effectuer la modification lors de l'installation du logiciel.
Nous utilisons un logiciel de déploiement qui télécharge la version "packagée" de Logstash, et se charge du déploiement sans aucune intervention de notre part. Nous souhaitons rester dans cette configuration sans avoir besoin que nos administrateurs n'aient à modifier le contenu des paquets avant le déploiement.
Merci.

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.