InfluxData

Généralités

Ce service est en fait un ensemble de services qui cohabitent ensemble. Ceux-ci permettent d'avoir un apercu rapide de l'activité du parc par le biais de graphes et d'alertes. Celui-ci a pour objectif de remplacer Munin et devrait à terme cohabiter avec Cacti et Icinga.

Ces services sont découpés en trois :

  • Agrégation d'informations avec Telegraf qui permet de remonter les métriques des serveurs.
  • Stockage des informations avec InfluxDB
  • Affichage des informations avec Grafana

Ceux-ci sont modulables et peuvent s'interfacer avec d'autres services existants comme Munin ou ELK. Ils peuvent aussi récupérer les informations SNMP avec des plugins adéquates. À voir si il y a besoin de plus à l'usage

Le service d'agrégation (push) s'installe sur toutes les machines du ResEl, tandis que les service de stockage et de visuation sont installés sur DGSI.

Motivations

InfluxData a été initialement installé pour combler les problèmes de Munin et Cacti qui sont des outils anciens et qui sont à la fois complexe à manier mais aussi donne des résultats pour analyser les problèmes peu précits.

Mise en place

Le service Telegraf est à installer sur toutes les machines du ResEl (push) tandis que InfluxDB et Grafana sont installés uniquement sur DGSI

Installation

Telegraf

Installation de Telegraf avec Ansible (recommandé)

Telegraf est un service en push, c'est à dire qu'il faut installer un client sur toutes les machines monitorées qui vont envoyer les données à la base de données centrale (InfluxDB sur DGSI).

Pour la plupart des services la configuration ResEl par défaut est suffisante. Pour la lancer il faut ajouter le serveur au groupe servers (dans le LDAP) puis lancer le playbook telegraf.yml sur loustic.

Installation de Telegraf à la main (au cas où)

en résumé: suivre la doc Telegraf

Ajouter la source InfluxData

curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
source /etc/os-release
test $VERSION_ID = "7" && echo "deb https://repos.influxdata.com/debian wheezy stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
test $VERSION_ID = "8" && echo "deb https://repos.influxdata.com/debian jessie stable" | sudo tee /etc/apt/sources.list.d/influxdb.list

Installer et démarrer le service

sudo apt-get update && sudo apt-get install telegraf
sudo systemctl start telegraf

Configuration par défaut

Pour la plupart des services la configuration par défaut de Telegraf devrait suffire. Si vous n'avez pas utilisé Ansible pour créer la configuration vous devez rentrer les crédits de InfluxDB.

Éditez le fichier /etc/telegraf/telegraf.conf en changeant les lignes suivantes :

[[outputs.influxdb]]
  urls = [ "http://dgsi.adm.resel.fr:8086" ] # required
  database = "telegraf" # required
  precision = "s"
  retention_policy = "autogen"
  timeout = "5s"
  username = "telegraf"
  password = "<passwd>"

TODO :

  • (ouvrir ticket) auto personnalisation

Personnalisation de la configuration

Si vous désirez ajouter la configuration de plugins qui ne sont pas dans la configuration par défaut et que vous désirez que celle-ci ne soit pas effacée par Ansible vous devez l'ajouter dans le dossier /etc/telegraf/telegraf.d/

Par exemple si vous voulez une configuration nginx en plus, créez le fichier /etc/telegraf/telegraf.d/nginx.conf :

[[inputs.nginx]]
  urls = ["http://lancache-steam/status", "http://lancache-blizzard/status", "http://lancache-riot/status", "http://lancache-sony/status", "http://lancache-microsoft/status"]

Vous pouvez retrouver documentation de la configuration des plugins sur le repo de Telegraf

Plugin shell (exécution de scripts arbitraires)

Il est possible de créer des plugins pour Telegraf à partir de scripts arbitraires afin de récupérer des métriques arbitraires.

Voici l'exemple d'un script sur pégase qui va récupérer les temps de réponse DNS pour les envoyer dans la base de données Telegraf.

Créer le fichier à executer, celui-ci doit retourner sur son std un format compatible (comme le JSON) : pegase:/srv/telegraf/dns-bench.py (ceci est un mockup du vrai script) :

import json

perfs = {"google.com": 0,1}
print(json.dumps(perfs))

Il faut ensuite configurer Telegraf pour utiliser le script créé, pour cela nous allons personnaliser la configration en créant un fichier /etc/telegraf/telegraf.d/exec.conf :

[[inputs.exec]]
  commands = ["/srv/telegraf/dns-bench.py"]
  data_format = "json"

Pour plus d'informations, veuillez suivre la doc officielle

TODO:

  • (ouvrir ticket) migrer ou wrapper les scripts de Echelon

InfluxDB

Configuration statique

La base de données InfluxDB par défaut est installée sur DGSI en suivant la documentation officielle

Les seuls changements à la configuration par défaut sont : /etc/influxdb/influxdb.conf :

reporting-disabled = true  # La machine n'a pas internet

[http]
  auth-enabled = true  # Authentification obligatoire

Attention : ne pas lancer influxdb en root car il va ensuite créer des fichiers en root ce qui l’empêchera de fonctionner en service (avec l'utilisateur par défaut Influxdb)

Base de données et authentification

En suivant la documentation

J'ai ensuite créé un utilisateur admin renas:

$ influx
Connected to http://localhost:8086 version 1.2.0
InfluxDB shell version: 1.2.0
> use _internal
> CREATE USER renas WITH PASSWORD '<password>' WITH ALL PRIVILEGES

Création d'un utilisateur et d'une base de données pour telegraf

> CREATE DATABASE telegraf
> use telegraf
> CREATE USER telgraf WITH PASSWORD '<password>'
> GRANT ALL ON "telegraf" TO "telegraf"

TODO:

  • (ouvrir ticket) Sécurisation TLS
  • (ouvrir ticket) Voir les autres options
  • (ouvrir ticket) Amélioration de la conf pour la monté en charge

Grafana

Grafana est le service permettant l'affichage de nombreuses métriques venant de plusieurs bases de données et en particulier InfluxDB. Il est installé aussi sur DGSI au ResEl et disponible à l'adresse : https://graph.resel.fr/

Information d'installation

L'installation est totalement classique comme décrite dans la documentation

Ajout des sources à /etc/apt/sources.list.d/repos_influxdata_com_debian.list et non /etc/apt/sources.list :

deb https://repos.influxdata.com/debian jessie stable

N'oubliez pas de rajouter l'entrée dans le reverse proxy : /etc/apt/apt.conf.d/01reselproxy-graphana :

Acquire::http::proxy::packagecloud.io "http://pegase.adm.resel.fr:3128";
Acquire::https::proxy::packagecloud.io "http://pegase.adm.resel.fr:3128";

Puis la suite selon la doc :

curl https://packagecloud.io/gpg.key | sudo apt-key add -
sudo apt-get update
sudo apt-get install grafana

Modification de la configuration dans le fichier /etc/grafana/grafana.ini :

[users]
allow_sign_up = false
login_hint = Identifiant Resel admin
default_theme = light

[auth]
[auth.anonymous]
# enable anonymous access
enabled = true

[auth.anonymous]
org_name = Association ResEl
org_role = Viewer

[auth.ldap]
enabled = true
config_file = /etc/grafana/ldap.toml
allow_sign_up = true

Puis l'auth LDAP en modifiant le fichier /etc/grafana/ldap.toml :

[[servers]]
host = "ldap.resel.fr ldap.rennes.resel.fr"
port = 389
use_ssl = false
start_tls = false
ssl_skip_verify = false

bind_dn = "cn=admin,dc=maisel,dc=enst-bretagne,dc=fr"
bind_password = '<pass>'

search_filter = "(uid=%s)"
search_base_dns = ["ou=admins,dc=resel,dc=enst-bretagne,dc=fr"]

[servers.attributes]
name = "givenName"
surname = "sn"
username = "uid"
member_of = "memberOf"
email =  "email"

# Map ldap groups to grafana org roles
[[servers.group_mappings]]
group_dn = "cn=graphana,ou=rights,dc=resel,dc=enst-bretagne,dc=fr"
org_role = "Admin"

[[servers.group_mappings]]
group_dn = "cn=graphana,ou=rights,dc=resel,dc=enst-bretagne,dc=fr"
org_role = "Editor"
 
[[servers.group_mappings]]
# If you want to match all (or no ldap groups) then you can use wildcar    d
group_dn = "cn=graphana,ou=rights,dc=resel,dc=enst-bretagne,dc=fr"
org_role = "Viewer"

Démarrage du service

systemctl daemon-reload
systemctl start grafana-server
systemctl enable grafana-server
systemctl status grafana-server

Vérifiez que tout fonctionne en vous connectant à http://dgsi.adm.resel.fr:3000

Puis configurez un reverse proxy (sur situs actuellement)

Notes sur les performances

Telegraf est configuré par défaut pour envoyer les données toutes les 5 secondes. Sur certaines machines qui ont besoin de hautes performances, il est possible que cela ait un impact trop grand sur les performances de celle-ci. Dans ce cas il ne faut pas hésiter à diminuer cette valeur de pushing.

Liens utiles

Modifications

  • 2017-04-10 : Ajout de nombreuse informations sur la page et actualisation avec le gabarit recommandé