Comment déboguer un script de méthode d'entrée de données dans Cacti?

8

(Voir en bas pour les mises à jour ...)

J'ai écrit un script de méthode d'entrée de données pour Cacti (en Ruby, pour collecter les statistiques de beanstalkd) et cela fonctionne à partir de la ligne de commande (renvoyant un seul entier simple, comme documenté ici ) lorsqu'il est exécuté en tant que compte utilisateur cacti mais avec l'outil Cacti lui-même ne recueille aucune donnée et il n'y a rien dans les journaux.

Voici la configuration des méthodes de saisie de données: Méthode de saisie de données Cacti http://img.skitch.com/20091009-gh7g1kukn9yradj6y2iqrd5qm1.jpg

Et voici le graphique résultant (après qu'il a été ajouté au modèle de graphique d'un hôte et laissé à s'exécuter suffisamment longtemps pour collecter des données): Cacti Graph http://img.skitch.com/20091009-xq1kn3qxkteb5hb11wtx6tbs8m.jpg

Mise à jour # 1 : Il semblerait que Cacti dépouille l'environnement:

sudo su - cacti -c 'env -i / script / beanstat --host 10.11.12.13 --port 11300 --stat current-attendant'
/ script / beanstat: 4: dans `require ': aucun fichier à charger - rubygems (LoadError)
    de / script / beanstat: 4

Si tel est le cas, comment pourrais-je contourner ce problème?

Mise à jour # 2 : Cette réponse sur stackoverflow.com semble avoir résolu le problème d'environnement, mais toujours aucune donnée dans le graphique.

Mise à jour # 3 : Grâce à la suggestion de @ Heath, j'ai augmenté le niveau de journalisation du poller et j'ai détecté ceci:

AVERTISSEMENT: le résultat de CMD n'est pas valide. Résultat partiel: U

N'ont pas eu de chance Googler ce que signifie "Résultat partiel: U". Le script imprime simplement une valeur entière unique.

Mise à jour n ° 4 : j'ai finalement réussi à faire fonctionner cela. Le problème principal était le manque d'environnement lors de l'exécution du script shell. J'ai dû résoudre cela en préfixant mon script Ruby avec les lignes suivantes:

#! / bin / sh
CHEMIN = / usr / local / bin: $ CHEMIN
exec ruby ​​-x "/ full / path / to / script / directory" $ 0 "$ @"
#! / usr / bin / env rubis

Et le problème secondaire était la configuration correcte des méthodes d'entrée de données (une pour chaque métrique distincte que je voulais collecter, même si elles utilisaient toutes le même script) qui alimente les sources de données qui alimente les modèles de données (ou vice versa, je '' Je ne suis toujours pas clair à ce sujet) qui alimente les modèles de graphiques qui doivent être attribués aux périphériques puis ajoutés aux arbres de graphiques. En résumé, c'est une débâcle majeure avec de la merde pour la documentation et j'espère ne plus jamais avoir à le faire.

Mise à jour # 5 : j'ai partagé mon script sur GitHub http://github.com/trak3r/cacti-beanstalkd-script

Teflon Ted
la source

Réponses:

4

Lorsque j'essayais de déboguer un script personnalisé, j'ai trouvé utile que le script ajoute des informations à un fichier temporaire à chaque exécution. de cette façon, je pouvais m'assurer qu'il était appelé comme je m'y attendais. Des choses comme les arguments de la ligne cmd, l'environnement et la ou les valeurs qu'elle allait renvoyer. Vous pouvez également vouloir rediriger stderr vers un fichier journal pour intercepter la sortie d'erreur du script.

Je vois que vous avez créé une méthode de saisie de données et un modèle de graphique; avez-vous également créé un modèle de données?

Bruyère
la source
Oublié de mentionner; avez-vous essayé d'augmenter le niveau de journalisation du poller?
Heath
Ouais j'ai aussi fait un modèle de données; L'IIRC était une condition préalable à l'ajout des points de données au modèle de graphique.
Teflon Ted
Bonne idée au niveau de la journalisation du poller; Je l'ai juste augmenté d'un cran. Merci.
Teflon Ted