Capensis.fr
Support professionnel

Comment utiliser Grafana dans icingaweb2


#1

Comment utiliser Grafana dans Icingaweb2

Sommaire

  1. Introduction
  2. Objectif
    1. Version
    2. Support
    3. Périmètre
  3. Prérequis
  4. Installation
  5. Configuration
    1. Influxdb
    2. Icinga2
    3. icingaweb2-module-grafana
    4. Grafana
  6. Le résultat
  7. Utilisation
  8. Vérification
  9. Problèmes connus
  10. Roadmap

Introduction

Ca y est, vous avez démarré votre projet de supervision, et vous avez fait le choix du produit icinga2. Bravo !

Vous connaissez déjà le produit et vous avez également installer la sur-couche graphique icingaweb2 afin de profiter pleinement de votre supervision.
Mais vous ne voyez point de metrologie dans icingaweb2, bah oui coupler les alertes et des courbes, c’est quand même bien utile (voir indispensable),
car au moment où vous recevez une alerte sur un filesystem plein, vous aimeriez avoir (et voir) l’historique du remplissage sur les dernières 24h par exemple.
Afin d’allier le plaisir (des yeux) et l’agréable, et bénéficier de la métrologie dans icingaweb2, je vous propose de coupler :

  • icingaweb2 et icinga2 : pour la partie collecte de données
  • le module icingaweb2-module-grafana pour envoyer les informations vers la base influxdb
  • influxdb : les données de métrologie sont stockées dans cette base de données de séries temporelles
  • grafana : un (beau) moteur de reporting web pour visualiser et éditer des graphs.

Pour rappel, Grafana est un logiciel libre qui permet la visualisation et la mise en forme de données métriques,
Il permet de réaliser des tableaux de bord et des graphiques depuis plusieurs sources dont des bases de données de série temporelle comme :
Graphite, InfluxDB et OpenTSDB2
Dans notre cadre, nous ferons un focus sur la base de données InfluxDB.

Objectif

L’objectif de ce document est de savoir comment faire fonctionner l’ajout de graph Grafana dans la webUI d’icinga2 (icingaweb).

Version

Sujet Module Version Commentaires
Icinga2 core 2.7.2-1
Icingaweb2 core 2.4.2-1
Icingaweb2 icingaweb2-module-grafana 1.3.2 :warning: Pensez bien à prendre la dernière version !

Prérequis

Distribution Linux : Debian 9.
Diposer du backend Influxdb et du Frontend Grafana

Installation

Il vous faut donc installer :

  • icinga2 + icingaweb2 : l’installation d’icinga2 ne fait pas partie de ce tutoriel
  • le module icingaweb2-module-grafana (concerne icinga2) :
git clone https://github.com/Mikesch-mp/icingaweb2-module-grafana /usr/share/icingaweb2/modules/grafana
icingacli module enable grafana

Configuration

Influxdb

  • influxdb doit être démarré :smiley:
  • on doit avoir une database existante dans influxdb (par ex: icinga2)
influx
> CREATE DATABASE icinga2;
  • un user doit existé dans influxdb (et doit avoir les droits sur la database existante)
> CREATE USER icinga2 WITH PASSWORD 'password';
> GRANT ALL ON icinga2 TO icinga2

Icinga2

  • le check doit remonter des perfdata :smiley: => pour mieux voir ça, vous pouvez activer la feature perfdata (icinga2 feature enable perfdata)
  • la feature influxdb doit être activé dans icinga2 (icinga2 feature enable influxdb)
  • modifier le fichier /etc/icinga2/feature-enabled/influxdb.conf comme ceci :
library "perfdata"

object InfluxdbWriter "influxdb" {
  host = "votre ip de votre base influxdb"                <= VERIFIER ICI L'INFORMATION
  port = 8086                          <= VERIFIER ICI L'INFORMATION
  database = "icinga2"                 <= VERIFIER ICI L'INFORMATION
  username = "icinga2"                 <= VERIFIER ICI L'INFORMATION
  password = "password"                <= VERIFIER ICI L'INFORMATION
  enable_send_thresholds = true
  enable_send_metadata = true
  host_template = {
    measurement = "$host.check_command$"
    tags = {
      hostname = "$host.name$"
    }
  }
  service_template = {
    measurement = "$service.check_command$"
    tags = {
      hostname = "$host.name$"
      service = "$service.name$"
    }
  }
}

icingaweb2-module-grafana

  • Editer le fichier /etc/icingaweb2/modules/grafana/config.ini comme ceci (vous pouvez le faire aussi via la webui d’icinga2 > Config > Module > grafana > Configuration) :
version = "1"                         # Si Grafana 5, activez cette option avec 1 (true)
host = "ip-de-grafana:3000"           <= VERIFIER ICI L'INFORMATION
protocol = "http"
timerangeAll = "1w/w"
defaultdashboard = "icinga2-default"  <= VERIFIER ICI L'INFORMATION
defaultdashboarduid = "FxAre-ekz"     <= VERIFIER ICI L'INFORMATION
defaultdashboardpanelid = "2"
theme = "light"
datasource = "Influx"                 <= VERIFIER ICI L'INFORMATION
accessmode = "direct"
defaultorgid = "1"
directrefresh = "yes"
height = "280"
width = "640"
enableLink = "yes"
usepublic = "no"
  • [Optionnel] Le dashboard Grafana icinga2-default est appelé par défaut dans icingaweb2. Si vous voulez un autre dashboard, vous pouvez passer par le fichier /etc/icingaweb2/modules/grafana/graph.ini ou dans la webUI icingaweb2 > Config > Module > grafana > Graphs > Add New Grafana Graph :
    Cela vous permet de mapper un service icinga avec un dashboard et un panel spécifique répondant à votre besoin.

Grafana

  • Connectez-vous sur l’interface de Grafana : http://grafana-hostname:3000/
  • Créer un nouveau datasource qui doit pointer vers votre serveur InfluxDB et la database icinga2, le nom de ce datasource doit être repris dans le module icingaweb2-module-grafana
  • Vérifier la présence du dashboard icinga2-default. Si absent, vous pouvez l’importer au format JSON, voici en ligne le fichier brut.

Le résultat

Et là, magnifique, vous devez obtenir ceci :

Un graph apparait dans la section Performance Graph :

Utilisation

Un clic sur le graph (dans icingaweb2) vous emmène sur l’interface Grafana.

Voici un exemple si vous cliquez sur le graph hostalive dans icingaweb2 :

Vérification

Pour vérifier la présence de données dans influxdb (à adapter à votre env sur la dbname ou le nom de la commande) :

influxdb> curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=icinga2" --data-urlencode "q=SELECT \"value\" FROM \"command_check_snmp_load\" "