差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
ja:documentation:08_technical_reference:05_anexo_server_plugins_development [2021/07/16 22:55] – [パフォーマンス] junichi | ja:documentation:08_technical_reference:05_anexo_server_plugins_development [Unknown date] (現在) – 削除 - 外部編集 (Unknown date) 127.0.0.1 | ||
---|---|---|---|
行 1: | 行 1: | ||
- | ====== サーバプラグイン開発 ====== | ||
- | {{indexmenu_n> | ||
- | [[ja: | ||
- | |||
- | ===== サーバプラグイン開発 ===== | ||
- | |||
- | ==== サーバプラグインの基本機能 ==== | ||
- | |||
- | {{ : | ||
- | |||
- | サーバプラグインは、Pandora FMS プラグインサーバにより実行されるため、次に示す特別な機能を備えている必要があります。 | ||
- | |||
- | * プラグインの実行では単一の値を返す必要があります。サーバプラグインは、プラグインモジュールによって実行されるためです。 | ||
- | |||
- | * リモートで監視対象のリソースにアクセスできる必要があります。 | ||
- | |||
- | * Pandora サーバのインストール先の OS がサポートする任意のプログラミング言語を利用することができます。 | ||
- | |||
- | * プラグインの実行に必要な依存ソフトウエアは、Pandora サーバを実行するのと同一のマシンにインストールされている必要があります。 | ||
- | |||
- | You may find more information about monitoring with remote server plugins [[: | ||
- | |||
- | リモートサーバプラグインを使った監視に関する詳細は、[[: | ||
- | |||
- | ==== サーバプラグイン開発 ==== | ||
- | 次に、Pandora FMS のサーバプラグインの例を説明します。 | ||
- | |||
- | 以下のプラグインは、インタフェースの入出力トラフィックの合計を返します。データは SNMP で取得します。 | ||
- | |||
- | プラグインのコードは次の通りです。 | ||
- | |||
- | < | ||
- | # | ||
- | |||
- | use strict; | ||
- | use warnings; | ||
- | |||
- | sub get_param($) { | ||
- | my $param = shift; | ||
- | my $value = undef; | ||
- | |||
- | $param = " | ||
- | |||
- | for(my $i=0; $i< | ||
- | |||
- | if ($ARGV[$i] eq $param) { | ||
- | $value = $ARGV[$i+1]; | ||
- | last; | ||
- | } | ||
- | |||
- | } | ||
- | return $value; | ||
- | } | ||
- | |||
- | sub usage () { | ||
- | print " | ||
- | print " | ||
- | print " | ||
- | } | ||
- | |||
- | #Global variables | ||
- | my $ip = get_param(" | ||
- | my $community = get_param(" | ||
- | my $ifname = get_param(" | ||
- | |||
- | if (!defined($ip) || | ||
- | !defined($community) || | ||
- | !defined($ifname) ) { | ||
- | usage(); | ||
- | exit; | ||
- | } | ||
- | |||
- | #Browse interface name | ||
- | my $res = `snmpwalk -c $community -v1 $ip .1.3.6.1.2.1.2.2.1.2 -On`; | ||
- | |||
- | my $suffix = undef; | ||
- | |||
- | my @iface_list = split(/\n/, $res); | ||
- | |||
- | foreach my $line (@iface_list) { | ||
- | |||
- | #Parse snmpwalk line | ||
- | if ($line =~ m/ | ||
- | my $aux = $1; | ||
- | |||
- | #Chec if this is the interface requested | ||
- | if ($2 eq $ifname) { | ||
- | |||
- | my @suffix_array = split(/\./, $aux); | ||
- | |||
- | #Get last number of OID | ||
- | $suffix = $suffix_array[$# | ||
- | } | ||
- | } | ||
- | } | ||
- | |||
- | #Check if iface name was found | ||
- | if (defined($suffix)) { | ||
- | #Get octets stats | ||
- | my $inoctets = `snmpget $ip -c $community -v1 .1.3.6.1.2.1.2.2.1.10.$suffix -OUevqt`; | ||
- | my $outoctets = `snmpget $ip -c $community -v1 .1.3.6.1.2.1.2.2.1.16.$suffix -OUevqt`; | ||
- | |||
- | print $inoctets+$outoctets; | ||
- | } | ||
- | </ | ||
- | |||
- | このコードの重要な説明は、利用方法の関数にあります。 | ||
- | |||
- | < | ||
- | sub usage () { | ||
- | print " | ||
- | print " | ||
- | print " | ||
- | } | ||
- | </ | ||
- | |||
- | この関数では、バージョンおよびプラグインの利用方法を説明しています。これはとても重要で、パラメータを指定せずにプラグインを実行するかまたは -h や --help を指定してプラグインを実行した場合に常に表示される必要があります。 | ||
- | |||
- | プラグインが返す値に関しては、最後から 2行目に標準出力に表示する以下のようなコマンドがあります。 | ||
- | |||
- | print $inoctets+$outoctets; | ||
- | |||
- | 見ての通り、プラグインが返す値は単一のデータで、これを Pandora プラグインサーバが関連モジュールにデータとして追加します。 | ||
- | |||
- | このプラグインを実行するには、Pandora サーバを実行するマシンに // | ||
- | |||
- | ==== プラグインの手動登録 ==== | ||
- | |||
- | {{ wiki: | ||
- | |||
- | |||
- | * **名前(Name)** | ||
- | |||
- | プラグインの名前です。 | ||
- | |||
- | * **プラグインタイプ(Plugin type)** | ||
- | |||
- | プラグインには、標準プラグインと Nagios の2種類があります。 標準プラグインは、アクションを実行してパラメータを受け取るスクリプトです。 Nagios プラグインは、その名前が示すように、Nagios で利用できる形式のプラグインです。主な違いは、テストが成功したかどうかを Nagios プラグインはエラーレベルで示すことです。 | ||
- | |||
- | もし Nagios プラグインを使いたい場合で(OK/ | ||
- | |||
- | * **最大タイムアウト(Max. timeout)** | ||
- | |||
- | プラグインの実行時間制限です。 この時間内に応答がない場合は、モジュールを不明として処理し、その値は更新されません。 プラグインを使用してモニタリングを実装する場合、これは非常に重要な要素です。そのため、プラグインの実行にかかる時間がこの数値より大きいと値を取得できません。この値は、プラグインとして使用されるスクリプトや実行ファイルが値を返すまでにかかる時間よりも常に大きくなければなりません。 何も設定しない場合は、plugin_timeout の設定値が使われます。 | ||
- | |||
- | * **プラグインコマンド(Plug-in command)** | ||
- | |||
- | プラグインコマンドのパスです。デフォルトインストールでのプラグインディレクトリは、/ | ||
- | |||
- | サーバは、このスクリプトを実行します。そのため、読み取りおよび実行権限がある必要があります。 | ||
- | |||
- | * **プラグインパラメータ(Plug-in parameters)** | ||
- | |||
- | コマンドのパラメータ文字列で、コマンドの引数としてしていするものです。パラメータフィールドには、_field1_ _field2_ ... _fieldN_ といったマクロが使えます。 | ||
- | |||
- | * **パラメータマクロ(Parameters macros)** | ||
- | |||
- | プラグインパラメータフィールドで使うマクロを追加することができます。このマクロは、モジュール設定の通常のテキストフィールドとして表示されます。 | ||
- | |||
- | ==== プラグインマクロ ==== | ||
- | |||
- | Conside the **DNS Plugin** installed by default in Pandora FMS server. | ||
- | |||
- | Pandora FMS サーバにデフォルトでインストールされている **DNSプラグイン** について考えてみます。 | ||
- | |||
- | {{ : | ||
- | |||
- | Said plugin, [[: | ||
- | |||
- | [[: | ||
- | |||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | In the section **Macro parameters **add three macro fields **field1**, **field2** | ||
- | |||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | |||
- | これらの3つのパラメータで、新しいプラグインの[[: | ||
- | という名前で、説明に前の概要をコピーします。**さらに** 監視のためにモジュールが false(0) または true(1) を取得する必要があることを示します。 このタイプのデータはブール値とも呼ばれ、Pandora FMS では '' | ||
- | セクション **マクロパラメータ(Macro parameters)** に、3つのマクロフィールド **field1**, **field2** および **field3** を追加します。 | ||
- | |||
- | For '' | ||
- | |||
- | '' | ||
- | |||
- | In the text box **Plugin command** | ||
- | |||
- | テキストボックスに **プラグインコマンド** を入力します。 | ||
- | < | ||
- | |||
- | / | ||
- | |||
- | </ | ||
- | |||
- | In the **Plugin parameters** | ||
- | |||
- | **プラグインパラメータ(Plugin parameters)** ボックスに入力します。 | ||
- | |||
- | < | ||
- | -i _field1_ -d _field2_ -s _field3_ | ||
- | |||
- | </ | ||
- | |||
- | [[http:// | ||
- | |||
- | <WRAP center round box 60%> \\ When this plugin is used within the module, the **DNS Plugin** | ||
- | |||
- | <WRAP center round box 60%> \\ このプラグインをモジュールで利用する際には、それぞれのフィールドはモジュールのパラメータに置き換えられ **DNS Plugin** が実行されます。 \\ </ | ||
- | |||
- | < | ||
- | |||
- | / | ||
- | |||
- | </ | ||
- | |||
- | === 動作 === | ||
- | |||
- | Macros work like **_field1_**, | ||
- | |||
- | マクロは **_field1_**, | ||
- | |||
- | Going back to the example of the previous section where the default values of the **_fieldN_** were left blank. Edit it for the default value of '' | ||
- | |||
- | **_fieldN_** のデフォルト値が空白のままになっている前の章の例に戻ります。'' | ||
- | |||
- | <WRAP center round important 60%>\\ | ||
- | If any module or component is using that server plugin, a lock icon that cannot be updated will appear.\\ | ||
- | </ | ||
- | |||
- | <WRAP center round important 60%>\\ | ||
- | モジュールまたはコンポーネントがそのサーバプラグインを使用している場合、更新できないロックアイコンが表示されます。\\ | ||
- | </ | ||
- | |||
- | The '' | ||
- | |||
- | '' | ||
- | |||
- | {{ : | ||
- | Once you are again in the new Module editing form, in **Plugin** select the "New DNS Plugin" | ||
- | |||
- | {{ : | ||
- | 新しいモジュールの編集フォームで、**プラグイン**で "New DNS Plugin" | ||
- | |||
- | {{: | ||
- | |||
- | {{: | ||
- | |||
- | The advantage of this method is that it will have both Modules and Web domains you need to check and they are easily identified in different components (Dashboards, | ||
- | |||
- | この方法の良い点は、モジュールとしてチェックする必要のある Web ドメインがあり、名前によってさまざまなコンポーネント(ダッシュボード、レポートなど)で簡単に識別できることです。 | ||
- | |||
- | ==== PSPZ パッケージ ==== | ||
- | === Pandora サーバプラグイン Zip ファイル (.pspz) === | ||
- | Pandora FMS 3.0では、プラグインおよび新しいプラグインを(プラグインに依存した、モジュールのライブラリのように)使用するモジュールを登録する新しい方法があります。基本的には、以下で説明する.pspzフォーマットのファイルをアップロードする管理コンソール拡張機能です。システムでファイルを読み込み、展開後、バイナリファイルとスクリプトをシステムにインストールし、Pandora FMSのモジュールライブラリへのプラグインの登録と.pspzファイル中で定義されたすべてのモジュール生成を行います。 | ||
- | |||
- | この節では、.pspzファイルの作成方法について説明します。 | ||
- | |||
- | === パッケージファイル === | ||
- | .pspz ファイルは2つのファイルからなるzipファイルです。 | ||
- | |||
- | **plugin_definition.ini**: | ||
- | |||
- | **< | ||
- | |||
- | === plugin_definition.ini の構造 === | ||
- | == ヘッダー/ | ||
- | これがオプションセクションを持つ標準的なINIファイルです。 | ||
- | 最初のセクションは最も重要で、セクション名は" | ||
- | 以下に例を示します。 | ||
- | |||
- | < | ||
- | [plugin_definition] | ||
- | name = Remote SSH exec | ||
- | filename = ssh_pandoraplugin.sh | ||
- | description = This plugin execute remotely any command provided | ||
- | timeout = 20 | ||
- | ip_opt = -h | ||
- | execution_command = | ||
- | execution_postcommand = | ||
- | user_opt = -u | ||
- | port_opt = | ||
- | pass_opt = | ||
- | plugin_type = 0 | ||
- | total_modules_provided = 1 | ||
- | </ | ||
- | |||
- | **filename**: | ||
- | |||
- | *** _opt**: プラグインに登録するオプションを指定します。Pandora FMSコンソールで" | ||
- | |||
- | **plugin_type**: | ||
- | |||
- | **total_modules_provided**: | ||
- | |||
- | **execution_command**: | ||
- | |||
- | **execution_postcommand**: | ||
- | |||
- | == モジュール定義 / ネットワークコンポーネント == | ||
- | これは動的セクション(セクション名に増加する数値を持つ)として定義され、必要な数だけ作成することができます。ここで定義したモジュール数と同じ値を、前のセクションの**total_modules_provided**に設定する必要があります。 | ||
- | もし4個のモジュールがある場合、セクション名はmodule1, | ||
- | |||
- | 以下にモジュール定義の例を示します。 | ||
- | |||
- | < | ||
- | [module1] | ||
- | name = Load Average 1Min | ||
- | description = Get load average from command uptime | ||
- | id_group = 12 | ||
- | type = 1 | ||
- | max = 0 | ||
- | min = 0 | ||
- | module_interval = 300 | ||
- | id_module_group = 4 | ||
- | id_modulo = 4 | ||
- | plugin_user = root | ||
- | plugin_pass = | ||
- | plugin_parameter = " | ||
- | max_timeout = 20 | ||
- | history_data = 1 | ||
- | min_warning = 2 | ||
- | min_critical = 5 | ||
- | str_warning = " | ||
- | min_critical = " | ||
- | min_ff_event = 0 | ||
- | tcp_port = 0 | ||
- | critical_inverse = 0 | ||
- | warning_inverse = 0 | ||
- | critical_instructions = "Call head of department" | ||
- | warning_instructions = " | ||
- | unknown_instructions = " | ||
- | </ | ||
- | |||
- | 注意すべき点がいくつかあります。 | ||
- | |||
- | * どのフィールドも" | ||
- | * 上記例の// | ||
- | * フィールドの意味や目的がよくわからない場合は、Pandora FMS データベースの tnetwork_component を参照してください。ほとんど同じフィールドがあります。ネットワークコンポーネントを作成する時は、利用するプラグインとデータベースに保存される全ての値を確認しながら作成してみてください。 | ||
- | * **id_module**の値は常に4(これがプラグインモジュールであることを意味します)です。 | ||
- | * **type**はモジュールの種類を指定します。ttipo_moduloテーブルでgeneric_data (1), generic_proc (2), generic_data_string (3), generic_data_inc (4)が定義されています。 | ||
- | * **id_group**はグループ定義を含むtgrupoテーブルのPK(プライマリキー)を設定します。1は" | ||
- | * **id_module_group**の値はtmodule_groupテーブルを参照しており、XXXX。" | ||
- | |||
- | === バージョン2 === | ||
- | Pandora FMS v5.1 SP1 から、サーバプラグインはマクロを利用します。 | ||
- | |||
- | |||
- | <WRAP center round important 60%> | ||
- | これらのプラグインは、**.pspz2** という拡張子で区別されます。 | ||
- | </ | ||
- | |||
- | また、plugin_definition.ini が変更になっています。次のフィールドが追加されました。 | ||
- | |||
- | // | ||
- | * // | ||
- | |||
- | // | ||
- | * // | ||
- | |||
- | そして、それぞれの動的マクロ用の次のような新たなセクションが作られています。 | ||
- | |||
- | < | ||
- | [macro_< | ||
- | hide = 0 | ||
- | description = descripción | ||
- | help = texto de ayuda | ||
- | value = valor | ||
- | </ | ||
- | |||
- | この新たな構造をバージョン2 とします。 | ||
- | |||
- | <WRAP center round tip 60%> | ||
- | // | ||
- | </ | ||
- | |||
- | <WRAP center round tip 60%> | ||
- | 以前のバージョンとの互換性もあります。バージョンパラメータが定義されてなければ、バージョン1 と想定します。 | ||
- | </ | ||
- | |||
- | == バージョン2 のプラグイン定義例 == | ||
- | |||
- | < | ||
- | [plugin_definition] | ||
- | name = PacketLoss | ||
- | filename = packet_loss.sh | ||
- | description = " | ||
- | timeout = 20 | ||
- | ip_opt = | ||
- | execution_command = | ||
- | execution_postcommand = | ||
- | parameters = _field1_ _field2_ | ||
- | user_opt = | ||
- | port_opt = | ||
- | pass_opt = | ||
- | plugin_type = 0 | ||
- | total_modules_provided = 1 | ||
- | total_macros_provided = 2 | ||
- | |||
- | [macro_1] | ||
- | hide = 0 | ||
- | description = Timeout | ||
- | help = Timeout in seconds | ||
- | value = 5 | ||
- | |||
- | [macro_2] | ||
- | hide = 0 | ||
- | description = Target IP | ||
- | help = IP adddress | ||
- | value = 127.0.0.1 | ||
- | |||
- | [module1] | ||
- | name = Packet loss | ||
- | description = " | ||
- | id_group = 15 | ||
- | type = 4 | ||
- | max = 0 | ||
- | min = 0 | ||
- | module_interval = 300 | ||
- | id_module_group = 2 | ||
- | id_modulo = 1 | ||
- | max_timeout = 20 | ||
- | history_data = 1 | ||
- | min_warning = 30 | ||
- | min_critical = 40 | ||
- | min_ff_event = 0 | ||
- | tcp_port = 0 | ||
- | macro_1_value = 5 | ||
- | macro_2_value = localhost | ||
- | unit = % | ||
- | </ | ||
- | |||
- | ===== 古い PSPZ (Pandora バージョン 4) のアップグレード ===== | ||
- | |||
- | サーバプラグインの動的パラメータが無い、パラメータが静的な以前の PSPZ は、新しいバージョンの pandora では動作しません。これを修正する手順は以下にあります。 | ||
- | |||
- | [[: |