7 カスタムLLDルール
概要
完全にカスタムの LLD ルールを作成して、あらゆる種類のエンティティを検出することも可能です。たとえば、データベースサーバー上のデータベースを検出できます。
そのためには、見つかったオブジェクトと、必要に応じてそれらの一部のプロパティを指定した JSON 文字列を返すカスタムのアイテムを作成する必要があります。 エンティティごとのマクロ数に制限はありません。組み込みの検出ルールでは 1 個または 2 個のマクロ(たとえば、ファイルシステム検出では 2 個)が返されますが、それ以上返すことも可能です。
例
必要な JSON 文字列の形式は、例で示すのが最も分かりやすいでしょう。
古い Zabbix 1.8 エージェント(vfs.fs.discovery をサポートしていないもの)を実行しているとしますが、それでもファイルシステムを検出する必要があります。
以下は、マウント済みファイルシステムを検出し、ファイルシステム名とタイプの両方を含む JSON を出力する、Linux 用の簡単な Perl スクリプトです。
これを UserParameter として、キー vfs.fs.discovery_perl で使用する方法があります。
#!/usr/bin/perl
$first = 1;
print "[\n";
for (`cat /proc/mounts`)
{
($fsname, $fstype) = m/\S+ (\S+) (\S+)/;
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";
LLD マクロ名に使用できる記号は 0-9 、A-Z 、_ 、. です。
小文字は名前に使用できません。
出力例(見やすいように整形)を以下に示します。
カスタム検出チェック用の JSON も、同じ形式に従う必要があります。
[
{ "{#FSNAME}":"/", "{#FSTYPE}":"rootfs" },
{ "{#FSNAME}":"/sys", "{#FSTYPE}":"sysfs" },
{ "{#FSNAME}":"/proc", "{#FSTYPE}":"proc" },
{ "{#FSNAME}":"/dev", "{#FSTYPE}":"devtmpfs" },
{ "{#FSNAME}":"/dev/pts", "{#FSTYPE}":"devpts" },
{ "{#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" }
]
前の例では、キーがプロトタイプで使用される LLD マクロ名と一致している必要があります。代わりに、JSONPath を使用して LLD マクロ値を抽出することもできます。たとえば {#FSNAME} → $.fsname、{#FSTYPE} → $.fstype のようにします。これにより、次のようなスクリプトが可能になります。
#!/usr/bin/perl
$first = 1;
print "[\n";
for (`cat /proc/mounts`)
{
($fsname, $fstype) = m/\S+ (\S+) (\S+)/;
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";
出力例(見やすいように整形)を以下に示します。
カスタム検出チェック用の JSON も、同じ形式に従う必要があります。
[
{ "fsname":"/", "fstype":"rootfs" },
{ "fsname":"/sys", "fstype":"sysfs" },
{ "fsname":"/proc", "fstype":"proc" },
{ "fsname":"/dev", "fstype":"devtmpfs" },
{ "fsname":"/dev/pts", "fstype":"devpts" },
{ "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" }
]
その後、検出ルールの「Filter」フィールドで、{#FSTYPE} をマクロとして指定し、rootfs|ext3 を正規表現として指定できます。
カスタム LLD ルールで FSNAME/FSTYPE というマクロ名を使う必要はありません。好きな名前を自由に使用できます。
JSONPath を使用する場合、LLD の行はオブジェクトになり得る配列要素ですが、別の配列や値であることもできます。
なお、ユーザーパラメータを使用する場合、戻り値は 16 MB に制限されます。
詳細は、LLD の戻り値のデータ制限 を参照してください。