Pandora: Documentation ja: Inventory

From Pandora FMS Wiki
Jump to: navigation, search

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

1 インベントリ

1.1 概要

Pandora FMS エンタープライズ版では、Pandora でモニタしているサーバのデバイスのインベントリを保持することができます。 インベントリでは、CPU、拡張カード、メモリ、パッチ、ソフトウエアや、サーバ一覧等の情報を保持することができます。

インベントリは、モニタリングとは独立しており、データはローカル (Pandora FMS エージェントを通して) およびリモートから取得することができます。

1.2 インベントリデータ収集

システムインベントリのデータ収集は、インベントリモジュールを通してリモートで行う方法と、WMI クエリを実行したり SSH などを通してスクリプトを実行する Pandora FMS に実装されているスクリプトを通して行う方法の二通りがあります。

Pandora FMS エージェントでデータを収集する場合は、Windows システムの場合、エージェントのプラグインや特別なモジュールを通して実行されます。

1.2.1 インベントリモジュール

インベントリモジュールは、リモートのマシンにコマンドを実行するリモートモジュールです。これらのモジュールは、プラグインと同じように動作します。エージェントを通してデータを取得するローカルモジュールと同じものを定義することができます。

1.2.2 リモートインベントリ

1.2.2.1 リモートモジュールの作成

管理者がリモートインベントリモジュールを作成する必要は通常はありません。Pandora FMS エンタープライズ版では事前に定義されています。しかしながら、Pandora FMS では、独自のインベントリモジュールを作成したり、すでに定義されているものをインベントリモジュールエディタで修正することができます。

リモートモジュールを作成するには、'設定(Configuration)' -> 'インベントリモジュール(Inventory modules)' をクリックします。定義済みの全インベントリモジュールが表示されます。ここには定義済のローカルインベントリモジュールもあることに注意してください。



In1.png



新たなモジュールを作成するには、"作成(Create)" をクリックします。



In2.png



以下に、フィールドを説明します。

名前(Name)

モジュール名を入力するフィールドです。

説明(Description)

モジュールの説明を入力するフィールドです。

OS

モジュールを作成するオペレーティングシステムを選択します。エージェントにインベントリモジュールを追加することによって、エージェントのオペレーティングシステムに合ったモジュールのみが設定されるため、オペレーティングシステムを正しく選択することが重要です。

インタープリタ(Interpreter)

モジュールで使われるコマンドインタープリタを入力するフィールドです。シェルスクリプト、Perl、その他インベントリサーバで実行できるスクリプト言語を利用できます。

フォーマット(Format)

モジュールが返す値を ";" で分割したフィールドを入力します。

コード(Code)

Perl やシェルスクリプトなどのプログラムを設定します。バイナリの実行ファイルの場合、別途それを呼び出すスクリプトが必要です。

モジュールの定義が完了したら、"作成(Create)" をクリックします。



In3.png



1.2.2.2 リモートモジュールの編集

リモートモジュールを編集するには、'設定(Configuration)' および 'インベントリモジュール(Inventory modules)' をクリックします。作成済みの全インベントリモジュールが表示されます。編集したいモジュール名をクリックするか、右のスパナアイコンをクリックします。



In4.png



モジュール作成ページが表示されます。



In5.png



変更したいフィールドを修正し、"更新(Update)" をクリックします。

1.2.2.3 リモートモジュールの削除

リモートモジュールを削除するには、'設定(Configuration)' -> 'インベントリモジュール(Inventory module)' をクリックします。作成済みの全インベントリモジュールが表示されます。削除したいモジュールの右にある、ゴミ箱アイコンをクリックします。



In6.png



1.2.2.4 リモートモジュールの割当

エージェントへのインベントリモジュールの割り当ては、エージェント管理タブから行います。

'リソース(Resources)' および 'エージェント管理(Manage Agent)' で、インベントリモジュールを割り当てたいエージェント名をクリックします。



In7.png



インベントリタブをクリックします。



In8.png



インベントリモジュールを追加する画面になります。



In9.png



