Des graphiques sur Shinken via Graphite

Un graphique est un moyen pratique de constater l’évolution des métriques d’un serveur. Quand on pense graph dans le monde linux, on pense généralement à Munin. Solution très performante que j’utilise dans certains cas. Cependant ce dernier possède son propre agent qui va interroger la machine cible de façon à obtenir les données interprétées sous forme de graph ensuite. Quand on possède déja un serveur de supervision comme Shinken cela revient à faire deux fois le boulot. Pour palier à ça nous allons mettre en place un serveur Graphite.

Le programme est composé de trois parties.

  • Whisper, un moteur de base de données
  • Carbon, serveur d’écoute qui s’occupe d’insérer les données en base
  • Graphite, interface web en python Django

Installation de Graphite

Installation des dépendances

Il faut aussi un serveur web, avec la librairie permettant de charger un programme Django.

Installation de graphite

Mise en place de la configuration par défaut

Mise en place du vHost apache

Attention, si vous êtes sur une distribution plus récente avec une version de Apache supérieur à 2.4 il faut modifier le vHost comme suit

Juste pour info je vous laisse ici mon vHost complet

On active le vHost

Creation de la base de données

On lance le serveur Carbon

Envoyer une donnée de test

A ce stade on a Graphite fonctionnel, si vous vous rendez sur l’adresse de votre serveur en HTTP vous devez voir apparaître votre donnée de test sur l’interface web.

graphite-webui

Jonction à Shinken

On installe le module Graphite depuis les dépôts Shinken

On ajoute le module graphite-ui à la WebUI sous /etc/shinken/modules/webui.cfg

On ajoute le module graphite au broker sous /etc/shinken/brokers/broker-master.cfg

On configure le module graphite sous /etc/shinken/modules/graphite.cfg

On configure l’accès à la webui graphite sous /etc/shinken/modules/ui-graphite.cfg

Attention à ne pas mettre de slash à la fin de l’URL sans quoi les liens ne fonctionneraient pas.

Et enfin on relance Shinken pour prendre en compte tout ça.

Vous devez à présent voir vos graphs dans l’onglet du même nom sur l’interface web de Shinken

shinken_graph_graphiteSur l’interface web de Graphite, vos hôtes devraient également apparaître.

graphite_webui

Il est possible que l’onglet « 4 hours » ne fonctionne pas. C’est parce que la timezone n’est pas la même sur les deux composants.

Pour régler la timezone shinken il faut se rendre dans le fichier /etc/shinken/shinken.cfg

Et pour graphite il faut activer le fichier de configuration en copiant l’exemple

Et dé-commenter la ligne corcorrespondante à la valeur de timezone

 

 

 

