Difference between revisions of "Pandora: Documentation ja: Inventory"

From Pandora FMS Wiki
Jump to: navigation, search
 
(割り当てられたインベントリモジュールの削除)
Line 141: Line 141:
  
 
インベントリモジュールを削除することもできます。作成と同じ画面で削除することができます。インベントリモジュールを削除するには、モジュール名の右にある赤い x 印をクリックします。
 
インベントリモジュールを削除することもできます。作成と同じ画面で削除することができます。インベントリモジュールを削除するには、モジュール名の右にある赤い x 印をクリックします。
 +
 +
==== リモートインベントリモジュール例====
 +
 +
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++ で記述することもできます。
 +
 +
<pre>
 +
#!/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;
 +
</pre>
 +
 +
 +
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. 接続を試します。パスワードを聞かれずに接続できる必要があります。
 +
 +
 +
 +
 +
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 です。モジュール定義はつぎのようになります。
 +
 +
<br><br>
 +
<center>
 +
[[Image:Inventory_sample1_.png|660px]]
 +
</center>
 +
<br><br>
 +
 +
 +
これをエージェントに適用する場合は、OS が同じであるか確認することに注意が必要です。異なる OS の場合は、同一のコードは動かないため、それぞれに異なるモジュールを作成する必要があります。
 +
 +
<br><br>
 +
<center>
 +
[[Image:Inventory_sample2_.png|460px]]
 +
</center>
 +
<br><br>
 +
 +
 +
モジュールが実行されると、次のように表示されます。
 +
 +
<br><br>
 +
<center>
 +
[[Image:Inventory_sample3_.png]]
 +
</center>
 +
<br><br>
  
 
=== ソフトウエアエージェントによるローカルインベントリ ===
 
=== ソフトウエアエージェントによるローカルインベントリ ===

Revision as of 09:53, 20 December 2012

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 では、独自のインベントリモジュールを作成したり、すでに定義されているものをインベントリモジュールエディタで修正することができます。

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

In1.png

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

In2.png

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

名前(Name)

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

説明(Description)

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

OS

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

インタープリタ(Interpreter)

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

フォーマット(Format)

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

コード(Code)

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

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

In3.png

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

リモートモジュールを編集するには、システム管理メニューの モジュール管理(Manage modules) -> インベントリモジュール(Inventory modules) へ行きます。作成済みの全インベントリモジュールが表示されます。編集したいモジュール名をクリックするか、右のスパナアイコンをクリックします。

In4.png

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

In5.png

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

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

リモートモジュールを削除するには、システム管理メニューの モジュール管理(Manage modules) -> インベントリモジュール(Inventory module) へ行きます。作成済みの全インベントリモジュールが表示されます。削除したいモジュールの右にある、赤い x 印をクリックします。

In6.png

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

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

システム管理メニューの エージェント管理(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]


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




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



Inventory sample3 .png



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 ローカルモジュールの割当

エージェントで定義したモジュールはコンソールで有効化する必要はありません。システム管理メニューの モジュール管理(Manage Modules) -> インベントリモジュール(Inventory modules) でモジュールが作成され、ソフトウエアエージェントに設定されれば、コンソール上のエージェントに現れます。

In33.png

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

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

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

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

In34.png

インベントリや検索を使って情報をフィルタリングすることができます。

モジュールで検索するには、モジュールを選択し "検索(Search)" をクリックします。

任意の文字列で検索するには、検索文字列を入力し、"検索(Search)" をクリックします。

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

操作メニューの インベントリ(Inventory) で、全エージェントのインベントリデータの参照や検索、CSV へのエクスポートを行うことができます。

In37.png

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

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

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

In38.png

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

In39.png

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

操作メニューの インベントリ(Inventory) では、フィルタリングしたあとのインベントリデータを CSV ファイルへエクスポートすることができます。

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

In40.png

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