6 カスタムLLDルール

概要

完全にカスタムの LLD ルールを作成して、データベース サーバー上のデータベースなど、あらゆるタイプのエンティティを検出することもできます。

そのためには、JSON を返すカスタム アイテムを作成し、見つかったオブジェクトと、オプションでそれらのプロパティをいくつか指定する必要があります。エンティティあたりのマクロの数に制限はありません。組み込みの検出ルールは 1 つまたは 2 つのマクロ (たとえば、ファイル システムの検出の場合は 2 つ) を返しますが、それ以上のマクロを返すこともできます。

必要なJSON形式を例で説明します。("vfs.fs.discovery" をサポートしていない古い)Zabbix 1.8 エージェントを実行しているが、ファイルシステムを検出する必要があると仮定します。マウントされたファイルシステムを検出し、ファイルシステム名とタイプの両方を含むJSONを出力するLinux用の簡単なPerlスクリプトを以下に示します。このスクリプトを利用する方法の1つは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 {#FSNAME}$.fsname および {#FSTYPE}$.fstype を使用して LLD マクロ値を抽出し、次のようなスクリプトが可能になります。

#!/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"  }
       ]

検出ルールの「フィルター」フィールドでマクロとして「{#FSTYPE}」を指定し、正規表現として「rootfs|ext3」を指定できます。 ::: noteclassic カスタム LLD ルールではマクロ名 FSNAME/FSTYPE を使用する必要はなく、好きな名前を自由に使用できます。JSONPath が使用されている場合、LLD 行はオブジェクトになることができる配列要素になりますが、別の配列または値になることもできます。 ::: ユーザーパラメータを使用する場合、戻り値は16MBに制限されることに注意してください。詳細については、LLD戻り値のデータ制限を参照してください。