Pandora FMS 開発リファレンス

Pandora FMS コードのアーキテクチャ

Pandora FMS データベースの構造に関する詳細については、 Pandora FMS の技術情報 を参照してください。

互換リンクの作成方法

すべてのリンクでは、関数 ui_get_full_url を使用する必要があります。関数を呼び出す前に、functions_ui.php をインクルードする必要があります。

  • 更新に URL が必要な場合、たとえば次のようになります。
$url_refresh = ui_get_full_url();
  • 相対パスに URL が必要な場合、たとえば次のようになります。
$url = ui_get_full_url("/relative/path/file_script.php");
  • javascript の場合。
<?php
  ...
  $url = ui_get_full_url("/relative/path/file_script.php");
  ...
?>
 
<script type="text/javascript">
  ...
  jQuery.post ('<?php $url; ?>',
    {
     ...
    });
 ...
</script>
  • 特別な場合には、この関数を使用する必要はありません。たとえば、index.php への直接リンクなどです。
echo '<form method="post" action="index.php?param=111?param=222?param=333?param=444?param=555?param=666">';

Pandora コンソールの実行開始ポイント

PFMS Web コンソールには少しの実行エントリ ポイントしかありません。例えば、次のような他の Web アプリケーションとは異なります。

  • WordPress には、管理用のフロントエンド エントリ ポイントとバックエンド エントリ ポイントがそれぞれ 1 つずつあります。
  • 小規模の Web 開発では、すべての PHP ファイルがエントリ ポイントになる可能性があります。

インストール

この実行開始ポイントは、Pandora コンソールおよびデータベースのインストール処理のためのものです。インストールが終了したら、Pandora コンソールはセキュリティのためにこのファイルを削除するように求めます。

install.php

通常実行

ブラウザからユーザが利用するコンソールでは、すべての操作がこの実行開始ポイントです。

index.php

AJAX リクエスト

セキュリティの必要性(ユーザの権限チェック)および、構造およびメンテナンスを簡単にするために、すべての AJAX リクエストはこのファイルにアクセスします。実行処理では、このファイルに GETPOST で実際に実行するスクリプトの相対ディレクトリを page パラメータで渡します。

ajax.php

モバイルコンソール

コンピュータのモニタよりもはるかに小さい画面のモバイル端末の場合、Pandora FMS はこれらのデバイス用にコンソールの縮小バージョンを提供し、視覚的にも機能的にも簡素化されています。

mobile/index.php

API

Pandora FMS には API があり、サードパーティのアプリケーションはポート 80 経由のシンプルなチャネルと HTTP/HTTPS プロトコルを使用して対話できます。

このスクリプトの強化は、次の 2 つのパラメータによって行われ、両方が検証されます。

  • 実行中のクライアントの IP アドレスは、PFMS Web コンソールの設定された有効な IP アドレスのリストに含まれているか、同じ場所に保存されている正規表現と一致する。
  • PFMS Web コンソールによって構成された token API がパラメーターとして渡されます。
include/api.php

特別ケース

PFMS Web コンソール内には、エントリポイントに関する特別なケースがいくつかあります。これは通常、メインエントリポイント (ルートの index.php) でログインや一般的な処理が実行されないようにするためです。

Cron タスクの実行

これは、cron から wget コマンドを呼び出すことにより実行されます。また、ログインすることなくタスクを実行することができます。もちろん、マルウェアでの実行を避けるために、タスクのグループで制限されています。

enterprise/extensions/cron/cron.php
ビジュアルコンソールの外部表示

このスクリプトは、ビジュアルコンソールをログインせずに(メニューなしで)全画面表示するものです。ただしハッシュ認証が必要です。ハッシュはそれぞれのビジュアルコンソールで生成します。

operation/visual_console/public_console.php
ネットワークマップコンソールのポップアップ

ネットワークマップのアイテムからエージェント詳細をポップアップウインドウで表示します。これは Pandora コンソールにログインしているユーザのセッション情報を認証に使います。

enterprise/operation/agentes/networkmap_enterprise.popup.php
モジュールグラフのポップアップ