インベントリモジュールを追加するのに必要なフィールド設定を以下に説明します。

  • モジュール(Module): 追加したいインベントリモジュールを選択します。エージェントのオペレーティングシステムに合うモジュールのみが表示されます。
  • 対象(Target): インベントリを取得する対象の IP アドレスもしくはホスト名を設定します。
  • 間隔(Interval): インベントリモジュールの実行間隔を設定します。
  • ユーザ名(Username): インベントリモジュールを実行するユーザを設定します。
  • パスワード(Password): インベントリモジュールを実行するユーザのパスワードを設定します。

設定が完了したら、インベントリモジュールを追加するために "追加(Add)" をクリックします。



In10.png



1.2.2.5 割り当てられたインベントリモジュールの編集

インベントリモジュールを編集することもできます。作成と同じ画面で編集することができます。インベントリモジュールを編集するには、モジュール名もしくはスパナアイコンをクリックします。



In20.png



1.2.2.6 割り当てられたインベントリモジュールの削除

インベントリモジュールを削除することもできます。作成と同じ画面で削除することができます。インベントリモジュールを削除するには、モジュール名の右にある赤い x 印をクリックします。

1.2.2.7 リモートインベントリモジュール例

UNIX サーバから物理アドレスの一覧を取得する必要がある場合を想定します。これは、通常 "arp -a -n" コマンドで取得でき、サーバで実行すると次のような出力を得られます。

[email protected]:~$ arp -a -n
? (192.168.70.74) at 08:00:27:39:BF:6F [ether] on eth2
? (192.168.70.162) at B4:74:9F:94:98:84 [ether] on eth2
? (192.168.50.30) at 08:00:27:10:D1:1A [ether] on eth0
? (192.168.70.90) at 98:0C:82:54:2F:DE [ether] on eth2
? (192.168.50.2) at 08:00:27:EA:B2:FF [ether] on eth0
? (192.168.70.135) at C8:60:00:4B:96:67 [ether] on eth2
? (192.168.60.182) at FE:26:C5:91:B1:DA [ether] on tap0


やりたいことは、IP アドレス、MSC アドレス、ネットワークインタフェース名を抽出することです。

これは、フィールドを " "(スペース)で分割して、次のようなシェルスクリプトで実現できます。

arp -a -n | sort | grep -v incomplete | awk '{ print $2,$4,$7 }'


Pandora のリモートインベントリサーバへ、この情報を "インポートする" 必要があるとします。そのためには、"CPU" のリモートインベントリモジュールを元に、それを若干修正します。このスクリプトは、SSH を使って対象のサーバへ接続し、コマンドを実行します。コマンドは、";" 文字で分割して情報を出力します。

ここで、若干スクリプトのプログラミングの知識が必要になります。リモートインベントリスクリプトには、複雑ではありませんが、多少 perl、シェルスクリプト、その他言語の知識が必要です。モジュールから実行され、データ単位ごとに 1行で、かつフィールドを ";" で区切った形式で値を返すのであれば、java や c++ で記述することもできます。

#!/usr/bin/perl
##########################################################################
# pandora_linux_arptable.pl
##########################################################################
# Copyright (c) 2012 Sancho Lerena <[email protected]>
#           (c) 2012 Artica Soluciones Tecnologicas S.L
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; version 2.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
##########################################################################

use strict;
use warnings;

# Check for ssh
my $ssh_client = "ssh";
if (system("$ssh_client -v > /dev/null 2>&1") >> 8 != 255) {
	print "[error] $ssh_client not found.\n";
	exit 1;
}

if ($#ARGV < 1) {
	print "Usage: $0 <target ip> <username>\n";
	exit 1;
}

my $target_ip = $ARGV[0];
my $username = $ARGV[1];

# Retrieve ARP table
my ($ip, $mac, $iface);
my $command = '/usr/sbin/arp -a -n | sort | grep -v incomplete | awk \'{ print \$2,\$4,\$7 }\'';

my @info = `$ssh_client $username\@$target_ip "$command" 2> /dev/null`;
foreach my $line (@info) {
	if ($line =~ /^(.+)\s(.+)\s(.+)/) {
		$ip = $1;
		$mac = $2;
		$iface = $3;
		print "$ip;$mac;$iface\n";
	} 
}
 
exit 0;


SSH 接続を自動実行できるようにするためには、対象のサーバに pandora サーバの root ユーザの公開鍵をコピーする必要があります。このコマンドを 192.168.50.10 のサーバで実行することを想定した場合、次のようになります。

1. pandora サーバで root にて鍵を生成します。

ssh-keygen


2. ssh-copy-id コマンドを使って、公開鍵を対象のサーバ(192.168.50.10)の対象ユーザ(例では artica)へコピーします。

ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]


([email protected]、一度 "artica" ユーザのパスワードを入力する必要があります。)

3. 接続を試します。パスワードを聞かれずに接続できる必要があります。

ssh [email protected]


4. 処理が成功したら、インベントリモジュールが実行するのと同じ処理をコマンドラインから実行してみます。前述のスクリプト(temporal.pl)を IP アドレスとユーザをパラメータに指定して実行します。

perl temporal.pl 192.168.50.10 artica
(192.168.50.1);00:0f:ea:27:ba:f0;eth0
(192.168.50.3);08:00:27:98:f8:48;eth0


スクリプトは、リモートで /usr/sbin/arp を実行していることに注意してください。コマンドが指定のパスにある必要があります。パスが違う場合はスクリプトを修正します。また、スクリプトは "perl" から呼び出します。通常は、/usr/bin/perl です。モジュール定義はつぎのようになります。



Inventory sample1 .png




これをエージェントに適用する場合は、OS が同じであるか確認することに注意が必要です。異なる OS の場合は、同一のコードは動かないため、それぞれに異なるモジュールを作成する必要があります。



Inventory sample2 .png



モジュールが実行されると、次のように表示されます。



800



1.2.3 ソフトウエアエージェントによるローカルインベントリ

ソフトウエアエージェントを通してインベントリデータを取得することができます。ソフトウエアエージェントの設定に、必要なインベントリモジュールを適用すれば良いだけです。リモートモジュールと同様に、これらのモジュールは、システム管理メニューの モジュール管理(Manage modules) -> インベントリモジュール(Inventory modules) でインベントリモジュールとして追加する必要があります。

1.2.3.1 ローカルモジュールの作成

ローカルモジュールを作成するには、システム管理メニューの モジュール管理(Manage modules) -> インベントリモジュール(Inventory modules) へ行きます。作成済みの全インベントリモジュールが表示されます。エージェントで定義されている全てのモジュールを作成する必要があります。



In22.png



新たなモジュールを作成するには、"作成(Create)" をクリックします。



In23.png



ローカルモジュールでは、全てのフィールドに入力する必要はありません。以下に入力すべきフィールドの説明をします。

  • 名前(Name): モジュール名を入力します。
  • 説明(Description): モジュールの説明を入力します。
  • OS: 作成したモジュールのオペレーティングシステムを選択します。ローカルモジュールでは、"Agent" を選択する必要があります。
  • フォーマット(Format): モジュールが返す値を ; で区切ったフィールドを設定します。

設定が完了したら、"作成(Create)" をクリックします。



In24.png



1.2.3.2 ソフトウエアエージェントによる Windows のインベントリモジュール

Windows のソフトウエアエージェントのモジュールは、マシンのソフトウエアおよびハードウエア情報を取得するためにローカルで定義された WMI を利用します。

モジュールの書式は次の通りです。

In25.png

Windows システムでインベントリモジュールを追加するために必要な全フィールドについての説明を以下に示します。

module_begin

ソフトウエアエージェントのモジュールの開始を示します。

module name Inventory

モジュール名を設定するフィールドです。この例では、"Inventory" としています。

module_interval 3

モジュールの実行間隔 (日単位) を指定します。どの間隔 (日単位) でモジュールを実行するかを設定します。この例では 3日です。module_inventory_interval ではなく、module_interval であることに注意してください。値が 0 の場合、エージェントの実行時に情報が送信されます。

module_type generic_data_string

Pandora FMS でのデータの種類を定義します。インベントリモジュールのデータタイプは、

“generic_data_string”です。

module_inventory CDROM Patches Software

収集したいインベントリの対象を定義するフィールドです。この例では、CDROM とパッチ、ソフトウエア情報を収集します。このフィールドで、収集したいインベントリの対象をパラメータとして定義します。対象を追加するには、モジュールにインベントリの名前を追加するだけで良いです。次の対象を収集することができます。

  • CPU: CPU の情報を取得します。
  • RAM: メモリモジュールの情報を取得します。
  • CDROM:CDROM ドライブの情報を取得します。
  • Video:ビデオカードの情報を取得します。
  • Hds:ハードディスクドライブの情報を取得します。
  • Patches:インストールされているパッチ情報を取得します。
  • Software:インストールされているソフトウエア情報を取得します。
  • Services:マシンにインストールされているサービス (実行中かどうかに関わらず) の情報を取得します。
  • NIC: ネットワークインタフェースコントローラの情報を取得します。

module_description Inventory

モジュールの説明を定義するフィールドです。この例では Inventory です。

module_end

ソフトウエアエージェントのモジュール定義の終わりを示します。 インベントリモジュールを有効にするには、上記の設定をソフトウエアエージェントの pandora_agent.conf に書くだけです。この設定はローカルもしくはエージェントのリモート設定で行えます。

In26.png

1.2.3.3 ソフトウエアエージェントによる UNIX のインベントリモジュール

Unix のソフトウエアエージェントのモジュールは、マシンのソフトウエアおよびハードウエア情報を取得するためにローカルで定義されたプラグインを利用します。

モジュールの書式は次の通りです。

In27.png

モジュールは、次のパラメータを一行で設定します。

  • モジュールの有効化

In28.png

  • モジュールの実行間隔 (日単位) の設定。値が 0 の場合は、エージェントの実行時にインベントリ情報が送信されます。

In29.png

  • 収集するインベントリの対象の設定

In30.png

Windows エージェントと同様に、次の対象を設定できます。

  • CPU: CPU の情報を取得します。
  • cdrom: CDROM ドライブの情報を取得します。
  • video: ビデオカードの情報を取得します。
  • hd: ハードディスクドライブの情報を取得します。
  • nic:ネットワークインタフェースカードの情報を取得します。
  • Patches: インストールされているパッチ情報を取得します。
  • software: インストールされているソフトウエア情報を取得します。
  • process: モジュール実行時点のサーバで動作しているプロセスを取得します。
  • ram: メモリモジュールの情報を取得します。
  • filesystem: システムパーティション情報を取得します。
  • users: ユーザ情報を取得します。
  • init_services: initサービスの情報を取得します。

インベントリ情報を収集するプラグインは、/etc/pandora/plugins にあります。

In31.png

インベントリモジュールを有効化するには、上記の設定をソフトウエアエージェントの pandora_agent.conf に記述するだけです。この設定はローカルもしくはエージェントのリモート設定で行えます。

In32.png

1.2.3.4 ローカルモジュールの割当

エージェントで定義したモジュールはコンソールで有効化する必要はありません。'設定(Configuration)' -> 'インベントリモジュール(Inventory modules)' をクリックしてモジュールが作成され、ソフトウエアエージェントに設定されれば、コンソール上のエージェントに現れます。



In33.png



1.2.3.5 ローカルインベントリモジュールの作成(エージェントでの実行)

エージェントに "デフォルトで" 備わっているインベントリシステムでは、Unix および Windows のシステムでインベントリモジュールを簡単に作成することができます(リモートモジュールよりも簡単です)。次の構造の XML を生成するスクリプトを作成します。

<inventory>
<inventory_module>
<name>INVENTORY_MODULE_NAME</name>
<type>generic_data_string</type>
<datalist>
    <data>DATA1;DATA2;DATA3....</data>
</datalist>
</inventory_module>
</inventory>

ここで、"INVENTORY_MODULE_NAME" には、pandora で設定したモジュール名と同じものを記載します。また、DATA1;DATA2... には、取得したいデータを記載します。

ARP テーブル、IPアドレス、ネットワークインタフェース名を取得したいと仮定します(前掲のリモートインベントリモジュールの例も参照ください)。これは、基本的に arp -a の出力結果で、若干修正を加えています。

ここでは、Windows で実現することを考えます。小さなスクリプトが必要で、次のようなものを "C:\tmp\windows_arp_inventory.bat" として保存します。

@echo off
echo ^<inventory^>
echo ^<inventory_module^>
echo ^<name^>ARP_Table^</name^>
echo ^<type^>generic_data_string^</type^>
echo ^<datalist^>
arp -a | sort | grep "[0-9]"  | grep -v ":" | gawk "{ print \"^<data^>\" $1\";\"$2\";\"$3 \"^</data^>\" }"
echo ^</datalist^>
echo ^</inventory_module^>
echo ^</inventory^>

ここで、pandora_agent.conf を修正し、次の行を加える必要があります。

module_plugin cmd.exe /C C:\tmp\windows_arp_inventory.bat

Template warning.png

このスクリプトは、5分ごとに実行されます(デフォルトのエージェント実行間隔)。任意の X 単位時間ごとに実行したい場合は、そのロジックをスクリプト内に実装する必要があります。

 


pandora エージェントを再起動する前に、情報を取得できるように Pandora にインベントリモジュールを作成しておく必要があることを忘れないようにしてください。



Inventory sample4 .png



これは、ローカルモジュールとして動作することに注意してください。"インタープリター(Interpreter)"および、"コード(Code)" フィールドには何も入力せず、OS フィールドを指定しています。

結果として、Linux でのリモートモジュールと同じように、情報を取得できます。



Inventory sample5 .png



Pandora のオンラインのモジュールライブラリ(http://pandorafms.com) には、リモートおよびローカルの多くのインベントリモジュールがあります。この章で説明したように、それぞれ具体的に利用できるものです。

1.3 インベントリのデータ表示

ローカルまたはリモートでシステムから収集されたインベントリデータは、エージェントもしくはコンソールのインベントリメニューから参照することができます。

1.3.1 エージェント内でのインベントリデータ表示

エージェントから収集したインベントリデータを参照するには、エージェント参照画面でインベントリタブをクリックします。

In34.png

インベントリや検索を使って情報をフィルタリングすることができます。バージョン 4.0.x からは、検索はカスタムフィールドを含みます。そのため、特定のソフトウエアのバージョンの検索などとても便利です。



Inventory search 403.png



1.3.2 インベントリメニューでのインベントリデータ表示

'モニタリング(Monitoring)' -> 'インベントリ(Inventory)' をクリックすると、全エージェントのインベントリデータの参照や検索、CSV へのエクスポートを行うことができます。



In37.png



検索に使えるフィールドは次の通りです。

  • グループ(Group): フィルタを通したいエージェントのグループを選択します。
  • モジュール(Module): フィルタを通したいインベントリモジュールを選択します。
  • エージェント(Agent): フィルタを通したいエージェント名を入力します。
  • 検索(Search): 全インベントリフィールドを検索する文字列を指定できます。

検索オプションで全てを選択して "検索(Search)" をクリックすると、インベントリがある全エージェントのモジュールを見ることができます。



In38.png



インベントリがある全エージェントの特定モジュールを見たい場合は、モジュールを選択し "検索(Search)" をクリックします。



In39.png



1.3.3 インベントリデータの CSV エクスポート

'モニタリング(Monitoring)' および 'インベントリ(Inventory)' をクリックすると、フィルタリングしたあとのインベントリデータを CSV ファイルへエクスポートすることができます。

フィルタを選択し、"CSV へのエクスポート(Export CSV)" をクリックします。



In40.png



セミコロンで分割されたインベントリデータが書かれたファイルが生成されます。

1.3.4 差分表示とブロックモード

Pandora FMS バージョン 5.1 から、インベントリ情報は差分が解りやすいように 2つのカラムで表示できるようになりました。これは、リモートインベントリモジュールで "ブロックモード(block mode)' を有効にして使っている場合に利用できます。このモードは、モジュールの全情報を、サーバのパッケージのように個別に一覧するのではなく、ひとかたまりでレポートするのに利用します。一行一エントリーで処理するのではなく、全体レポートを一つとして処理します。

この章で利用するプラグインは、公式モジュールライブラリ[1]からダウンロードできます。

インベントリモジュールのブロックモードは、リモートインベントリモジュールを定義した時に設定されます。



Block mode setup.png



この機能にアクセスするには、次の画像のアイコンをクリックします。差分表示ができない他のインベントリモジュールでは、このモードはありません。差分表示が可能なモジュールでのみ有効です。



Diff inventory.png



2カラム表示では、あるインベントリのバージョンと他のバージョンの差分を表示します。日付を設定することもできます。



Pandora FMS - the Flexible Monitoring System - 2014-07-01 19.09.10.png



インベントリモジュールは変更発生ごとにそれを検出しイベントを発生させます。ブロックモードでは、大きな差分になるため変更内容はイベントには含まれないことに注意してください。