TIG version Docker
2020-07-02T00:00:00Z | 6 minutes de lecture | Mise à jour le 2021-02-10T00:00:00Z
Une fois de plus, j’installe encore TIG (Telegraf, InfluxDB, Grafana) mais cette fois-ci en Docker derrière Traefik.
Introduction
Suite au renouveau de mon serveur,
j’ai décider d’y installer la stack TIG afin de remplacer
celui que j’utilise actuellement sur un truc
qui me sert de serveur à la maison.
Comme ce serveur utilise Traefik, je l’utilise en tant que
point d’entrée pour InfluxDB et Grafana.
Nous verrons donc ici comment mettre en place ces différents
services. J’ai fait cela d’une manière où l’on prépare tous
à l’avance et pour que j’aie le moins d’actions de configuration
manuelle à faire.
J’ai fait de cette manière car j’ai orchestré tout cela
avec Ansible. Mais ça, ça sera pour un autre article…
Préparation
InfluxDB
Configurations
Le conteneur va prendre trois fichiers en entrée :
- Fichier des variables d’environnements
- Configuration d’InfluxDB
- Fichier d’initialisation du service
Le fichier 1 (.influxdb.env
) est assez explicite :
INFLUXDB_ADMIN_USER=admin
INFLUXDB_ADMIN_PASSWORD=aev3netai3vahPee
Pour la configuration (2), je suis resté sur la configuration de base. Pour cela, j’ai généré le fichier avec la commande suivante :
docker run --rm influxdb influxd config > influxdb.conf
Le chemin de ce fichier dans le conteneur est /etc/influxdb/influxdb.conf
,
je l’ai donc stocké au même endroit sur ma machine physique.
Ce que j’appelle le fichier d’initialisation du service est un fichier
qui va contenir l’ensemble des commandes qui vont créer les différentes BDD
et utilisateurs avec les droits adéquats.
Voici donc mon fichier all.iql
:
# Databases
CREATE DATABASE "telegraf_db"
CREATE DATABASE "traefik_db"
# Manage system users
## Telegraf
CREATE USER telegrafeur WITH PASSWORD 'jooKaiphae7eisee'
GRANT WRITE ON telegraf_db TO telegrafeur
## Traefik
CREATE USER traefikeur WITH PASSWORD 'aip7nahd3ahcieL4'
GRANT WRITE ON traefik_db TO traefikeur
## Grafana
CREATE USER grafaneur WITH PASSWORD 'ohw4muJ9ma9Yeero'
GRANT READ ON telegraf_db TO grafaneur
GRANT READ ON traefik_db TO grafaneur
Pour les exemples j’ai crée les passphrases avec un pwgen -B 16 1
.
On voit ici que j’ai créé une BDD pour les données de Telegraf ainsi qu’un utilisateur
avec les droits d’écriture sur cette base. Je fais de même pour ceux de Traefik.
En plus, je crée un utilisateur spécifique pour Grafana qui peut seulement lire ces données.
Composition
|
|
Les références aux fichiers de la partie précédente sont mis en surbrillance.
La ligne 12 correspond a un dossier ou le fichier all.iql
se trouve.
Telegraf
Configurations
Le fichier de variable d’environnement (.telegraf.env
) contient les éléments
qui vont permettre au conteneur de connaitre les informations de la machine physique (CPU).
HOST_PROC=/rootfs/proc
HOST_SYS=/rootfs/sys
Mon fichier de configuration est un bundle de mes anciens articles :
|
|
Étant donné que telegrafeur
ne peut pas crée la base,
on verrouille la possibilité de création de la base par Telegraf avec l’option
skip_database_creation
mise à true
.
Composition
|
|
Je monte aussi le socket Docker pour avoir les métriques des conteneurs.
Grafana
Configurations
Fichier .grafana.env
:
GF_SECURITY_ADMIN_PASSWORD=ahkaob4miemuedoh3weef7izaechaiko
Composition
|
|
Il est nécessaire de spécifier l’UID:GID
de l’utilisateur (l’exemple d’ici est
pour l’utilisateur root) comme je l’ai fait à la ligne 5 lorsque l’on mappe
un dossier non local pour les données. Sinon, on peut utiliser un volume ou un
dossier local. Plus d’information
ici.
Lancement
Si vous concaténez les trois configurations Docker, vous obtenez un Docker Compose complet.
Comme d’habitude, on lance la stack avec docker-compose up -d
.
Pour une raison inconnue, le fichier all.iql
ne s’exécute pas au lancement.
Cela est peut-être dû au fait que j’ai fait beaucoup d’erreurs avant d’obtenir
des fichiers fonctionnels.
Pour y remédier, j’ai forcé l’exécution des éléments du dossier :
docker-compose exec influxdb /usr/bin/influx \
-import -path /docker-entrypoint-initdb.d/influx_init.iql/all.iql \
-username admin -password "aev3netai3vahPee"
Cette commande vous seras utile si vous ajoutez ou modifiez des droits via des fichiers dans le dossier.
Une fois la stack fonctionnel, on se connecte sur Grafana
(https://supervision.scrample.xyz dans l’exemple et on ajoute les BDD avec
le compte grafaneur
qui a seulement un accès en lecture sur les bases.
Une fois de plus, j’ai récupéré les dashboards 4220 et 10585 que j’ai ajouté sur Grafana.
Maintenant que tous fonctionnent, on va alors s’assurer que cela est bien sécurisé.
Vérification
Mon serveur étant dans le nuage (donc exposé), je dois m’assurer que les accès sont bien sécurisés.
Pour l’HTTPS, Traefik fait bien son travail. Pour InfluxDB, on vérifie cela en faisant différents tests avec des commandes cURL depuis un autre machine.
Voici donc des exemples qui devraient fonctionner :
curl -G "https://metriques.scrample.xyz/query" -u admin:aev3netai3vahPee --data-urlencode "q=SHOW DATABASES"
curl -G "https://metriques.scrample.xyz/query?db=telegraf_db&pretty=true" -u telegrafeur:jooKaiphae7eisee --data-urlencode "q=SHOW SERIES"
J’ai aussi fait des tests qui ne devraient pas fonctionner pour m’assurer du bon verrouillage des accès à InfluxDB.
Bonus : Métriques Traefik
Pour avoir les données de Traefik, il faut ajouté le contenue suivant dans le fichier de configuration statique :
metrics:
influxDB:
address: influxdb:8086
protocol: http
database: "traefik_db"
username: "traefikeur"
password: "aip7nahd3ahcieL4"
Conclusion
Une fois encore, j’ai refait une stack TIG mais en Docker cette fois-ci ! Petit à petit, je vais renvoyer toutes mes données sur cette stack en lieu et place de celui de mon serveur à 32 GB de stockage qui est d’ailleurs bien rempli :
PROBLEM : DISK WARNING - free space: / 5430 MB (19.93% inode=77%)
Nagios
Il me manque plus qu’à créer les BDD et comptes pour Home Assistant et Nagflux et de les configurer pour envoyer leurs données dessus !
Si vous voulez inclure les données de votre PC Windows, j’ai ajouté des infos ici.
Bon monitoring !