モジュールグラフをポップアップウインドウ表示するものです。そのウインドウの中で表示するグラフを変更するパラメータ設定もできます。これは、Pandora コンソールにログインしているユーザのセッション情報を認証に使います。

operation/agentes/stat_win.php
静的グラフ

データを表示する画像ファイルを生成する PHP スクリプトです。大量のデータがある場合、データはスクリプトにより特定のファイルの保存されます。ファイルは、不正アクセスや DOS アタックを防ぐために、有効期限があります。このスクリプトの実行には、Pandora FMS の認証は不要です。

include/graphs/fgraph.php
レポート

CSV レポート

CSV フォーマットでデータが書かれたテキストファイルを生成するスクリプトです。このスクリプトはログインユーザの認証を利用します。

enterprise/operation/reporting/reporting_viewer_csv.php

PDF レポート

このスクリプトは PDF ファイルを生成します。このスクリプトはログインユーザの認証を利用します。

enterprise/operation/reporting/reporting_viewer_pdf.php
イベント

サウンドイベントポップアップ

このポップアップウインドウは、サウンドイベントを表示するために新たなイベント定期的に確認します。このスクリプトはログインユーザの認証を使います。

operation/events/sound_events.php

CSV イベント

このスクリプトは CSV フォーマットでデータが書かれたテキストファイルを生成します。このスクリプトはログインユーザの認証を使います。

operation/events/export_csv.php

RSS イベント

このスクリプトは RSS フォーマットでイベントをテキストファイルに書き出します。このスクリプトはハッシュ認証を使います。

operation/events/events_rss.php

エージェント、モジュール、グループステータスの基本機能

状態を表す基準と DB での記録

状態は次の通りです。

  • 障害(赤): 1つまたはそれ以上のモジュールが障害状態の場合
  • 警告(黄色): 1つまたはそれ以上のモジュールが警告状態で、障害状態のものが無い場合
  • 不明(グレー): 1つまたはそれ以上のモジュールが不明状態で、障害状態や警告状態のものが無い場合
  • 正常(緑): すべてのモジュールが正常状態の場合

DB 内部の状態を表すレコードは次の通りです。

  • 障害: 1
  • 警告: 2
  • 不明: 3
  • 正常: 0

エージェント

状態関数

これらの関数は、エージェントの状態またはアラートの発生状況でフィルタリングしたモニター数を取得するものです。

すべての関数には、関数をより柔軟にするために追加された filter オプションがあります。フィルター コンテンツは、すべての関数の SQL クエリの末尾に追加されます。フィルターを使用すると、status_tagtag、および module_tag の各テーブルを使用してフィルターを作成するための特定の SQL 句を追加できます。


agents_monitor_critical($id_agent, $filter='')

エージェントの障害状態にあるモジュール数を返します。


agents_monitor_warning ($id_agent, $filter ='')

エージェントの警告状態にあるモジュール数を返します。


agents_monitor_unknown ($id_agent, $filter ='')

エージェントの不明状態のモジュール数を返します。


agents_monitor_ok ($id_agent, $filter ='')

エージェントの正常状態にあるモジュール数を返します。


agents_get_alerts_fired ($id_agent, $filter ='')

エージェントの発報されたアラートの数を返します。

補助関数

これらの関数は、いくつかの場面でエージェントに関連した処理を実行します。


agents_tree_view_alert_img ($alert_fired)

ツリー表示で使用されるアラート画像へのパスを返します。


agetns_tree_view_status_img ($critical, $warning, $unknown)

ツリー表示で使用されるエージェントステータス画像のパスを返します。


グループ

これらの関数は、Pandora に定義されたエージェントグループにもとづいて、エージェントおよびモジュールの状態を返します。

サーバとコンソールの関数は、出力結果が同じになるように同じ sql クエリを利用しなければいけないことに注意してください。

サーバ関数

pandora_group_statistics

この関数は、リアルタイム統計を使用する(Use realtime statistics) パラメータが無効になっている場合にグループ統計を計算します。

コンソール関数

グループ

コンソール関数は、エージェントグループのマトリックスに基づいて統計を計算します。

これらの機能は、無効なエージェントまたはモジュールを使用しません:


groups_agent_unknown ($group_array)

指定されたグループの不明状態にあるエージェント数を返します。


groups_agent_ok ($group_array)

指定されたグループの正常状態のエージェント数を返します。


groups_agent_critical ($group_array)

指定されたグループの障害状態にあるエージェント数を返します。


groups_agent_warning ($group_array)

指定されたグループの警告状態にあるエージェント数を返します。


モジュール

これらの関数はモジュールの統計を計算します。無効なモジュールやエージェントは使用しません:


groups_monitor_not_init ($group_array)

指定されたグループの未初期化状態のモジュール数を返します。


groups_monitor_ok ($group_array)

指定されたグループの正常状態のモジュール数を返します。


groups_monitor_critical ($group_array)

指定されたグループの障害状態のモジュール数を返します。


groups_monitor_warning ($group_array)

指定されたグループの警告状態のモジュール数を返します。


groups_monitor_unknown ($group_array)

指定されたグループの不明状態のモジュール数を返します。


groups_monitor_alerts ($group_array)

指定されたグループのアラートが設定されたモジュール数を返します。


groups_monitor_fired_alerts ($group_array)

指定されたグループの発報されたアラートがあるモジュール数を返します。

モジュール

これらの関数は、モジュール名に基づいて統計を返します。無効なエージェントとモジュールは考慮されません。

modules_agents_unknown ($module_name)

指定された名前のモジュールを持つ不明状態のエージェント数を返します。


modules_agents_ok ($module_name)

指定された名前のモジュールを持つ、正常状態のエージェント数を返します。


modules_agents_critical ($module_name)

指定された名前のモジュールを持つ、障害状態のエージェント数を返します。


modules_agents_warning ($module_name)

指定された名前のモジュールを持つ警告状態のエージェント数を返します。


これらの関数は、モジュール グループをフィルターとして使用して統計情報を返します。無効なエージェントやモジュールは考慮されません。


modules_group_agent_unknown ($module_group)

指定されたモジュールグループに属するモジュールを持つ、不明状態のエージェント数を返します。


modules_group_agent_ok ($module_group)

指定されたモジュールグループに属するモジュールを持つ、正常状態のエージェント数を返します。


modules_group_agent_critical ($module_group)

指定されたモジュールグループに属するモジュールを持つ、障害状態のエージェント数を返します。


modules_group_agent_warning ($module_group)

指定されたモジュールグループに属するモジュールを持つ、警告状態のエージェント数を返します。

ポリシー

これらの関数は、指定された状態とポリシーごとにエージェントの数を返します。無効なエージェントとモジュールは結果の計算に使用されません。

policies_agents_critical ($id_policy)

指定されたポリシーに属する、障害状態のエージェント数を返します。


policies_agents_ok ($id_policy)

指定されたポリシーに属する、正常状態のエージェント数を返します。


policies_agents_unknown ($id_policy)

指定されたポリシーに属する不明状態のエージェント数を返します。


policies_agents_warning ($id_policy)

指定されたポリシーに属する警告状態のエージェント数を返します。

OS

これらの関数は、エージェントが属するオペレーティング システムに基づいてエージェントの統計を計算します。無効なエージェントやモジュールは使用しません。

os_agents_critical ($id_os)

指定されたオペレーティングシステムに属する、障害状態のエージェント数を返します。


os_agents_ok($id_os)

指定されたオペレーティングシステムに属する、正常状態のエージェント数を返します。


os_agents_warning ($id_os)

指定されたオペレーティングシステムに属する警告状態のエージェント数を返します。


os_agents_unknown ($id_os)

指定されたオペレーティングシステムに属する不明状態のエージェント数を返します。

開発

ほとんどの拡張は、サーバプラグイン、Unix エージェントプラグイン、コンソール拡張といったそれぞれの章で説明しています。この章では、Pandora FMS との連携および、Windows エージェントのソースからのコンパイル方法について説明します。

Pandora FMS プロジェクトへの協力

このプロジェクトはボランティア開発者の貢献によって維持されています。新しい開発者、ドキュメント作成者、または協力したい人はいつでも歓迎します。始めるには、メーリングリストや フォーラム を購読するのが良い方法です。