38 thoughts on “Des graphiques sur Shinken via Graphite”

  1. kayk dit :

    Bonjour,

    Bien le tuto à part que pour ma part je n’ai pas de retour sur mon interface shinken.

    Ci vous avez une idée

    Merci d’avance

    Ma conf :

    ubuntu 14.04 LTS
    Shinken 2.2

    Cordialement

    1. N.i.c.O dit :

      Bonjour, Shinken redémarre normalement? rien dans les logs?

  2. tocks dit :

    Bonjour,
    Merci pour ce how to très bien expliqué.

    J’ai fais tous pareil, il n’y a pas d’erreur dans le terminal.

    Pourtant : IPSERVER:2003 ne m’affiche rien

    Pas de graphe dans shinken non plus…

    1. tocks dit :

      De plus :
      http://IPDEMONSERVEUR me retourne

      Service Temporarily Unavailable

      The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.
      Apache/2.2.22 (Debian) Server at 192.168.0.28 Port 80

      et les logs:

      [1425908379] INFO: [Shinken] Starting HTTP daemon
      [1425908379] INFO: [Shinken] Modules directory: /var/lib/shinken/modules
      [1425908379] INFO: [Shinken] Using a 8 http pool size
      [1425908379] INFO: [Shinken] Modules directory: /var/lib/shinken/modules
      [1425908379] INFO: [Shinken] Waiting for initial configuration
      [1425908384] INFO: [broker-master] We have our schedulers: {0: {‘broks’: {}, ‘data_timeout’: 120, ‘name’: u’scheduler-master’, ‘last_connection’: 0, ‘hard_ssl_name_check’: False, ‘uri’: u’http://localhost:7768/’, ‘instance_id’: 0, ‘running_id’: 0, ‘timeout’: 3, ‘address’: u’localhost’, ‘active’: True, ‘use_ssl’: False, ‘push_flavor’: 548911, ‘port’: 7768}}
      [1425908384] INFO: [broker-master] We have our arbiters: {0: {‘broks’: {}, ‘last_connection’: 0, ‘name’: u’arbiter-master’, ‘hard_ssl_name_check’: False, ‘uri’: u’http://localhost:7770/’, ‘instance_id’: 0, ‘running_id’: 0, ‘address’: u’localhost’, ‘use_ssl’: False, ‘port’: 7770}}
      [1425908384] INFO: [broker-master] We have our pollers: {0: {‘broks’: {}, ‘instance_id’: 0, ‘last_connection’: 0, ‘name’: u’poller-master’, ‘poller_tags’: [‘None’], ‘hard_ssl_name_check’: False, ‘uri’: u’http://localhost:7771/’, ‘passive’: False, ‘secret’:  », ‘reactionner_tags’: [], ‘running_id’: 0, ‘address’: u’localhost’, ‘active’: True, ‘use_ssl’: False, ‘api_key’:  », ‘port’: 7771}}
      [1425908384] INFO: [broker-master] We have our reactionners: {0: {‘broks’: {}, ‘instance_id’: 0, ‘last_connection’: 0, ‘name’: u’reactionner-master’, ‘poller_tags’: [], ‘hard_ssl_name_check’: False, ‘uri’: u’http://localhost:7769/’, ‘passive’: False, ‘secret’:  », ‘reactionner_tags’: [‘None’], ‘running_id’: 0, ‘address’: u’localhost’, ‘active’: True, ‘use_ssl’: False, ‘api_key’:  », ‘port’: 7769}}
      [1425908384] INFO: [broker-master] We received modules [, ]
      [1425908384] INFO: [broker-master] [Graphite broker] Get a graphite data module for plugin graphite
      [1425908384] INFO: [broker-master] Trying to init module: graphite
      [1425908384] INFO: [broker-master] [Graphite broker] I init the graphite server connection to localhost:2003
      [1425908384] INFO: [broker-master] [Graphite broker] Connection successful to localhost:2003
      [1425908384] INFO: [broker-master] I correctly loaded the modules: [webui,graphite]
      [1425908384] INFO: [broker-master] Trying to init module: webui
      [1425908384] INFO: [broker-master] Starting external module webui
      [1425908384] INFO: [broker-master] Starting external process for instance webui
      [1425908384] INFO: [broker-master] webui is now started ; pid=16742
      [1425908384] INFO: [broker-master] Setting our timezone to Europe/Paris
      [1425908384] INFO: [broker-master] Connection OK to the scheduler scheduler-master
      [1425908384] INFO: [broker-master] Connection OK to the poller poller-master
      [1425908384] INFO: [broker-master] Connection OK to the reactionner reactionner-master
      [1425908384] INFO: [broker-master] Connection OK to the receiver receiver-master
      [1425908384] INFO: [broker-master] [webui[16742]]: Now running..
      [1425908384] INFO: [broker-master] Modules directory: /var/lib/shinken/modules
      [1425908384] INFO: [broker-master] [Cfg Password UI] Get an CFG/Password UI module for plugin auth-cfg-password
      [1425908384] INFO: [broker-master] Trying to init module: auth-cfg-password
      [1425908384] INFO: [broker-master] [Cfg Password UI] Trying to initialize the CFG/Password auth
      [1425908384] INFO: [broker-master] Trying to init module: ui-graphite
      [1425908384] INFO: [broker-master] Trying to init module: SQLitedb
      [1425908384] INFO: [broker-master] Try to open SQLite database at /var/lib/shinken/webui.db
      [1425908384] INFO: [broker-master] Opened connection to SQLite database OK
      [1425908384] INFO: [broker-master] I correctly loaded the modules: [auth-cfg-password,ui-graphite,SQLitedb]
      [1425908384] WARNING: [broker-master] Loading plugins: No module named helper
      [1425908384] WARNING: [broker-master] Loading plugins: No module named helper
      [1425908384] WARNING: [broker-master] Loading plugins: No module named bottle
      [1425908384] WARNING: [broker-master] Loading plugins: No module named helper
      [1425908407] WARNING: [broker-master] no key or invalid one
      [1425908417] WARNING: [broker-master] no key or invalid one
      [1425908464] WARNING: [broker-master] no key or invalid one
      [1425908468] WARNING: [broker-master] no key or invalid one
      [1425908479] WARNING: [broker-master] no key or invalid one
      [1425908530] WARNING: [broker-master] no key or invalid one
      [1425908542] WARNING: [broker-master] no key or invalid one
      [1425908592] WARNING: [broker-master] no key or invalid one
      [1425908605] WARNING: [broker-master] no key or invalid one
      [1425908655] WARNING: [broker-master] no key or invalid one
      [1425908667] WARNING: [broker-master] no key or invalid one
      [1425908717] WARNING: [broker-master] no key or invalid one
      [1425908730] WARNING: [broker-master] no key or invalid one
      [1425908761] WARNING: [broker-master] no key or invalid one
      [1425908762] WARNING: [broker-master] no key or invalid one
      [1425908763] WARNING: [broker-master] no key or invalid one
      [1425908765] WARNING: [broker-master] no key or invalid one
      [1425908770] WARNING: [broker-master] no key or invalid one
      [1425908772] WARNING: [broker-master] no key or invalid one
      [1425908773] WARNING: [broker-master] no key or invalid one
      [1425908774] WARNING: [broker-master] no key or invalid one
      [1425908775] WARNING: [broker-master] no key or invalid one
      [1425908775] WARNING: [broker-master] no key or invalid one
      [1425908793] WARNING: [broker-master] no key or invalid one
      root@Serv-Shinken:/opt/graphite#

    2. N.i.c.O dit :

      IPSERVER:2003 ne vous affiche rien? Comment ça? Normalement ce port est utilisé en écoute pour insérer des données dans la base. Il est normal de ne rien voir afficher par un navigateur si vous vous y connectez. Si vous voulez voir l’interface de Graphite cette dernière est disponible sur le port HTTP standard. Est ce que Graphite fonctionne déja? Sans regarder Shinken. Avez vous pu insérer une données de test? Ensuite du coté de shinken la configuration est elle bonne? (/usr/bin/shinken-arbiter -v -c /etc/shinken/shinken.cfg)

        1. N.i.c.O dit :

          Je viens d’ajouter mon vHost apache complet au cas ou ça aide.

  3. N.i.c.O dit :

    La console du navigateur affiche quoi comme erreur? Quelle est l’URL utilisé pour l’image? Est elle correcte? N’y a t’il pas un « / » en trop ou autre?

    1. tocks dit :

      Merci de prendre le temps de m’aider

      l’adresse de l’image est :

      http://192.168.0.28/render/?width=586&height=308&lineMode=connected&from=12:34_20150310&until=16:34_20150310&target=localhost.Disks.___used_&target=localhost.Disks.___used_?????&fontSize=8

      Quand je fais clic droit dessus ouvrir l’image j’ai :

      Graphite encountered an unexpected error while handling your request.

      Please contact your site administrator if the problem persists.

      Traceback (most recent call last):
      File « /usr/lib/python2.7/dist-packages/django/core/handlers/base.py », line 109, in get_response
      response = callback(request, *callback_args, **callback_kwargs)
      File « /opt/graphite/webapp/graphite/render/views.py », line 55, in renderView
      (graphOptions, requestOptions) = parseOptions(request)
      File « /opt/graphite/webapp/graphite/render/views.py », line 309, in parseOptions
      untilTime = parseATTime(queryParams[‘until’], tzinfo, now)
      File « /opt/graphite/webapp/graphite/render/attime.py », line 41, in parseATTime
      return tzinfo.localize(datetime.strptime(s,’%H:%M%Y%m%d’), daylight)
      AttributeError: ‘LocalTimezone’ object has no attribute ‘localize’

      1. N.i.c.O dit :

        Il faut installer la lib python pytz.

        1. N.i.c.O dit :

          C’est en effet un bug connu a ce jour a cause du passage sur Django 1.7.
          https://github.com/graphite-project/graphite-web/issues/1081

          Il sera corrigé dans la prochaine version. En attendant l’installation manuelle devrait suffire. J’ajoute ça à mon article.

      2. N.i.c.O dit :

        pip install pytz

  4. tocks dit :

    merci beaucoup sa fonctionne parfaitement

    pip install pytz
    service apache2 restart

    ps : Aurais tu un conseil pour la sécurisation de l’interface Graphite ?

    Car la actuellement tous le monde peux accéder à cette interface.

    1. N.i.c.O dit :

      Parfait si ça marche.
      Pour la protection de la page regarde du coté des htaccess apache.
      Bonne continuation !

  5. Mestra dit :

    Bonjour,

    J’ai suivi ton tutoriel qui est vraiment très bien fait. Par contre, lorsque je veux voir mes graphs sur Graphite ou Shinken, rien ne s’affiche. Sur http://monserveur/ j’au juste la page d’Apache et dans shinken j’ai la même chose que « Tocks ».

    Pourtant toute l’installation s’est déroulé correctement. La seule chose que j’ai du modifier est l’appellation du site graphite en graphite.conf pour l’activer.

    Pourrais tu m’aider s’il te plait ?

    Merci

    1. N.i.c.O dit :

      Bonjour, Avant de regarder du coté de Shinken il faut que Graphite fonctionne seul. Le vHost est copié? Quels sont les erreurs dans les logs apache? Avez vous regardez la doc officiel du projet? http://graphite.wikidot.com/documentation

      1. Mestra dit :

        Merci de me répondre,

        Dans les logs d’apache, aucune erreur de signalée. J’ai été voir sur la Doc officielle, mais je ne vois pas trop ou serais mon erreur.

        Je pense que mon vHost est peut-être mal configuré. Pourtant dans ‘sites-enabled’ graphite est bien activé.

        Je suis sous Ubuntu Server. Peut-être que les sites ne sont utilisables que dans /var/www/ ?

  6. N.i.c.O dit :

    Sur Ubuntu Server il existe un équivalent à SELinux qui s’appel AppArmor. C’est un outil de sécurité qui check le comportement des applications. Il faut lui ajouter une règle pour autoriser une application apache de s’exécuter ailleurs que dans /var/www ou alors désactiver apparmor.

    1. Mestra dit :

      Oui,

      J’ai essayé du coup je n’ai plus rien… Shinken est innaccessible et toujours rien sur http://monserveur 🙁

  7. N.i.c.O dit :

    Sur l’adresse ip du serveur en port standard HTTP vous n’avez rien? Pas de page Apache par défaut non plus?
    En ce qui me concerne je n’ai pas testé la procédure sur un Ubuntu Server. Uniquement sur Debian. Désolé.

    1. Mestra dit :

      Pas de soucis, vous m’aidez c’est déjà bien.

      Sur le port standard HTTP (http://monserveur:80), j’ai la page par défaut effectivement. Mais rien d’autre… et plus de http://monserveur:7767 non plus du coup…

  8. Mestra dit :

    Bon j’ai récupérer Shinken (mauvaise configuration du fichier ‘hosts’ de ma part… oups).

    Mais toujours rien sur le port 80, juste la page de base d’Apache. Même après avoir stoppé AppArmor et redémarrer… J’ai posé une question sur AskUbuntu. Si j’ai la solution, je viendrais la mettre ici.

  9. N.i.c.O dit :

    Vous pouvez désactiver la page par défaut de Apache. ‘a2dissite 000-default’.
    Si vous voulez garder la page par défaut vous pouvez modifier le vhost de Graphite pour qu’il utilise un autre port que le 80 ou qu’il utilise une autre que location que « / ». Par exemple /graphite.

  10. Mestra dit :

    Merci pour l’info

    J’ai déjà essayé de désactivé le site par défaut. Et ensuite, j’ai fait un lien symbolique dans /var/www/graphite/ sur /opt/graphite/webapp/ mais ça n’a rien changé non plus… Je vais bien finir par trouver. Sinon, je vais réessayer toute l’installation…

  11. Mestra dit :

    Ok, j’ai refait toute l’installation de A à Z et j’ai du loupé quelque chose quelque part, car ça y est graphite fonctionne (ouf). Personnelement pour Ubuntu Server, j’ai fait un mix entre votre tutoriel et celui-ci https://www.digitalocean.com/community/tutorials/how-to-install-and-use-graphite-on-an-ubuntu-14-04-server .

    Les seules choses qui change sont les sources via apt-get.

    Je vais essayer le lien vers shinken maintenant, merci N.i.c.O pour votre aide.

  12. N.i.c.O dit :

    Bonne nouvelle ! Bonne continuation!

    1. Mestra dit :

      Bon,

      Tout fonctionne, mais rien ne communique. :/ Lorsque je vais sur Graphite et essaye de visualiser le test par exemple, rien n’apparaît, même pas en-dessous de graphite.

      De même si je vais sur Shinken, j’ai juste des graph avec ‘no data’.

      1. N.i.c.O dit :

        Avant de passer à Shinken il faut que Graphite soit validé. Le test ne s’affiche pas suite à la commande « echo « carbon.installation.test $RANDOM date +%s » | nc -w 1 localhost 2003″ ?
        Le port 2003 est bien en écoute( à vérifier avec netstat)?

  13. Mestra dit :

    Me revoilà. Donc après quelques vérif, le port 2003 semble ne pas être ouvert. Voici un résultat de Nmap :

    Starting Nmap 6.40 ( http://nmap.org ) at 2015-03-30 09:30 CEST
    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.00023s latency).
    Other addresses for localhost (not scanned): 127.0.0.1
    Not shown: 995 closed ports
    PORT STATE SERVICE
    22/tcp open ssh
    80/tcp open http
    111/tcp open rpcbind
    3306/tcp open mysql
    5432/tcp open postgresql
    No exact OS matches for host (If you know what OS is running on it, see http://nmap.org/submit/ ).
    TCP/IP fingerprint:

    Auriez-vous une solution à ça s’il vous plait ?

    1. N.i.c.O dit :

      Un nmap n’était pas nécessaire. Un simple ‘netstat -lputen’ aurait fait l’affaire. Ensuite il semble que vous aillez lancé un scan standard de nmap et ce dernier ne scanne pas les ports exotique comme le 2003 si on ne lui précise pas.
      Si le port n’est pas en écoute c’est que Graphite n’est pas opérationnel. Il faut regarder dans ses logs (/opt/graphite/storage/log/) si il n’y a pas quelque chose qui coince.
      Bon courage !

  14. Mestra dit :

    Enfin !! Apparemment, c’est un mauvais fonctionnement de carbon, qui ne voulais pas démarrer. Donc voici ce que j’ai fait comme commande pour lancer la connexion entre graphite et Shinken :

    carbon-cache –config /etc/carbon/carbon.conf –debug start

    Et ça fonctionne… par contre les URI à partir de Shinken vers Graphite m’envoie toutes vers http://monserveur . Il ne fait pas le lien entre les différentes équipements directement. Est-ce normal ?

    1. N.i.c.O dit :

      Si, les URL sont générées par le module Graphite de Shinken. Cette fois il faut passer aux logs de Shinken pour voir si tout va bien 😉

    2. Mestra dit :

      EDIT :
      La bonne commande (sans le debug) est celle-ci :

      carbon-cache –config /etc/carbon/carbon.conf start

      Rajoutez ‘ –debug ‘ pour voir ce qui se passe.

  15. Pierre dit :

    Bonjour,

    Tout d’abord un grand merci pour votre tutoriel qui est très bien expliqué.

    Mais, après avoir installé Graphite en suivant vos explications, rien ne s’affiche sur l’adresse de mon serveur. J’ai, bien sûr tenté plusieurs choses pour résoudre mon problème mais rien n’y fait. J’ai même tenté de ré-installer Graphite, sans succès.

    Je m’adresse donc à vous afin de vous demander un peu d’aide.
    Je suis sous Debian 7.

    Merci d’avance !

    1. N.i.c.O dit :

      Que disent les log de Apache?

  16. Pierre dit :

    Bonjour,

    Tout d’abord merci de votre réponse.

    Ne sachant pas expliquer ou même comprendre leur contenu, voici une capture d’écran (http://www.hostingpics.net/viewer.php?id=647037Screenshot27.png)

    Merci d’avance

    1. N.i.c.O dit :

      Je suis désolé je n’ai pas le temps de vous décoincer. Mais Google sera d’une aide précieuse !!

      1. Pierre dit :

        Pas de soucis, merci de m’avoir répondu

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *