Auteur Sujet: [RESOLU] installation d'un database broker  (Lu 974 fois)

Hors ligne Httqm

  • BoyScout Froggy
  • **
  • Messages: 55
  • Karma: 3
[RESOLU] installation d'un database broker
« le: 23 janvier, 2012, 18:26:06 pm »
Bonjour tout le monde,

voici ce qui m'amène ici :

pour commencer, de quoi j'ai besoin : enregistrer les états remontés par les services de Shinken (nom du service + hôte + code de retour + date/heure), un truc basique, quoi. Rien qu'avec ça, je serai heureux. Pour le reste (reporting), je ferai mes chtites requêtes SQL kivonbien, ce n'est pas vraiment ce qui m'inquiète.

En fouillant deci-delà, il se trouve que NDO est un module pour Nagios permettant d'enregistrer ces infos dans une DB MySQL. Ca commence à ressembler à ce que je cherche... sauf que :
- le code de NDO semble figé depuis la décennie passée
- les tutos, ... de même
- Nagios, c'est bien joli, mais moi j'utilise Shinken (a priori, ça devrait marcher... mais ça marche pô  :'()

J'ai tenté de suivre ce tuto (http://blog.nicolargo.com/2009/02/pour-en-finir-avec-ndo.html) en l'adaptant au fur et à mesure à Shinken, mais je suis en train de ramer pire qu'un galérien. Alors avant d'arracher le peu de cheveux qu'il me reste, je demande, histoire de pas passer mes nuits sur un truc qui est connu pour ne pas fonctionner...
Alors mes questions :
(1) Existe-t-il une alternative à NDO qui se connecte sans pleurs à Shinken pour enregistrer les infos dans une DB (j'aime bien MySQL, mais je suis "open"  ;))
(2) Sinon, existe-t-il un doc un peu à jour expliquant comment procéder ?

Merci d'avance pour vos lumières
« Modifié: 07 février, 2012, 15:24:07 pm par naparuba »

Hors ligne david.guenault

  • Modérateur
  • Mentor Froggy
  • *****
  • Messages: 383
  • Karma: 16
Re : installation d'un database broker
« Réponse #1 le: 23 janvier, 2012, 18:39:42 pm »
La dernière version (dans le dépot git de shinken) enregistre les logs dans une base mongodb. pour la partie reproting jasper reports a un connecteur pour mongo : http://groups.google.com/group/mongodb-user/browse_thread/thread/482be416bbf3fac8?pli=1

mais je n'ai pas encore testé

Hors ligne Seb-Solon

  • Addict Froggy
  • ***
  • Messages: 247
  • Karma: 4
  • Shinken Dev'
    • GIT
Re : installation d'un database broker
« Réponse #2 le: 23 janvier, 2012, 19:43:01 pm »
Salut,

Euh pour le NDO, oui tu as un module nommé ToNdodb_Mysql.
La déclaration est faite dans le fichier shinken-specific.cfg. Il suffit d'adapter les paramètres et de charger le module dans le broker. Normalement ca tourne ;)

Après, c'est vrai que NDO c'est pas le mieux qu'on puisse faire :)

Hors ligne naparuba

  • Administrateur
  • Super Froggy
  • *****
  • Messages: 592
  • Karma: 17
Re : installation d'un database broker
« Réponse #3 le: 24 janvier, 2012, 08:24:50 am »
Oui, surtout que là tu n'auras pas l'historique, mais du temps réel avec ndo. Le mieux est de se baser sur les logs qui sont déjà une informations agrégée. Le nouveau module mongodb pour les logs devraient être pas mal pratique pour ça.

Hors ligne Httqm

  • BoyScout Froggy
  • **
  • Messages: 55
  • Karma: 3
Re : installation d'un database broker
« Réponse #4 le: 24 janvier, 2012, 15:24:20 pm »
Bon, je suis parti sur l’option « MongoDB ». J’ai commencé par faire un update de Shinken (de 0.8.0 à 0.8.5). Rien de spécial à signaler à ce niveau. J’ai aussi viré tout le caca que j’ai mis en essayant d’installer NDO hier. Normalement, c’est clean ;-)

Ensuite, installation de la DB « MongoDB » en suivant cette doc (http://www.mongodb.org/display/DOCS/Ubuntu+and+Debian+packages) + 2 ou 3 autres trucs (récup de la clé GPG qui marchait pas, ajout d’un script de démarrage en /etc/init.d/mongo). Mon serveur MongoDB démarre / s’arrête / me donne son status : tout va bien. (sauf le nom du binaire : /usr/bin/mongod, je dis NON ! :-D)
Je peux aussi me connecter au shell mongo, et voir la console web.

Jusqu’ici, tout va bien.

Ensuite, ça se complique.
J’ai voulu suivre le Wiki (http://www.shinken-monitoring.org/wiki/the_broker_modules#logstore_mongodb )

J’ai donc ajouté une section à shinken-specific.cfg :

define module{
    module_name         mongologs
    module_type         logstore_mongodb
    mongodb_uri         mongodb://127.0.0.1:27017
    }

Et activé ce module dans la définition de mon broker :


define broker {
    broker_name         broker-1
    address             localhost
    port                7772
    spare               0

    modules             Livestatus, Simple-log, WebUI, NPCD, mongologs

    # Optional
    manage_sub_realms   1               ; optional, like for poller
    manage_arbiters     1               ; optional : take data from Arbiter. There should be only one broker for \
the arbiter

    check_interval      60              ; ping it every minute
    timeout             3               ; 'ping' timeout
    data_timeout        120             ; 'data send' timeout
    max_check_attempts  3               ; if at least max_check_attempts ping failed, the node is DEAD

    # Advanced
    realm               All
    }

Si je redémarre Shinken (tous les démons), et que je met le broker en mode débug , je vois ça dans les logs :


Citer

Warning in importing module : No module named org.shinken_monitoring.tsca
Warning in importing module : No module named pymongo.connection
Warning in importing module : No module named android
Loaded Apache/Passwd module
Warning in importing module : No module named redis
Warning in importing module : No module named pymongo.connection
FINISHING THE ATTRIBUTE MAPPING>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
FINISHED THE ATTRIBUTE MAPPING<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Loaded Apache/Passwd module
Warning in importing module : No module named pymongo
Warning in importing module : No module named memcache
I am GlpiDB Broker


Je suppose que les lignes « No module named pymongo » et « No module named pymongo.connection” peuvent expliquer pourquoi je ne vois aucune donnée dans la DB Mongo ?


1. Comment puis-je vérifier si les modules en questions sont installés / activés / joignables ?
2. Questions subsidiaires (en option, si vous avez du temps / êtes de bonne humeur ) :
       + pourquoi est-ce que le log rapporte des erreurs telles que « Warning in importing module : No module named android » alors que je n’ai rien configuré en ce sens ?
       + pourquoi l’interface et les logs de shinken indiquent-ils seulement « 0.8 » alors que je suis en version 0.8.5 ? C’est bête, mais à la moindre question de debug, c’est une info importante et elle est masquée :-(

Hors ligne naparuba

  • Administrateur
  • Super Froggy
  • *****
  • Messages: 592
  • Karma: 17
Re : installation d'un database broker
« Réponse #5 le: 24 janvier, 2012, 15:39:56 pm »
En fait il faut le server mongodb, mais également la lib python pymongo (ça doit être dans les dépots, ça l'est pour ubuntu).

Pour les autres points :
* WARNING sur les modules : je lève un warning un peu trop violement alors qu'il serait plus malin de le le faire que si le module était demandé (genre l'android, il sera dans 99% des cas en warning :) )
* La version du binaire : oups, encore ma faute :p

Hors ligne Httqm

  • BoyScout Froggy
  • **
  • Messages: 55
  • Karma: 3
Re : installation d'un database broker
« Réponse #6 le: 24 janvier, 2012, 16:18:07 pm »
Merci Naparuba pour les précisions. Je progresse, mais je n'y suis toujours pas  :-\

après installation de la lib "python-pymongo", j'ai maintenant dans le log du broker (toujours en mode débug) :

Warning : the module type logstore_mongodb for mongologs was not found in modules!

"logstore_mongodb" vient de la déclaration du module "mongologs" (cf plus haut dans ce post).

En même temps, Livestatus a planté.
En allant jeter un oeil dans le nagios.log, je trouve ceci :

[1327417876] [broker-1] ERROR : the module Livestatus just crash! Please look at the traceback:
[1327417876] [broker-1] Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/shinken/modules/livestatus_broker/livestatus_broker.py", line 158, i\
n main
    self.do_main()
  File "/usr/local/lib/python2.6/dist-packages/shinken/modules/livestatus_broker/livestatus_broker.py", line 187, i\
n do_main
    self.db.open()
  File "/usr/local/lib/python2.6/dist-packages/shinken/modules/logstore_mongodb.py", line 94, in open
    self.conn = pymongo.Connection(self.mongodb_uri, fsync=True)
TypeError: __init__() got an unexpected keyword argument 'fsync'

Does this ring a bell ?



Autre question : pourquoi est-ce que, dans le fichier "shinken-specific.cfg", la section "define module" pour "mongologs" est présente 2 fois dans la config du broker ? (vu ici)
« Modifié: 24 janvier, 2012, 16:28:01 pm par Httqm »

Hors ligne naparuba

  • Administrateur
  • Super Froggy
  • *****
  • Messages: 592
  • Karma: 17
Re : installation d'un database broker
« Réponse #7 le: 24 janvier, 2012, 16:55:16 pm »
Arg, tu es en plein dans l'effet "trunk beta testeur" sur cette partie, je suis vraiment désolé  :-[

En fait il ne faut pas "attacher" mongologs au broker, mais bien au module LiveStatus (l'object module).
La double entrée est une grosse bêtise en effet, je corrige ça.

Pour le fsync, j'ai l'impression que la lib pymongo a différentes versions, et là tu dois avoir une moins récente, ce qui ne va pas faciliter la tâche. Est-ce que tu peux juste éditer /usr/local/lib/python2.6/dist-packages/shinken/modules/livestatus_broker/livestatus_broker.py et virer le fsync=True de l'appel?
Soit :
self.conn = pymongo.Connection(self.mongodb_uri)

Tu peux me rappeler ton os? Merci :)

Et ne t'inquiète pas, on va y arriver :)

Hors ligne Seb-Solon

  • Addict Froggy
  • ***
  • Messages: 247
  • Karma: 4
  • Shinken Dev'
    • GIT
Re : installation d'un database broker
« Réponse #8 le: 24 janvier, 2012, 17:04:00 pm »
Salut!

Ca à l'air de s'amuser ici! J'espère qu'elle est pas trop froide parce que j'arrive!!! :)

( Si vous n'avez pas compris, je vais jsute essayer moi aussi de faire marcher ce module :) )

Hors ligne Httqm

  • BoyScout Froggy
  • **
  • Messages: 55
  • Karma: 3
Re : Re : installation d'un database broker
« Réponse #9 le: 24 janvier, 2012, 17:50:52 pm »
Arg, tu es en plein dans l'effet "trunk beta testeur" sur cette partie, je suis vraiment désolé  :-[
Meuh non, ne sois pas désolé : quand ça va marcher, on va être très contents tous les 2  ;)

En fait il ne faut pas "attacher" mongologs au broker, mais bien au module LiveStatus (l'object module).

Dans mon shinken-specific.cfg, j'ai maintenant ceci :

define broker {
    broker_name         broker-1
    address             localhost
    port                7772
    spare               0

    # Which modules to load? LiveSatus and logs by default.
    modules             Livestatus, Simple-log, WebUI, NPCD

    # Optional
    manage_sub_realms   1               ; optional, like for poller
    manage_arbiters     1               ; optional : take data from Arbiter. There should be only one broker for the arbiter

    check_interval      60              ; ping it every minute
    timeout             3               ; 'ping' timeout
    data_timeout        120             ; 'data send' timeout
    max_check_attempts  3               ; if at least max_check_attempts ping failed, the node is DEAD

    # Advanced
    realm               All
    }


(...)
define module {
    module_name         Livestatus
    module_type         livestatus
    host                *               ; * = listen on all configured ip addresses
    port                50000           ; port to listen
    database_file       livestatus.db
    modules             mongologs
}


J'ai bon ?


Pour le fsync, j'ai l'impression que la lib pymongo a différentes versions, et là tu dois avoir une moins récente, ce qui ne va pas faciliter la tâche. Est-ce que tu peux juste éditer /usr/local/lib/python2.6/dist-packages/shinken/modules/livestatus_broker/livestatus_broker.py et virer le fsync=True de l'appel?
Soit :
self.conn = pymongo.Connection(self.mongodb_uri)

Aucune trace de 'fsync=True'ni de la ligne de code que tu indiques  dans /usr/local/lib/python2.6/dist-packages/shinken/modules/livestatus_broker/livestatus_broker.py
En revanche, je trouve bien une ligne :

self.conn = pymongo.Connection(self.mongodb_uri, fsync=True)
dans /usr/local/lib/python2.6/dist-packages/shinken/modules/logstore_mongodb.py

j'ai fait la modif.

Tu peux me rappeler ton os? Merci :)
Debian 6.0, 2.6.32-5-686

Et la lib pymongo est en version 1.7-1

Et ne t'inquiète pas, on va y arriver :)
J'y compte bien !!!



Bon, après toutes ces modifs, je redémarre Shinken (+ broker en debug pour le rendre un peu plus bavard), et voilà ce que ça dit :


broker-debug.log :
Get an LogStore MongoDB module for plugin mongologs
Trying to init module : mongologs
I correctly loaded the modules : [mongologs]
modulemanager file /usr/local/lib/python2.6/dist-packages/shinken/modulesmanager.pyc
modulemanager absolute file /usr/local/lib/python2.6/dist-packages/shinken/modulesmanager.pyc
Using modules path : /usr/local/lib/python2.6/dist-packages/shinken/modules
Go run
open LiveStatusLogStoreMongoDB ok
LiveStatusLogStoreMongoDB.AutoReconnect could not find master
NPCD is now started ; pid=1858
Begin Loop : managing old broks 0
External Queue len (Livestatus) : 0
External Queue len (WebUI) : 0
External Queue len (NPCD) : 0
DBG: Time to send 400 broks 0.295454978943
Begin Loop : managing old broks 0
External Queue len (Livestatus) : 1
External Queue len (WebUI) : 0
External Queue len (NPCD) : 0
DBG: Time to send 2 broks 0.00565004348755
{'source': None, '_type': 'ICrash', '_data': {'exception': AutoReconnect('could not find master',), 'name': u'Livestatus', 'trace': 'Traceback (mos\
t recent call last):\n  File "/usr/local/lib/python2.6/dist-packages/shinken/modules/livestatus_broker/livestatus_broker.py", line 158, in main\n  \
  self.do_main()\n  File "/usr/local/lib/python2.6/dist-packages/shinken/modules/livestatus_broker/livestatus_broker.py", line 187, in do_main\n   \
 self.db.open()\n  File "/usr/local/lib/python2.6/dist-packages/shinken/modules/logstore_mongodb.py", line 98, in open\n    self.conn = pymongo.Con\
nection(self.mongodb_uri)\n  File "/usr/lib/pymodules/python2.6/pymongo/connection.py", line 185, in __init__\n    self.__find_master()\n  File "/u\
sr/lib/pymodules/python2.6/pymongo/connection.py", line 452, in __find_master\n    raise AutoReconnect("could not find master")\nAutoReconnect: cou\
ld not find master\n'}, '_from': 0}
ERROR : the module Livestatus just crash! Please look at the traceback:
Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/shinken/modules/livestatus_broker/livestatus_broker.py", line 158, in main
    self.do_main()
  File "/usr/local/lib/python2.6/dist-packages/shinken/modules/livestatus_broker/livestatus_broker.py", line 187, in do_main
    self.db.open()
  File "/usr/local/lib/python2.6/dist-packages/shinken/modules/logstore_mongodb.py", line 98, in open
    self.conn = pymongo.Connection(self.mongodb_uri)
  File "/usr/lib/pymodules/python2.6/pymongo/connection.py", line 185, in __init__
    self.__find_master()
  File "/usr/lib/pymodules/python2.6/pymongo/connection.py", line 452, in __find_master
    raise AutoReconnect("could not find master")
AutoReconnect: could not find master

Donc a priori, ça marche pour le module mongologs, mais du coup, Livestatus n'aime plus ça  :'(

Hors ligne Seb-Solon

  • Addict Froggy
  • ***
  • Messages: 247
  • Karma: 4
  • Shinken Dev'
    • GIT
Re : installation d'un database broker
« Réponse #10 le: 24 janvier, 2012, 19:05:34 pm »
Me revoila!

Mauvaise nouvelle, j'ai pas eu de problème sur mongo moi :( .
Easy_install m'a installé la version 2.1.1 de pymongo. J'ai nettoyé shinken-specific.cfg des doublons au niveau des déclarations et c'est tout...

Désolé, mon ubuntu est trop bien élevé pour créer des problèmes :)

(Par contre le setup.py je le haie toujours autant au niveau de l'install :D. Impossible de savoir ou sont inscrit les paths de shinken. J'avais fait unr faute de frappe dans un ded chemind du coup les script merdouillaient...)

Hors ligne Httqm

  • BoyScout Froggy
  • **
  • Messages: 55
  • Karma: 3
Re : Re : installation d'un database broker
« Réponse #11 le: 25 janvier, 2012, 10:16:14 am »
Mauvaise nouvelle, j'ai pas eu de problème sur mongo moi :( .

zutflutmerd : nous voilà en plein syndrôme "chezmoiçamarche.com"  ;)

Juste au cas où, peux-tu me détailler ta procédure d'install ? Est-ce une nouvelle installation ou un upgrade ?

De mon côté, j'ai installé Shinken la 1ère fois avec le script de Nicolargo (qui utilise le setup.py) donc pour rester propre un minimum, j'ai fait mon upgrade avec
python setup.py update --install-scripts=/usr/bin/
Je viens aussi de voir ceci dans les logs de Thruk :

[2012/01/24 10:09:00][********][WARN][Thruk.Backend.Provider.Livestatus] backend 'Shinken' uses too old livestatus version: '2.0-shinken', \
minimum requirement is at least '1.1.3'. Upgrade if you experience problems.

Ce qui m'a mis la puce à l'oreille, c'est la disparition des icônes des "action_url" dans l'interface de Thruk. Donc je pense que je suis bon pour une MàJ de Thruk dans la foulée...


Hors ligne Seb-Solon

  • Addict Froggy
  • ***
  • Messages: 247
  • Karma: 4
  • Shinken Dev'
    • GIT
Re : installation d'un database broker
« Réponse #12 le: 25 janvier, 2012, 10:46:28 am »
Je n'utilise pas le script de nicolargo car je ne voulais pas de Thruk en fait :)

Voila ce que j'ai fait :
J'ai modifié le setup.cfg pour avoir les chemins que je voulais.
J'ai fait un backup de mon dossier etc
J'ai lancé l'installation (./setup.py install)
J'ai remis mes fichiers de conf au bon endroit en mergeant proprement mon shinken-specific.cfg (suppression des doubles définitions de module, choix de mongologs etc...)
J'ai lancé Shinken (oui je savais que j'avais pas de base mongo, mais je voulais être sur d'avoir la même erreur)
J'ai installé mongo avec un easy_install pymongo
J'ai relancé Shinken : plus d'erreurs.


Je peux te montrer un bout de mon shinken-specific si nécessaire

EDIT : Je viens de voir que pymongo était aussi en version 2.1.1 pour Debian : http://packages.debian.org/sid/python-pymongo
Peut être qu'avec une MAJ...
« Modifié: 25 janvier, 2012, 10:49:33 am par Seb-Solon »

Hors ligne Httqm

  • BoyScout Froggy
  • **
  • Messages: 55
  • Karma: 3
Re : installation d'un database broker
« Réponse #13 le: 25 janvier, 2012, 18:34:18 pm »
Bon... je n'avance pas des masses  :(

Ce que j'ai fait :
- upgrade de Shinken en version 0.8.5 avec remise au propre des fichiers de conf (notamment le shinken-specific.cfg)
- upgrade de Thruk en version 1.1.7

Résultat :
- avec ceci dans le shinken-specific.cfg :

define module{
module_name Livestatus
module_type livestatus
host * ; * = listen on all configured ip addresses
port 6557   ; port to listen
modules mongologs
}

define module{
       module_name      mongologs
       module_type      logstore_mongodb
#       mongodb_uri      mongodb://127.0.0.1:27017
       mongodb_uri      mongodb://192.168.105.50:27017
}

(J'ai testé avec 127.0.0.1 et l'IP de ma machine... des fois que... Mais c'était pas ça :( )

le module livestatus plante systématiquement (extrait de broker-debug.log) :

ERROR : the module Livestatus just crash! Please look at the traceback:
Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/shinken/modules/livestatus_broker/livestatus_broker.py", line 158, in main
    self.do_main()
  File "/usr/local/lib/python2.6/dist-packages/shinken/modules/livestatus_broker/livestatus_broker.py", line 187, in do_main
    self.db.open()
  File "/usr/local/lib/python2.6/dist-packages/shinken/modules/logstore_mongodb.py", line 97, in open
    self.conn = pymongo.Connection(self.mongodb_uri)
  File "/usr/lib/pymodules/python2.6/pymongo/connection.py", line 185, in __init__
    self.__find_master()
  File "/usr/lib/pymodules/python2.6/pymongo/connection.py", line 452, in __find_master
    raise AutoReconnect("could not find master")
AutoReconnect: could not find master

Begin Loop : managing old broks 0
External Queue len (Livestatus) : 2
External Queue len (WebUI) : 0
External Queue len (NPCDMOD) : 0
Error : the external module Livestatus goes down unexpectly!


Du coup, je me demande s'il cherche un MongoDB en mode "master". Je ne comprends pas bien pourquoi, mais comme ça marche pas en l'état, je teste en redémarrant mongo avec "--master". Mais rebelote :(

Mongodb plante régulièrement pour des questions de droits d'accès aux fichiers (en désespoir de cause, j'ai "chmodé 777" mais il réussit quand même à trouver des fichiers non accessibles en rw.... c'est pas très clair, à creuser...)

Donc je sèche. J'achète tous les bons conseils, même les trucs les plus évidents...

Hors ligne Seb-Solon

  • Addict Froggy
  • ***
  • Messages: 247
  • Karma: 4
  • Shinken Dev'
    • GIT
Re : installation d'un database broker
« Réponse #14 le: 25 janvier, 2012, 18:48:44 pm »
Moi j'ai un paramètre en plus dans mon livestatus : socket :)
C'est peut être ca. Il faut indiqué un chemin pour ce champ, moi j'ai /usr/local/nagios/var/rw/live, mais parce que je l'ai installé comme ca. Regarde si c'est ca ;)