Développement de plugins pour les agents
Caractéristiques de base du plugin agent
Le plugin agent est exécuté par l'agent logiciel de Pandora FMS et doit donc présenter certaines caractéristiques particulières :
- Chaque exécution de plugin peut renvoyer un ou plusieurs modules avec leurs valeurs correspondantes. Le résultat sera au format XML.
- Il doit être possible d'accéder à distance soit aux ressources locales de la machine, soit aux ressources d'une autre machine.
- Il est possible d'utiliser n'importe quel type de langage de programmation pris en charge par le système d'exploitation sur lequel l'agent logiciel Pandora FMS est installé.
- Toutes les dépendances ou tous les logiciels nécessaires à l'exécution du plugin doivent être disponibles ou installés sur la même machine que celle qui exécute l'agent Pandora FMS.
L'agent plugin peut effectuer une sorte de tâche de reconnaissance car le plugin peut renvoyer plusieurs modules en une seule fois et le nombre peut changer d'une fois à l'autre.
Sous UNIX et GNU/Linux, le résultat de l'exécution du plugin doit être 0
, sinon le résultat plugin sera ignoré.
Exemple de développement d'un plugin pour agent
Ce plugin d'agent renvoie le pourcentage d'utilisation du filesystem sur le système.
#!/usr/bin/perl use strict; sub usage() { print "\npandora_df.pl v1r1\n\n"; print "usage: ./pandora_df\n"; print "usage: ./pandora_df tmpfs /dev/sda1\n\n"; } # Retrieve information from all filesystem my $all_filesystems = 0; # Check command line parameters if ($#ARGV <0) { $all_filesystems = 1; } if ($ARGV[0] eq "-h") { usage(); exit(0); } # Parse command line parameters my %filesystems; foreach my $fs (@ARGV) { $filesystems{$fs} = '-1%'; } # Retrieve filesystem information # -P use the POSIX output format for portability my @df = `df -P`; shift (@df); # No filesystems? Something went wrong. if ($#df <0) { exit 1; } # Parse filesystem usage foreach my $row (@df) { my @columns = split (' ', $row); exit 1 if ($#columns <4); $filesystems{$columns[0]} = $columns[4] if (defined ($filesystems{$columns[0]}) || $all_filesystems == 1); } while (my ($filesystem, $use) = each (%filesystems)) { # Remove the trailing % chop ($use); # Print module output print "<module>\n"; print "<name><![CDATA[" . $filesystem . "]]></name>\n"; print "<type><![CDATA[generic_data]]></type>\n"; print "<data><![CDATA[" . $use . "]]></data>\n"; print "<description>% of usage in this volume</description>\n"; print "</module>\n"; } exit 0;
Une partie fondamentale du code est la fonction usage
:
sub usage() { print "\npandora_df.pl v1r1\n\n"; print "usage: ./pandora_df\n"; print "usage: ./pandora_df tmpfs /dev/sda1\n\n"; }
Cette fonction décrit la version et la manière d'utiliser plugin, elle est très importante et devrait toujours être affichée lors de l'exécution du plugin sans aucun paramètre ou avec une option -h
(ou -help
) :
if ($ARGV[0] eq "-h") { usage(); exit(0); }
En ce qui concerne les valeurs renvoyées par l'extension plugin, on peut constater qu'une fois que les données des fichiers suivants ont été collectées, une partie de XML est créée et imprimée par la sortie standard pour chacun d'entre eux, ce qui est fait dans les lignes suivantes :
while (my ($filesystem, $use) = each (%filesystems)) { # Remove the trailing % chop ($use); # Print module output print "<module>\n"; print "<name><![CDATA[" . $filesystem . "]]></name>\n"; print "<type><![CDATA[generic_data]]></type>\n"; print "<data><![CDATA[" . $use . "]]></data>\n"; print "<description>% of usage in this volume</description>\n"; print "</module>\n"; }
Le résultat renvoyé par ce plugin pourrait être :
<module> <name><![CDATA[tmpfs]]></name> <type><![CDATA[generic_data]]></type> <data><![CDATA[0]]></data> <description>% of usage in this volume</description> </module> <module> <name><![CDATA[/dev/mapper/VolGroup-lv_home]]></name> <type><![CDATA[generic_data]]></type> <data><![CDATA[26]]></data> <description>% of usage in this volume</description> </module> <module> <name><![CDATA[/dev/sda9]]></name> <type><![CDATA[generic_data]]></type> <data><![CDATA[34]]></data> <description>% of usage in this volume</description> </module>
Le nombre de modules renvoyés par ce plugin dépend du nombre de filesystem configurés et peut changer entre les exécutions.
Le fragment XML est ajouté au XML général généré par l'agent logiciel et est envoyé au serveur Pandora FMS pour être traité par l'application Data Server.
Dépannage
Si Pandora FMS ne reconnaît pas l'agent plugin, ne reçoit pas les informations attendues ou si l'agent ne fonctionne tout simplement pas, voici quelques éléments à prendre en compte.
Révision de pandora_agent.conf
L'agent logiciel a besoin d'une ligne dans ce fichier avec le chemin correct de plugin.
Exemple :
- /etc/pandora/pandora_agent.conf
module_plugin /etc/pandora/plugins/MyMonitor.pl /etc/pandora/plugins/MyMonitor.conf 2> /etc/pandora/plugins/MyMonitor.err
MyMonitor.pl
est le plugin de l'agent, MyMonitor.conf
est le fichier de configuration passé en argument, et MyMonitor.err
est un fichier qui recevra les éventuelles erreurs d'exécution du plugin et gardera la sortie standard propre.
Redémarrer le démon pandora_agent_daemon
L'agent logiciel exécute les plugins toutes les 5 minutes et il est possible de redémarrer l'agent logiciel avec l'utilisateur root ou équivalent à partir de la ligne de commande :
/etc/init.d/pandora_agent_daemon restart
Vérifier les autorisations des plugins
Le plugin et les fichiers à utiliser doivent avoir les bonnes permissions de lecture, d'écriture et d'exécution.
chmod 755 <plugin_path >
Validation des résultats
Une meilleure façon de trouver les erreurs consiste à exécuter le plugin manuellement sur la ligne de commande. La sortie de l'exécution doit être soigneusement vérifiée.
Validation du XML résultant
Le XML produit par le plugin doit avoir une syntaxe XML valide. Pour le vérifier, vous pouvez suivre ces deux étapes depuis la ligne de commande (vous devez avoir installé xmllint
) :
- Créer un document XML avec la sortie du plugin :
./Plugin.pl> Plugin.xml
. - Vérification du document XML :
xmllint Plugin.xml
.
Debug mode
Vous pouvez activer le mode développement en changeant la valeur du tag debug dans le fichier pandora_agent.conf
de 0
à 1
. Une fois que vous avez fait cela, lorsque l'agent logiciel exécute le plugin, les résultats seront sauvegardés dans un document XML avec toutes les informations de l'agent.
Le nom du document sera le nom de l'agent avec l'extension .data
, et sera situé dans le répertoire 'tmp
' (vous devriez vérifier le log de l'agent PFMS dans '/var/log/pandora/pandora_agent.log
). En vérifiant le document, vous serez en mesure de voir si les données du plugin sont collectées et si elles sont conformes aux attentes.
Lorsque vous activez le mode Debug, l'agent ne s'exécute qu'une seule fois et se termine.
Forum
Si, après tout, l'erreur persiste, vous pouvez poser une question dans le forum PFMS.