Influxdb : Introduction (OpenBSD)

Article publié, le et modifié le
6 minutes de lecture

Cet article contient 1222 mots.
Source brute de l'article :

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, influxdb est disponible en tant que paquet.

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 :

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

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

Info

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.

Astuce

⇒ 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