ローレベルディスカバリにより、コンピューター上の種々の要素に対してアイテム、トリガー、グラフを自動的に作成できます。例えば、Zabbixは使用しているマシン上のファイルシステムまたはネットワークインターフェースの監視を自動的に開始できます。そのために、各ファイルシステムまたはネットワークインターフェースに対して手動でアイテムを作成する必要はありません。さらに、定期的に実施されるディスカバリの実際の結果に基づいて不要な要素を自動的に削除するように、Zabbixを設定することができます。
Zabbixでは、次の3つのタイプのアイテムディスカバリがサポートされており、すぐに利用できます。
ユーザーは、特定のJSONプロトコルに従うという条件で、独自のタイプのディスカバリを定義できます。
ディスカバリプロセスの一般的なアーキテクチャーは、次のとおりです。
最初に、[設定]→[テンプレート]→[ディスカバリ]列を選択し、ディスカバリルールを作成します。1つのディスカバリルールは、(1)必要な要素(例えば、ファイルシステムまたはネットワークインターフェース)を発見するアイテムと(2)そのアイテムの値に基づいて作成される必要があるアイテム、トリガー、グラフのプロトタイプで構成されています。
必要な要素を検出するアイテムは、他の場所で見られる普通のアイテムと同様です。サーバはZabbixエージェント(または、設定されているいずれかのアイテムタイプ)に対してそのアイテムの値を問い合わせ、エージェントはテキストの値で返答します。違いは、エージェントが返答したその値には、検出された要素のリストが特定のJSON形式で含まれているということです。この形式の詳細は、カスタムディスカバリチェックの実装者にしか重要ではありませんが、戻り値にはマクロ→値のペアのリストが含まれていることを知る必要があります。例えば、アイテム「net.if.discovery」は、「{#IFNAME}」→「lo」と「{#IFNAME}」→「eth0」という2つのペアを返すことがあります。
ローレベルディスカバリアイテムvfs.fs.discovery、net.if.discoveryは、Zabbixエージェントのバージョン2.0からサポートされています。
Zabbixプロキシでは、ローレベルディスカバリルールの戻り値は、Oracle DBでは4000文字、IBM DB2では2048文字に制限されています。
これらのマクロは、検出された各要素に対して実際のアイテム、トリガー、グラフを作成する際の基盤となり、名前、キー、その他のプロトタイプフィールドで使用されます。これらのマクロは、以下の場所で使用可能です。
サーバが、ディスカバリアイテムについて値を受信するとき、マクロ→値のペアを調べて、各ペアについて、実際のアイテム、トリガー、グラフをそれらのプロトタイプに基づいて生成します。上記の「net.if.discovery」の例では、サーバは、ループバックインターフェース「lo」に対してアイテム、トリガー、グラフ一式を生成し、インターフェース「eth0」に対して別の一式を生成します。
以降のセクションでは、上記のプロセスを詳しく説明し、ファイルシステム、ネットワークインターフェース、SNMP OIDのディスカバリの実施について手順を示します。最後のセクションでは、ディスカバリアイテム用のJSON形式について説明し、Perlスクリプトで独自のファイルシステムのディスカバリを実装する方法を例示します。
ファイルシステムのディスカバリを設定するには、次のようにします。
パラメータ 説明 | |
---|---|
名前 デ | スカバリルールの名前。 |
タイプ ディ | カバリを実施するチェックのタイプ。ファイルシステムディスカバリ用のZabbixエージェントまたはZabbixエージェント(アクティブ)を指定します。 |
キー 「 | fs.fs.discovery」キーを持つアイテムが、多くのプラットフォーム上のZabbixエージェントに組み込まれており(詳細については、サポートされているアイテムキーリストを参照してください。)、コンピューター上に存在するファイルシステムのリストおよびそれらのタイプを含むJSONを返します。 |
更新間隔(秒) Zabbix | ディスカバリを実施する頻度を指定します。通常ファイルシステムはそれほど頻繁に変化しないため、ファイルシステムディスカバリの初期設定時には短間隔に設定し、十分機能することを確認したのちに30分以上に設定することができます。 注意:「0」に設定されると、そのアイテムはポーリングされません。ただし、例外の更新間隔もゼロ以外の値として存在する場合、そのアイテムは、その例外の更新間隔中はポーリングされます。 |
例外の更新間隔 更新間隔 | 対して、例外を作成することができます。例: 更新間隔:0、期間:6-7,00:00-24:00 - 週末のポーリングは無効になります。それ以外では、デフォルトの更新間隔が使用されます。 最大で7つまで例外の更新間隔を定義できます。 複数の例外の更新間隔が重複する場合、その重複する期間には、最小の更新間隔の値が使用されます。 期間の形式の説明については、期間の指定のページを参照してください。 注意:「0」に設定されると、そのアイテムはその例外の更新間隔中はポーリングされず、その例外の更新間隔が終了すると、更新間隔に従ってポーリングが再開されます。 |
存在しなくなったリソースの保持期間(日) ディスカバリのステータスが「検出不可」 | なってから、検出された要素が保持される(削除されない)日数を指定することができます(最長3650日)。 注意:「0」に設定されると、要素はすぐに削除されます。当該要素がフィルターの誤編集により全ヒストリーデータと共に削除されてしまう可能性があるため、「0」を指定することは推奨されません。 |
フィルター フィルタ | を使用して、特定のファイルシステムに対する実際のアイテム、トリガー、グラフの生成のみを行うことができます。POSIX拡張正規表現を想定しています。例えば、「C:」、「D:」、「E:」のファイルシステムのみを対象とする場合、「{#FSNAME}」を[マクロ]に入れ、「^C|^D|^E」の正規表現を[正規表現]のテキストフィールドに入れることができます。フィルタリングは、ファイルシステムのタイプごとに{#FSTYPE}マクロ(例えば、「^ext|^reiserfs」)を使用して行うこともできます。 [正規表現]フィールドには、正規表現を入力するか、グローバル正規表現を参照することができます。 正規表現をテストするには、例えば、「grep -E」が使用できます。 |
説明 説 | を入力します。 |
ステータス **有効 | * - ルールが処理されます。 無効 - ルールは処理されません。 取得不可 - アイテムが取得不可です。このアイテムは処理されませんが、Zabbixは、取得不可アイテムの更新に対して設定された更新間隔に従って、定期的にアイテムのステータスを有効に設定しようと試みる場合があります。 |
大文字・小文字だけが異なるファイルシステム名が正しく検出されるように、MySQLのZabbixデータベースは大文字と小文字を区別して作成する必要があります。
ディスカバリルールのヒストリは保存されません。
ルールが作成されたら、そのルールのためのアイテムに移動し、[プロトタイプを作成]を押し、アイテムのプロトタイプを作成します。ファイルシステム名が必要な場合のマクロ{#FSNAME}の使用方法に留意してください。ディスカバリルールが実行される場合、本マクロは検出されたファイルシステムで置き換えられます。
アイテムのプロトタイプが無効のステータスで作成された場合、作成したプロトタイプは検出された要素に追加されますが、ステータスは無効です。
次のように、対象とする各ファイルシステムの基準に対して、いくつかのアイテムのプロトタイプを作成することができます。
続いて、同様の方法で、トリガーのプロトタイプを作成します。
さらに、グラフのプロトタイプも同様に作成します。
最終的に、以下に示すようなディスカバリルールの作成が完了しました。これには、5つのアイテムのプロトタイプ、2つのトリガーのプロトタイプ、1つのグラフのプロトタイプがあります。
以下のスクリーンショットは、ホストの設定において、検出されたアイテム、トリガー、グラフがどのように見えるかを示しています。検出された要素には、検出したディスカバリルールへの金色のリンクが先頭に置かれます。
ローレベルディスカバリルールにより作成されたアイテム(トリガーやグラフも同様)は、手動で削除できません。ただし、以前は検出された要素(ファイルシステム、インターフェースなど)が検出されなくなった(またはフィルターを通過しなくなった)場合は、自動的に削除されます。この場合、そのアイテムは、[存在しなくなったリソースの保持期間]フィールドで定義された日数が経過した後に削除されます。トリガーとグラフは即座に削除されます。
発見された要素が「検出不可」になると、オレンジ色の存続期間インジケーターがアイテムリストに表示されます。マウスポインターをその上に動かすと、メッセージが表示され、アイテムが削除されるまでの残りの日数が示されます。
ネットワークインターフェースのディスカバリは、ファイルシステムのディスカバリとまったく同じ方法で行われます。ただし、ディスカバリルールキー「net.if.discovery」を「vfs.fs.discovery」の代わりに使用し、フィルターおよびアイテム/トリガー/グラフのプロトタイプにおいて、マクロ{#IFNAME}を{#FSNAME}の代わりに使用する点が異なります。
「net.if.discovery」に基づいて作成する可能性があるアイテムのプロトタイプの例として、「net.if.in[{#IFNAME},bytes]」と「net.if.out[{#IFNAME},bytes]」が挙げられます。
フィルターに関する詳細については、上記のセクションを参照してください。
この例では、スイッチ上でSNMPのディスカバリを実施します。最初に、[設定]→[テンプレート]を選択します。
テンプレート用のディスカバリルールを編集するには、[ディスカバリ]列にあるリンクをクリックします。
続いて、[ルールの作成]を押して、以下のスクリーンショットにある詳細をフォームに入力します。
ファイルシステムやネットワークインターフェースのディスカバリとは異なり、アイテムには、必ずしも「snmp.discovery」キーが必要なわけではなく、SNMPエージェントのアイテムタイプで十分です。
また、これまでの例とは異なり、このディスカバリアイテムは、検出された要素それぞれに対して、{#SNMPINDEX}と{#SNMPVALUE}という2つのマクロを生成します。フィルターをかけて戻り値からループバックインターフェースを除外したい場合は、「{#SNMPVALUE}」をフィルター「マクロ」に、そして正規表現「^([^l]|l$)[^o]?」を[正規表現]テキストフィールドに入力できます。フィルターに関する詳細については、上記のセクションを参照してください。
[SNMP OID]フィールドには、これらのマクロに対して意味のある値を生成できるOIDを入れる必要があります。
ここで説明している内容を理解するため、スイッチ上でsnmpwalkを実施してみます。
$ snmpwalk -v 2c -c public 192.168.1.1 IF-MIB::ifDescr
IF-MIB::ifDescr.1 = STRING: WAN
IF-MIB::ifDescr.2 = STRING: LAN1
IF-MIB::ifDescr.3 = STRING: LAN2
マクロ{#SNMPINDEX}は、ifDescrの後のOIDの部分(この例では、1、2、3)からその値を取得します。マクロ{#SNMPVALUE}は、対応するOIDの値(ここでは、WAN、LAN1、LAN2)が基になります。このように、「snmp.discovery」アイテムは、次の3セットのマクロ→値のペアを返します。
{#SNMPINDEX} → 1 {#SNMPVALUE} → WAN
{#SNMPINDEX} → 2 {#SNMPVALUE} → LAN1
{#SNMPINDEX} → 3 {#SNMPVALUE} → LAN2
次のスクリーンショットは、これらのマクロをアイテムのプロトタイプで使用する方法を示しています。
再び、必要なだけアイテムのプロトタイプを作成します。
トリガーのプロトタイプも作成します。
さらに、グラフのプロトタイプも作成します。
ディスカバリルールの概要は以下のとおりです。
サーバの動作時、「snmp.discovery」が返す値に基づいて、実際のアイテム、トリガー、グラフが作成されます。ホストの設定では、検出したディスカバリルールへの金色のリンクが先頭に置かれます。
例えば、データベースサーバ上のデータベースなど、あらゆるタイプの要素を検出する、完全なカスタムLLDルールを作成することも可能です。
そのためには、カスタムアイテムを作成する必要がありますが、これが返すJSONは検出したオブジェクトと任意のプロパティの一部を明示します。1要素あたりのマクロの数に制限はありません。組み込まれているディスカバリルールが1つか2つのマクロ(例えば、ファイルシステムディスカバリに対して2つ)を返すのに対し、もっと多くのマクロを返すこともできます。
必要なJSON形式は、例を見るとよくわかります。旧式のZabbix 1.8エージェント(「vfs.fs.discovery」をサポートしていないもの)を実行していますが、ファイルシステムを検出する必要がある、という状況を考えてみます。ここに、Linux用の簡単なPerlスクリプトがあります。これは、マウントされているファイルシステムを検出し、JSONを出力するものです。それには、ファイルシステム名とタイプの両方が含まれます。それを使用する1つの方法は、キー「vfs.fs.discovery_perl」を持つUserParameterとして使用することです。
#!/usr/bin/perl
$first = 1;
print "{\n";
print "\t\"data\":[\n\n";
for (`cat /proc/mounts`)
{
($fsname, $fstype) = m/\S+ (\S+) (\S+)/;
$fsname =~ s!/!\\/!g;
print "\t,\n" if not $first;
$first = 0;
print "\t{\n";
print "\t\t\"{#FSNAME}\":\"$fsname\",\n";
print "\t\t\"{#FSTYPE}\":\"$fstype\"\n";
print "\t}\n";
}
print "\n\t]\n";
print "}\n";
LLDマクロ名で使用できる文字は、0~9、A~Z、_、です。
小文字はサポートされていません。
その出力の一例を以下に示します(書式を設定しなおして見やすくしています)。カスタムディスカバリルール用のJSONも、同一の書式に従う必要があります。
{
"data":[
{ "{#FSNAME}":"\/", "{#FSTYPE}":"rootfs" },
{ "{#FSNAME}":"\/sys", "{#FSTYPE}":"sysfs" },
{ "{#FSNAME}":"\/proc", "{#FSTYPE}":"proc" },
{ "{#FSNAME}":"\/dev", "{#FSTYPE}":"devtmpfs" },
{ "{#FSNAME}":"\/dev\/pts", "{#FSTYPE}":"devpts" },
{ "{#FSNAME}":"\/", "{#FSTYPE}":"ext3" },
{ "{#FSNAME}":"\/lib\/init\/rw", "{#FSTYPE}":"tmpfs" },
{ "{#FSNAME}":"\/dev\/shm", "{#FSTYPE}":"tmpfs" },
{ "{#FSNAME}":"\/home", "{#FSTYPE}":"ext3" },
{ "{#FSNAME}":"\/tmp", "{#FSTYPE}":"ext3" },
{ "{#FSNAME}":"\/usr", "{#FSTYPE}":"ext3" },
{ "{#FSNAME}":"\/var", "{#FSTYPE}":"ext3" },
{ "{#FSNAME}":"\/sys\/fs\/fuse\/connections", "{#FSTYPE}":"fusectl" }
]
}
ディスカバリルールの[フィルター]フィールドにおいて、「{#FSTYPE}」をマクロとして、「rootfs|ext3」を正規表現として指定できます。
マクロ名FSNAME/FSTYPEをカスタムLLDルールと共に使用する必要はなく、どのような名前でも自由に使用することができます。
本ページは2014/08/05時点の原文を基にしておりますので、内容は必ずしも最新のものとは限りません。
最新の情報は、英語版のZabbix2.2マニュアルを参照してください。