目次

Pandora FMS 開発リファレンス

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

Pandora FMS の開発

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

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

互換リンクの作成方法

すべてのリンクでは、ui_get_full_url 関数を利用する必要があります。

$url_refresh = ui_get_full_url();

旧手法

$url = $config['homeurl'] . "/relative/path/file_script.php";

新手法

$url = ui_get_full_url("/relative/path/file_script.php");

旧手法

<?php
...
$url = $config['homeurl'] . "/relative/path/file_script.php";
...
?>
<script type="text/javascript>
...
jQuery.post ('<?php $url; ?>',
 {
 ...
 });
 ...
</script>

新手法

<?php
...
$url = ui_get_full_url("/relative/path/file_script.php");
...
?>
<script type="text/javascript>
...
jQuery.post ('<?php $url; ?>',
 {
 ...
 });
 ...
</script>
echo '<form method="post" action="index.php?param=111&param=222&param=333&param=444&param=555&param=666">';

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

Pandora コンソールのウェブアプリケーション実行開始ポイントは非常に少ないです。

例えば Wordpress などの他のウェブアプリケーションは、フロントエンドやバックエンドで一つの開始ポイントになっています。また、PyMEs などは通常それぞれの php ファイルが実行開始ポイントになっています。

インストール

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

install.php
通常実行

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

index.php
AJAX リクエスト

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

ajax.php
モバイルコンソール

For mobile terminals that have a significantly smaller screen than a computer monitor, Pandora FMS offers a reduced version of the console for these devices, reduced both in visually and simplified functionality wise.

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

mobile/index.php

API

Pandora FMS 3.1 から、80番ポートの HTTP プロトコルを使って Pandora FMS を他のアプリケーションから操作できる ASI を備えています。

このスクリプトのセキュリティは次の 3つから成ります。

include/api.php
特別ケース

Pandora コンソールでは、実行開始ポイントについていくつかの特別ケースがあります。それは、メインの開始ポイント(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 の認証は不要です。

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

スクリーンセーバ

このウインドウは、Pandora の新たなイベントをスクリーンセーバ形式で表示します。認証には API パスワードを利用します。

operation/events/events_marquee.php

RSS イベント

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

operation/events/events_rss.php

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

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

状態は次の通りです。

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

エージェント

状態関数

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

すべての関数には、より柔軟に利用できるように filter パラメータが追加されています。すべての関数におけるフィルタの内容は、sql クエリの最後に追加されます。このフィルタで、tagente_estado, tagente, tagente_modulo テーブルを使ったフィルタをするために、いくつかの特別な sql 問い合わせを追加することができます。

補助関数

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

グループ

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

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

サーバ関数
コンソール関数

コンソール関数は、エージェントグループの構造に基づいて状態を計算します。これらの関数は、無効化されたエージェントやモジュールは返しません。

これらの関数はモジュールの状態を計算します。無効化されたモジュールやエージェントには使えません。

モジュール

これらの関数は、モジュール名をもとにした情報を返します。無効化したエージェントやモジュールには使えません。

これらの関すは、モジュールグループみ基づいた状態を返します。無効化したエージェントやモジュールには使えません。

ポリシー

これらの関数は、指定したポリシーのそれぞれの状態にあるエージェント数を返します。無効化したエージェントやモジュールには使えません。

OS

これらの関数は、OS に基づいたエージェントの状態を返します。無効化したエージェントやモジュールには使えません。

開発

ほとんどの拡張は、サーバプラグイン、Unix エージェントプラグイン、コンソール拡張といったそれぞれの章で説明しています。この章では、Pandora FMS との連携および、Windows エージェントのソースからのコンパイル方法について説明します。今後も、特定の章に属さない開発に関わる内容については、この章に記載していきます。

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

このプロジェクトは、プロジェクトを支えるボランティアの開発者によって成り立っています。新たな開発者、ドキュメント作成者や、その他協力したいと考えている方は、常に歓迎です。まず最初は、メーリングリストやフォーラムに参加いただくのが良いです。

バグ / エラー

不具合報告は、Pandora FMS の拡張の助けになります。なお、不具合報告を送信する前に、我々の不具合に関するデータベースを確認し、同様の報告がすでにあがっていないかを確認してください。不具合報告は、我々のプロジェクトページ http://sourceforge.net/projects/pandora/ から、Sourceforge のバグトラッキングシステムを使って送信することができます。

メーリングリスト

メーリングリストは、簡単に最新情報をメールで受け取るには良い手段です。ユーザ向けのお知らせを送信する public メーリングリスト (流量は少ないです) と、技術的な議論を行う develop メーリングリストを用意しています。また、SVN システムから自動的に通知される変更情報を受け取るためのメーリングリスト (ほぼ毎日) があります。

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

最新ソースの入手

我々のリポジトリから最新のソースを入手するには、Subversion クライアントが必要です。そして、次のように実行します。

svn co https://svn.sourceforge.net/svnroot/pandora pandora

Windows

ソースからビルドするには、MinGW tools を含む最新の Dev-Cpp IDE 版が必要です。こちらからダウンロードできます。

PandoraAgent.dev を Dev-Cpp で開き、プロジェクトを作成します。デフォルトのインストールですべてコンパイル可能です。

ソースからのビルドで問題を見つけた場合は、メール (ramon.novoa@artica.es) もしくは SourceForge 上のプロジェクトページ にてお知らせください。

Linux でのクロスコンパイル

Linux で Pandora FMS Windows エージェントをクロスコンパイルするには、次のようにします。

Linux への MinGW のインストール

Ubuntu/Debian の場合:

sudo aptitude install mingw32

SUSE または RPM 管理の環境の場合 (手動での Zypper の利用) は、以下の RUL より:

http://download.opensuse.org/repositories/CrossToolchain:/mingw/openSUSE_11.1/
エージェントに必要な追加ライブラリのインストール

例えば、Openssl パッケージをインストールするには次のようにします。

http://sourceforge.net/projects/devpaks/files/ へ行き、ファイルをダウンロードします。

openssl-0.9.8e-1cm.DevPak

openssl-0.9.8e-1cm.DevPak を展開します。

tar jxvf openssl-0.9.8e-1cm.DevPak

ライブラリおよびインクルードファイルを MinGW のあるクロスコンパイル環境にコピーします。

 cp lib/*.a /usr/i586-mingw32msvc/lib/
 cp -r include/* /usr/i586-mingw32msvc/include/

依存関係やライブラリの問題は、ご自身で解決する必要があります。 これらを簡単にできるように、Pandora FMS の公式ダウンロードサイトに必要なライブラリとインクルードファイルを tar で固めたファイルを mingw_pandorawin32_libraries_9Oct2009.tar.gz という名前で置いてあります。

コンパイルおよびリンク

コンパイラおよび、インクルードファイル、ライブラリのインストール後、Pandora FMS エージェントのソースディレクトリへ行き、以下を実行します。

./configure --host=i586-mingw32msvc && make

これで、実行可能な .exe ファイルが生成されます。

外部 API

Pandora FMS には、他のアプリケーションとの連携をとり、Pandora FMS から情報を取得したり Pandora FMS に情報を提供するための外部 API があります。これに関するドキュメントは、補足資料の Pandora FMS 外部 API にあります。

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

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

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

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

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

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 という要素が必要です。モジュールの定義のために、次の要素を入れることができます。

Pandora FMS バージョン 749 から、しきい値を強制するための新たなトークンが追加されました。

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

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

モジュールは、少なくとも name, type, および data の要素を持たなければいけません。

例:

  <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>

さらに、使用量の単位と閾値の定義を含んだ例を見てみましょう。

<module>
	<name><![CDATA[Cache mem free]]></name>
	<description><![CDATA[Free cache memory in MB]]></description>
        <tags>tag</tags>
	<type>generic_data</type>
	<module_interval>1</module_interval>
	<min_critical>100</min_critical>
	<max_critical>499</max_critical>
	<min_warning>500</min_warning>
	<max_warning>600</max_warning>
	<unit><![CDATA[MB]]></unit>
	<data><![CDATA[3866]]></data>
</module>

<module>
	<name><![CDATA[Load Average]]></name>
	<description><![CDATA[Average process in CPU (Last minute) ]]></description>
        <tags>tag</tags>
	<type>generic_data</type>
	<module_interval>1</module_interval>
	<data><![CDATA[1.89]]></data>
</module>