Pandora: Documentation ja: Inventory

From Pandora FMS Wiki
Revision as of 00:39, 4 January 2020 by Junichi (talk | contribs) (インベントリメニューでのインベントリデータ表示)
Jump to: navigation, search

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

1 インベントリ

1.1 概要

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

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

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

システムインベントリのデータ収集には、次の 2つの方法があります。

インベントリモジュールを介して、Pandora FMS に統合されたスクリプトで、リモートから WMI クエリを実行したり、または 'Expect' または同様の方法で SSH を実行する方法。

エージェントプラグインを介してローカルで Pandora FMS エージェントを利用する方法。

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

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

ユーザおよびパスワードでは、以下のマクロが利用できます。

  • _agentcustomfield_n_: n番のエージェントカスタムフィールド

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

Template warning.png

インベントリモジュールをエージェントに追加すると、モジュールのオペレーティングシステムとエージェントのオペレーティングシステムが一致するもののみが表示されるため、オペレーティングシステムを正しく選択することが非常に重要です。

 


モジュールの定義が完了したら、"作成(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 リモートモジュールの割当

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

"インベントリ(Inventory)" タブをクリックします。

In8.png

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

In9.png

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

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

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

In10.png

バージョン 7.0NG 724 以降では、通常存在するユーザーフィールドとパスワードフィールドの代わりのフィールドを定義することができます。それには、次のチェックボックスを有効化します。

Custom fields checkbox.png

その後、新たなフィールドを追加する画面が表示されます。

Inventory module new custom field.png

ここで、好みの名前を入力します。フィールドがパスワードであると設定した場合は、その値は難読化された方法でデータベースに保存されます。

フィールドを作成したら、値の設定とモジュールへの追加ができます。これらのフィールドは、リモートインベントリスクリプトの実行時に作成順に適用されます。

Inventory module with custom fields.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]


(対象のユーザに公開鍵をインストールするために、一度 "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 ローカルモジュールの作成

ローカルモジュールを作成するには、'設定(Configuration)' > 'インベントリモジュール(Inventory modules)' へ行きます。作成済みの全インベントリモジュールが表示されます。エージェント設定内で定義されるすべてのモジュールを作成します。 コンソール上でエージェントに割り当てられた OS は、作成されたモジュールの OS と一致する必要があります。



In22.png



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



In23.png



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

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

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



In24.png



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

ソフトウェアエージェントでローカルインベントリを設定する方法を以下に示します。

1. スクリプトコレクションを展開します。(Pandora FMS ライブラリ http://pandorafms.com/Library/Library/ からダウンロードします)

Info.png

バージョン 7 以降では、これらのプラグインは、デフォルトでエージェントインストール時に入りますが、設定ファイルでコメントアウトされています。

 


2. ローカルインベントリ用スクリプトを構成し、pandora_agent.conf ファイルの最後に設定を追加します。

Info.png

バージョン 7 以降では、追加する必要はありません。エージェント設定ファイルのプラグイン実行のコメントを外すだけです。

 


#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\cpuinfo.vbs"
#module_crontab * 12-15 * * 1
#module_end

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\moboinfo.vbs"
#module_crontab * 12-15 * * 1
#module_end

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\diskdrives.vbs"
#module_crontab * 12-15 * * 1
#module_end

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\cdromdrives.vbs"
#module_crontab * 12-15 * * 1
#module_end

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\videocardinfo.vbs"
#module_crontab * 12-15 * * 1
#module_end

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\ifaces.vbs"
#module_crontab * 12-15 * * 1
#module_end

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\monitors.vbs"
#module_crontab * 12-15 * * 1
#module_end

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\printers.vbs"
#module_crontab * 12-15 * * 1
#module_end

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\raminfo.vbs"
#module_crontab * 12-15 * * 1
#module_end

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\software_installed.vbs"
#module_crontab * 12-15 * * 1
#module_end

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\userslogged.vbs"
#module_crontab * 12-15 * * 1
#module_end

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\productkey.vbs"
#module_crontab * 12-15 * * 1
#module_end

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\productID.vbs"
#module_crontab * 12-15 * * 1
#module_end


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

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

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

module_plugin inventory 1 cpu ram video nic hd cdrom software init_services filesystem users route

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

  • モジュールの有効化
" module_plugin inventory " 1 cpu ram video nic hd cdrom software init_services filesystem users route
  • モジュールの実行間隔 (日単位) の設定。値が 0 の場合は、エージェントの実行時にインベントリ情報が送信されます。
module_plugin inventory " 1 " cpu ram video nic hd cdrom software init_services filesystem users route
  • 収集するインベントリの対象の設定
module_plugin inventory 1 " cpu ram video nic hd cdrom software init_services filesystem users route "

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

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

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

利用可能なすべての情報を収集するためのプラグインを設定することも可能です。この例では、プラグインは、インベントリのすべての日々の情報を取得します。

# Plugin for inventory on the agent (Only Enterprise)
module_plugin inventory 1

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

In32.png

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

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



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 単位時間ごとに実行したい場合は、そのロジックをスクリプト内に実装するか、指定時間モニタリング を利用する必要があります。

 


ローカルスクリプトの実行でインベントリ情報を保存するには、コンソールに定義されたインベントリモジュールがあり、OS、モジュール名、および保存するデータを ";" で区切って指定する必要があります。 Pandora FMS エージェントを再起動する前に、Pandora FMS でインベントリモジュールを作成して、変更を継承することを忘れないでください。

Inventory sample4 .png

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

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



Inventory sample5 .png



Pandora FMS モジュールライブラリ には、リモートおよびローカルの多くのインベントリモジュールがあります。また、この章で示したように、自分でも簡単に開発することができます。

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

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

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

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

In37.png

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

  • グループ(Group): フィルタしたいエージェントグループを選択します。
  • モジュール(Module): フィルタしたいインベントリモジュールを選択します。
  • エージェント(Agent): フィルタしたいエージェント名を入力します。
  • 検索(Search): すべてのインベントリフィールドで検索したいテキストを入力します。

検索オプション内で 'すべて' を選択し、'検索' をクリックすることにより、インベントリ情報があるすべてのモジュールエージェントを表示することもできます。

In38.png

または、モジュールを選択して '検索' をクリックすることにより、インベントリを持つすべてのエージェントの特定のモジュールを表示できます。

In39.png

1.3.2 インベントリの日付変更

インベントリエージェントの詳細表示では、選択メニューから特定のインベントリレポートの日付を選択できます。

Vista inventario diff.png

日付が欠落している場合は、最後のインベントリ実行に関するデータの変更が原因である可能性があります。Pandora FMS は、前回の実行と比較して変更があった場合にのみインベントリデータを保存しているためです。

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



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