Introduction
Get’in Start: #!/bin/introduction
influxdb est une base de données de séries temporelles. Elle s’utilise en complément de logiciels tiers, tels des services collectant des métriques systèmes et applications, à intervalles réguliers (telegraf, collectd) ainsi que des logiciels générant des graphes personnalisés par le biais de requêtes sur la base de données (Grafana, …)
Installation
Sous OpenBSD ≤ 7.3, influxdb est disponible en tant que paquet, dans sa version 1.x.
Un groupe _influx
et un utilisateur _influx
sont créés.
Vérification de démarrage
⇒ Après avoir démarré le service influxdb
, il est possible de vérifier
le bon fonctionnement de la base de données.
Deux manières :
- En requêtant directement la base de données :
$ influx
Connected to http://localhost:8086 version unknown
InfluxDB shell version: unknown
> show databases
name: databases
name
----
_internal
- En utilisant l’outil curl pour tester une réponse locale par requête HTTP :
$ curl -G http://localhost:8086/query --data-urlencode "q=SHOW DATABASES"
{"results":[{"statement_id":0,"series":[{"name":"databases","columns":["name"],"values":[["_internal"]]}]}]}
Dans les deux cas, si vous avez le même résultat, c’est tout bon !
Configuration
Le fichier de configuration : /etc/influxdb/influxdb.conf
Utilisateur admin
Avant de toucher au fichier de configuration, créons un premier utilisateur administrateur :
$ doas influx
Connected to http://localhost:8086 version unknown
InfluxDB shell version: unknown
> CREATE USER admin WITH PASSWORD 'password' WITH ALL PRIVILEGES
> SHOW USERS
user admin
---- -----
admin true
> QUIT
- Ici, le nom de l’utilisateur est
admin
avec des droits d’administrateur. password
est pour l’exemple…
La prochaine connexion à la base de données nécessitera d’utiliser le compte administrateur.
Là, encore deux manières de faire :
- connexion puis utilisation de la commande
auth
:
$ influx
Connected to http://localhost:8086 version unknown
InfluxDB shell version: unknown
> auth
username: admin
password:
> *n instructions*
> QUIT
- connexion en précisant directement le nom de l’utilisateur en argument :
$ influx -username admin -password ''
password:
Connected to http://localhost:8086 version unknown
InfluxDB shell version: unknown
> quit
(en réalité, il existe d’autres manières de faire…)
Si c’est bon dans les deux cas, c’est tout bon !
À partir de maintenant, la base de données n’est pas ouverte à tout le monde.
Authentification HTTP
Pour activer l’authentification HTTP, il faut modifier le fichier de configuration.
Aller à la section [http]
puis décommenter à minima les variables suivantes :
enabled = true
auth-enabled = true
[http]
# Determines whether HTTP endpoint is enabled.
enabled = true
# Determines whether the Flux query endpoint is enabled.
# flux-enabled = false
# Determines whether the Flux query logging is enabled.
# flux-log-enabled = false
# The bind address used by the HTTP service.
bind-address = ":8086"
# Determines whether user authentication is enabled over HTTP/HTTPS.
auth-enabled = true
(…)
Puis redémarrer le service…
Testons à nouveau une requête HTTP :
$ curl -G http://localhost:8086/query --data-urlencode "q=SHOW DATABASES"
{"error":"unable to parse authentication credentials"}
Puisqu’il demande une authentification, utilisons curl en précisant l’utilisateur :
$ curl -G http://localhost:8086/query -u admin -p '' --data-urlencode "q=SHOW DATABASES"
Enter host password for user 'admin':
{"results":[{"statement_id":0,"series":[{"name":"databases","columns":["name"],"values":[["_internal"]]}]}]}
Après avoir entré le bon mot-de-passe, la requête pour voir les bases de données aboutit bien.
Si c’est le cas, nous avons réussi le principal : installer influxdb, faire une configuration de base fonctionnelle. Voilà.
HTTPS
Maintenant, allons plus loin, pour utiliser le protocole HTTPS qui permettra de sécuriser la connexion avec les autres services, d’autant si ceux-ci sont à distance.
Création des certificats
Dans ce contexte tutoriel, nous utilisons des certificats auto-signés. En conséquence, ils ne sont pas certifiés par une Autorité de Certification.
Pas besoin de passer par cette étape, si vous utiliser une AC ; il suffit
de renseigner le chemin absolu vers les certificats générés par l’AC.
Dans ce cas, allez directement à la partie de la configuration correspondante
à la section [http]
.
Ici, nous utilisons l’outil certtool
:
$ apropos certtool
certtool(1) - GnuTLS certificate tool
Si le paquet gnutls n’est pas installé, faites-le.
Puis avec des droits administrateurs, allez dans /etc/ssl
, créer un
répertoire influxdb
dans lequel faire les opérations suivantes :
# mkdir -p /etc/ssl/influxdb
# cd /etc/ssl/influxdb
⇒ Création de la clé privée
# certtool -p --hash SHA3-256 --sec-param ULTRA --outfile $(hostname).priv.k.pem
⇒ puis création de la clé publique :
# certtool -s --load-privkey $(hostname).priv.k.pem --outfile $(hostname).cert.pem
qui vous posera plein de questions concernant l’identification, raison sociale et le but de ce certificat.
⇒ modifions les droits utilisateurs :
# chown _influx:_influx *.pem
Ceci étant fait, retournons modifier le fichier de configuration, à nouveau
à la section [http]
, mais cette fois-ci pour modifier les valeurs suivantes :
https-enabled = true
https-certificate = "/etc/ssl/influxdb/votre-nom-hote.cert.pem"
https-private-key = "/etc/ssl/influxdb/votre-nom-hote.priv.k.pem"
(…)
# Determines whether HTTPS is enabled.
https-enabled = true
# The SSL certificate to use when HTTPS is enabled.
https-certificate = "/etc/ssl/influxdb/votre-nom-hote.cert.pem"
# Use a separate private key location.
https-private-key = "/etc/ssl/influxdb/votre-nom-hote.priv.k.pem"
(…)
⇒ Relancer le service !
Testons la connexion :
$ influx -ssl -unsafeSsl -username admin -password ''
password:
Connected to https://localhost:8086 version unknown
InfluxDB shell version: unknown
> SHOW DATABASES
name: databases
name
----
_internal
> SHOW USERS
user admin
---- -----
admin true
> QUIT
$ curl -G https://localhost:8086/query -k -u admin -p '' --data-urlencode "q=SHOW DATABASES"
Enter host password for user 'admin':
{"results":[{"statement_id":0,"series":[{"name":"databases","columns":["name"],"values":[["_internal"]]}]}]}
Remarquez l’utilisation de l’option -k
, sans elle, étant donné ce
contexte d’utilisation de certificats auto-signés, curl refuserait de se
connecter avec le message d’erreur suivant :
curl: (60) SSL certificate problem: unable to get local issuer certificate
Journalisation HTTP
Par défaut, la journalisation des traces HTTP(S) se fait dans le moteur interne de journalisation d’influxdb et sera visible dans le log ‘daemon’.
Il est possible de changer ce comportement pour avoir le suivi HTTP(S)
au sein d’un fichier dédié. Toujours dans la section [http]
, modifiez
la variable access-log-path
.
Avant de redémarrer le service, créer impérativement le répertoire dans lequel influxdb écrira le fichier log et donnez lui les droits systèmes liés, tel que :
# mkdir -p /var/log/influxdb/
# chown _influx:_influx /var/log/influxdb/
Puis pour la configuration :
access-log-path = "/var/log/influxdb/access.log"
Pour finir, pensez à modifier le fichier /etc/newsyslog.conf
pour ajouter
une ligne, telle que :
/var/log/influxdb/access.log _influx:_influx 644 7 * * Z
EOD
End of Documentation
Voilà. Maintenant, influxdb est prêt pour une utilisation interne et n’attend plus qu’à être configurer pour discuter avec tout plein d’autres services…
Dépannage
curl
curl se plaint… et me casse les pieds, par la même occasion. Voici quelques pistes face à certaines erreurs :
curl: (35) error:1400442E:SSL routines:CONNECT_CR_SRVR_HELLO:tlsv1 alert protocol version
Êtes-vous sûr d’avoir activer l’option https-enabled
dans la section [http]
?
Vérifiez !
curl: (60) SSL certificate problem: unable to get local issuer certificate
Comme le contexte d’utilisation décrit dans ce guide de démarrage, vous avez généré vos propres certificats sans utiliser d’Autorité de Certification.
Ajoutez l’option -k
!
influxdb
unable to open access log, falling back to stderr
Le message d’erreur dans le log daemon est du type :
lvl=error msg="unable to open access log, falling back to stderr" log_id=0eMCqvRl000 service=httpd error="open /var/log/influxdb/: is a directory" path=/var/log/influxdb/
Le chemin spécifié dans la variable access-log-path
est soit inexistant,
soit influxdb n’a pas les droits systèmes pour y accéder.
Vérifiez !
Documentation
- https://docs.influxdata.com/influxdb/v1.8/administration/config/
- https://docs.influxdata.com/influxdb/v1.8/administration/authentication_and_authorization/