Sous Linux, Systemd est le candidat parfait pour gérer ses propres services. La bonne nouvelle pour nous c’est qu’il est extrêmement simple d’en créer un. Voyons comment faire au travers d’un exemple : créer un service pour le démon Apache Exporter (utilisé pour récupérer les métrics d’Apache).
Ecrire le service
Rien de plus simple, on commence par créer le fichier de configuration du service :
$ nano /etc/systemd/system/apache-exporter.service
Et on met dedans :
[Unit]
Description=Prometheus Apache Exporter
[Service]
User=nicolas
Group=nicolas
WorkingDirectory=/usr/bin
Type=simple
ExecStart=/usr/bin/apache_exporter
Restart=always
[Install]
WantedBy=multi-user.target
Et voilà. Rien de plus. En fait si, il faut recharger la config :
$ systemctl daemon-reload
Opérations usuelles
Désormais, les commandes usuelles relatives aux services sont disponibles. On peut par exemple vérifier le status :
$ systemctl status apache-exporter
apache-exporter.service - Prometheus Apache Exporter
Loaded: loaded (/etc/systemd/system/apache-exporter.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Activer le service :
$ systemctl start apache-exporter
Vérifier que le démon ciblé fonctionne correctement :
$ ss -lpt
LISTEN 0 128 *:9117 *:* users:(("apache_exporter",pid=904,fd=3))
Parfait, le démon écoute bien sur le port 9117. Autres actions usuelles :
# Arrêter le service
$ systemctl stop apache-exporter
# Redémarrer le service
$ systemctl restart apache-exporter
# Activer le service au démarrage
$ systemctl enable apache-exporter
Created symlink /etc/systemd/system/multi-user.target.wants/apache-exporter.service → /etc/systemd/system/apache-exporter.service.
# Désactiver le service au démarrage
$ systemctl disable apache-exporter
Cas plus complexe
Supposons que nous voulions passer des paramètres. Par exemple, l’exporter mysql pour Prometheus requiert les identifiants à la base de données. Ces identifiants sont passés dans la variable d’environnement DATA_SOURCE_NAME
. Au lieu de coder en dur ces paramètres créons un fichier de configuration :
$ nano /etc/default/mysql-exporter
Et on met dedans (adapter à vos besoin, ici il faut indiquer l’utilisateur qui a accès aux statistiques de MySQL) :
DATA_SOURCE_NAME=<user>:<password>#@(localhost:3306)/
Créer la configuration du service, on ajoute simplement la ligne EnvironmentFile
:
[Unit]
Description=Prometheus Mysql Exporter
[Service]
User=nicolas
Group=nicolas
WorkingDirectory=/usr/bin
Type=simple
ExecStart=/usr/bin/mysqld_exporter
Restart=always
EnvironmentFile=/etc/default/mysql-exporter
[Install]
WantedBy=multi-user.target
Reste plus qu’à activer le service comme précédemment.