エージェントプラグイン開発
エージェントプラグインの基本機能
The agent plugin is run by Pandora FMS Software Agent so it has to have some special features:
エージェントプラグインは、Pandora FMS ソフトウエアエージェントで実行され、いくつかの特別な機能があります。
- Each plugin execution may return one or more modules with their corresponding values. The output must be in XML format.
- It will be possible to access local machine resources local or remote machine resources.
- It is possible to use any type of programming language supported by the operating system where the Pandora FMS software agent is installed.
- All dependencies or software needed to run the plugin must be available or installed in the same machine that runs Pandora FMS agent.
- それぞれのプラグインの実行では、一つまたは複数のモジュールの値を返します。出力は後述する XML フォーマットである必要があります。
- ローカルマシンのリソースおよび、リモートで他のマシンのリソースの両方にアクセスすることができます。
- Pandora ソフトウエアエージェントがインストールされている OS でサポートしている、任意のプログラミング言語を利用することができます。
- プラグインを実行するために必要な依存プログラムは、Pandora ソフトウエアエージェントを実行するのと同じマシンにインストールされている必要があります。
Agent plugins may perform a kind of recon task since the plugin may return several modules in one run and the number may change between different runs.
エージェントプラグインは、“自動検出タスク” のようなことを実行でき、プラグインは一度の実行で複数のモジュールを返すことができ、また、実行ごとに異なる数を返すことができます。
On UNIX and GNU/Linux the result of the plugin execution must be 0
, otherwise the plugin result will be ignored.
UNIX および GNU/Linux では、プラグインの終了ステータスは 0
でなければなりません。そうでないと、プラグインの出力は無視されます。
エージェントプラグイン開発の例
This agent plugin returns the percentage of system filesystem usage.
このエージェントプラグインは、ファイルシステムの利用率を返します。
#!/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;
An important part of the code is the usage
function:
コードの重要部分は、利用方法を表示する関数です。
sub usage() { print "\npandora_df.pl v1r1\n\n"; print "usage: ./pandora_df\n"; print "usage: ./pandora_df tmpfs /dev/sda1\n\n"; }
This function describes the version and how to use plugin, it is very important and must always be shown when executing plugin without any parameter or with a -h
(or -help
) option:
この関数では、プラグインのバージョンと利用方法を説明します。これはとても重要で、パラメータ無しや -h
, –help
といったオプションをつけてプラグインを実行したときに表示すべきです。
if ($ARGV[0] eq "-h") { usage(); exit(0); }
Regarding the values returned by the plugin it can be observed that once the data of the following files have been collected, a part of XML is created and printed by the standard output for each of them, this task is performed in the following lines:
プラグインから返される値としては、ファイルシステムから一回データが収集されることがわかると思います。データを含めた XML の書式を生成し標準出力に出力します。この処理は次の部分で行われています。
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"; }
The result returned by this plugin could be:
このプラグインの出力結果は、次のようになります。
<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>
The number of modules returned by this plugin depends on the number of configured filesystems and may change between executions.
このプラグインから返されるモジュール数は、設定したファイルシステムの数に依存し、実行ごとに変更することができます。
The XML fragment is added to the general XML generated by the software agent and is sent to the Pandora FMS server to be processed by the Data Server.
この XML がソフトウエアエージェントが生成する全体の XML に追加され、Pandora サーバへ送信され、データサーバ にて処理されます。
トラブルシューティング
If Pandora FMS does not recognize the agent plugin, does not get the expected information or the agent simply does not work, here are several things you should take into account.
Pandora FMS がエージェントプラグインを認識できないと、期待した値が取得できなかったりエージェントが動作しません。その場合の確認ポイントを以下に示します。
pandora_agent.conf の修正
The Software Agent requires a line in this file with the correct path of the plugin.
ソフトウエアエージェントでは、プラグインの 正しいパス がこのファイル内に書かれている必要があります。
Example:
例:
- /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
is the agent plugin, MyMonitor.conf
is the configuration file passed as an argument, and MyMonitor.err
is a file that will receive possible errors from the plugin execution and keep the standard output clean.
MyMonitor.pl
はエージェントプラグインで、MyMonitor.conf
は引数として渡される設定ファイルです。また、MyMonitor.err
はプラグインを実行した場合に出力されるエラーを書き込むファイルです。
pandora_agent_daemon の再起動
The Software Agent will run the plugins every 5 minutes and it is possible to restart the Software Agent with user root or equivalent from the command line:
ソフトウエアエージェントは 5分ごとにプラグインを実行します。次回の実行まで待てない場合は、コマンドラインからソフトウエアエージェントを再起動します。
/etc/init.d/pandora_agent_daemon restart
プラグインのパーミッションの確認
The plugin and the files to be used must have the correct read, write and execute permissions.
プラグインおよび利用するファイルは、リード、ライト、実行の権限を正しく設定する必要があります。Unix であれば、次のようにします。
chmod 755 < plugin_path >
出力の確認
A better way to find the errors is to run the plugin manually in command line. The result or output of the execution should be carefully checked.
エラーを見つける簡単な方法は、コマンドラインでプラグインを手動実行することです。注意して出力結果を確認してください。
XMLの確認
The XML produced by the plugin must have a valid XML syntax. To check you can follow these two steps from the command line (you must have xmllint
installed):
プラグインによって生成された XML は、正しい XML 構文である必要があります。確認するには、コマンドラインから次の 2 つの手順を実行します (xmllint
がインストールされている必要があります)。
- Create an XML document with the plugin output:
./Plugin.pl > Plugin.xml
. - Checking the XML document:
xmllint Plugin.xml
.
- プラグインの出力を xml ファイルに落とします。:
./Plugin.pl > Plugin.xml
- xml ファイルの書式をチェックします。:
xmllint Plugin.xml
デバッグモード
You can activate the development mode by changing the value of the debug tag in the pandora_agent.conf
file from 0
to 1
. Once you have done this, when the Software Agent executes the plugin, the results will be saved in an XML document with all the agent information.
pandora_agent.conf
ファイル内で、debug の値を 0
から 1
に変更することで、デバッグモードを有効にすることができます。これを行うと、ソフトウエアエージェントがプラグインを実行した結果が、エージェントのその他の情報とあわせて xml ファイルに保存されます。
The name of the document will be the name of the agent with the extension .data
, and it will be located in the 'tmp
' directory (you should check the log of the PFMS agent in /var/log/pandora/pandora_agent.log
). By reviewing the document, you will be able to see if the plugin data is being collected and if it is as expected.
ファイル名は、エージェント名と .data
を含むもので、tmp
ディレクトリに保存されます(Pandora FMS エージェントのログは、/var/log/pandora/pandora_agent.log
を確認してください)。内容を確認し、期待したプラグインの実行結果が含まれているかどうかを見ます。
When you enable Debug mode, the agent runs only once and then exits.
デバッグモードを有効にすると、エージェントは 1回の実行で終了します。
フォーラム
If after all the error persists, you can ask in the PFMS forum.
それでもまだうまくいかない場合は、我々の フォーラム で聞いてみてください。