バグ / エラー

考えられるエラーを報告することは、Pandora FMS の改善に役立ちます。バグレポートを送信する前に、バグデータベースを確認してください

メーリングリスト

メーリング リストは、電子メールで最新情報を入手するのに最適な方法です。ユーザーとお知らせ用の公開メーリング リスト (トラフィックは少ない) と、技術的な議論や (場合によっては毎日の) GIT (コード バージョン コントロール システム) 自動通知システム経由の開発通知用の開発メーリング リストがあります。

Windows エージェントのソースからのコンパイル

最新ソースの入手

最新バージョンのコードを入手するには、公式の Pandora FMS リポジトリが公開されているコードリポジトリ GitHub からソースをダウンロードすることが不可欠です。

Pandora FMS API

Pandora FMS 外部 API を使用すると、サードパーティのアプリケーションを Pandora FMS にリンクして、Pandora FMS から情報を取得したり、Pandora FMS 内に情報を取り込んだりすることができます。このドキュメントはすべて Pandora FMS 外部 API にあります。

XML データファイルフォーマット

Pandora FMS の XML データファイルのフォーマットを理解することで、エージェントプラグインの拡張や、独自エージェントの作成、Pandora FMS データサーバへの独自 XML ファイルの送信などができるようになります。

すべての XML ドキュメントど同じように、データファイルは次のような XML の宣言で始まります。

<?xml version='1.0' encoding='UTF-8'?>

次に、エージェントが送るデータを定義する agent_data 要素が来ます。次に示す属性に対応しています。

  • description: エージェントの説明
  • group: エージェントが属するグループ名 (Pandora FMS のデータベースに存在する必要があります)
  • os_name: エージェントで動作している OS 名 (Pandora FMS のデータベースに存在する必要があります)
  • os_version: OS のバージョンを示す任意の文字列
  • interval: エージェントの実行間隔 (秒で)
  • version: エージェントのバージョン文字列
  • timestamp: XML ファイルが生成された日時 (YYYY/MM/DD HH:MM:SS)
  • agent_name: エージェントの名前
  • timezone_offset: 日時に追加する時間の差分(時間単位)。UTC にて動作している場合に便利です。
  • address: エージェントの IP アドレス(または FQDN)
  • parent_agent_name: エージェントの親の名前
  • agent_alias: エージェントの別名
  • agent_mode: エージェントの動作モード(0: 通常モード, 1: 学習モード, 2: 自動無効化モード)
  • secondary_groups: エージェントに追加するセカンダリグループ
  • custom_id: カスタムエージェント ID
  • url_address: エージェントアクセス URL

XML ヘッダの例を見てみましょう。

 <agent_data description= group= os_name='linux' os_version='Ubuntu 10.10' interval='30' version='3.2(Build 101227)' timestamp='2011/04/20 12:24:03' agent_name='foo' timezone_offset='0' parent_agent_name='too' address='192.168.1.51' custom_id='BS4884' url_address='http://mylocalhost:8080'>

そして、モジュールごとに、module という要素が必要です。モジュールの定義のために、次の要素を入れることができます。

  • name: モジュールの名前。
  • description: モジュールの説明。
  • tags: モジュールに関連付けられたタグ。
  • type: モジュールのタイプ。(Pandora FMS のデータベースに存在する必要があります)
  • data: モジュールのデータ。
  • max: モジュールの最大値。
  • min: モジュールの最小値。
  • post_process: データ保存倍率。
  • module_interval: モジュールの実行間隔。(秒間の実行間隔 / エージェントの実行間隔)
  • min_critical: 障害状態となる最小値。
  • max_critical: 障害状態となる最大値。
  • min_warning: 警告状態となる最小値。
  • max_warning: 警告状態となる最大値。
  • disabled: モジュールの無効化(0)、有効化(1)。無効化されているモジュールは処理されません。
  • min_ff_event: 連続抑制回数
  • status: モジュールの状態(正常、警告、障害)。status が設定されている場合は、警告および障害のしきい値は無視されます。
  • datalist: datalist フォーマットでモジュールデータを送信します。(受信した値ごとに 1つのデータベースエントリ) [0/1]
  • unit: モジュールの単位。timeticks 形式のデータを dd/hh/mm/ss に変換する _Timeticks_マクロをサポートします。
  • timestamp: モジュールから受信したデータにタイムスタンプを設定します。
  • module_group: モジュールが追加されるモジュールグループ。
  • custom_id: モジュールカスタム ID。
  • str_warning: 文字列モジュールの警告閾値。
  • str_critical: 文字列モジュールの障害閾値。
  • critical_instructions: モジュール障害時手順。
  • warning_instructions: モジュール警告時手順。
  • unknown_instructions: モジュール不明時手順。
  • critical_inverse: モジュールの障害閾値を反転。[0/1]
  • warning_inverse: モジュールの警告閾値を反転。[0/1]
  • quiet: モジュールの静観モードを有効化。[0/1]
  • module_ff_interval: モジュールの連続障害検知抑制回数の指定。
  • alert_template: モジュールに関連付けるアラートテンプレート。
  • crontab: モジュールの crontab 指定。
  • min_ff_event_normal: 状態が正常に変わる際の連続障害検知抑制回数。
  • min_ff_event_warning: 状態が警告に変わる際の連続障害検知抑制回数。
  • min_ff_event_critical: 状態が障害に変わる際の連続障害検知抑制回数。
  • ff_timeout: 連続障害検知抑制のタイムアウト値。
  • each_ff: 個々の状態ごとの連続障害検知抑制の有効化。
  • module_parent: 同一エージェントでこのモジュールの親となるモジュールの名前。
  • ff_type: 連続障害検知抑制のカウンタ維持の有効化。[0/1]
  • min_warning_forced: モジュールが存在する場合でも、min_warning を新しい指定値に強制し、min_warning よりも優先されます。
  • max_warning_forced: モジュールが存在する場合でも、max_warning を新しい指定値に強制し、max_warning よりも優先されます。
  • min_critical_forced: モジュールが存在する場合でも、min_critical を指定された新しい値に強制し、min_critical よりも優先されます。
  • max_critical_forced: モジュールが存在する場合でも、max_critical を新しく指定された値に強制し、max_critical よりも優先されます。
  • str_warning_forced: モジュールが存在する場合でも、str_warning を新しい指定値に強制し、str_warning よりも優先されます。
  • str_critical_forced: モジュールが存在する場合でも、str_critical を新しい指定値に強制し、str_critical よりも優先されます。

これらのトークンは、データサーバプラグイン のみで動作します。

その他の要素は、モジュールの拡張情報として Pandora FMS データベースに保存されます。モジュールには、少なくとも 1 つの要素 nametypedata が必要です。例:

その他の要素は、モジュールの拡張情報として Pandora FMS のデータベースに保存されます。

  <module>
    <name>CPU</name>
    <description>CPU usage percentage</description>
    <type>generic_data</type>
    <data>21</data>
  </module>

XML データファイルは任意の数のモジュール要素を持つことができます。最後に、agent_data タグをクローズするのを忘れないでください。

アイテムリストによる、複数の XML データを含む特別なケースがあります。これは、文字列タイプの場合にのみ有効です。XML は次のようになります。

<module>
 <type>async_string</type>
 <datalist>
   <data><value><![CDATA[xxxxx]]></value></data>
   <data><value><![CDATA[yyyyy]]></value></data>
   <data><value><![CDATA[zzzzz]]></value></data>
 </datalist>
</module>

タイムスタンプは、それぞれの値ごとに定義できます。

<module>
 <type>async_string</type>
 <datalist>
   <data>
     <value><![CDATA[xxxxx]]></value>
     <timestamp>1970-01-01 00:00:00</timestamp>
   </data>
   <data>
     <value><![CDATA[yyyyy]]></value>
     <timestamp>1970-01-01 00:00:01</timestamp>
   </data>
   <data>
     <value><![CDATA[zzzzz]]></value>
     <timestamp>1970-01-01 00:00:02</timestamp>
   </data>
 </datalist>
 </module>

Pandora FMS ドキュメント一覧に戻る