サイトアイコン IT NEWS

ZabbixのLLDにはコンテキストユーザーマクロが便利!

Zabbixには、自動でアイテムやトリガーを生成してくれるLLDローレベルディスカバリ)が存在しますが、プロトタイプで生成されたアイテムやトリガーは、基本的に同じ設定になります。
しかし、監視対象の状態によっては、特定のトリガーだけ閾値を変更したい場面もあると思います。
そこで、今回ご紹介するコンテキストユーザーマクロが役立ちます!

コンテキストユーザーマクロを使用する場面

以前ご紹介したように、ZabbixLLDを使用すると、ディスクやネットワークのインターフェースを1つずつ設定しなくても、自動で取得して監視してくれます。

しかし、例えば監視対象に搭載されているディスクの容量はそれぞれ異なりますので、Zabbixでディスクの使用率や容量をLLDで監視した場合、同じ閾値では適切な監視ができないことがあります。

管理者

もし、ディスクの容量が1TBなら、1TBの90%は100GBですので余裕があると言えますが、同じ90%でも100GBなら10GBしかないので逼迫していると言えます。

そこで、コンテキストユーザーマクロの出番です!
コンテキストユーザーマクロを利用することで、インターフェース毎に閾値を設定することができます。

ユーザーマクロとコンテキストユーザーマクロ

それでは、Zabbixの公式サイトと以前ご紹介したディスク使用率監視を基に、コンテキストユーザーマクロインターフェース毎の閾値を設定していきます。

通常のユーザーマクロ

既にZabbixを使われている方はご存知だと思いますが、ユーザーマクロには3種類あります。

ユーザーマクロの種類
  1. グローバルマクロ
  2. テンプレートマクロ
  3. ホストマクロ

それぞれ上から継承していき、ホストマクロが優先されます。
通常は以下のように設定し、優先度が高い方で値を上書きします。

{$VFS.FS.PUSED.MAX.CRIT} = 90(%)

ここでは、テンプレートのトリガーコンテキストユーザーマクロを閾値として設定し、ホストマクロ各ディスク毎の閾値を設定していきます。

コンテキストユーザーマクロ

設定する前に、Zabbixコンテキストユーザーマクロについて知っておきましょう!
簡単に説明すると、「ユーザーマクロ」+「ローレベルディスカバリマクロ」を組み合わせることにより、ディスク固有のマクロとして利用できます。

まずは、ホストマクロに設定するマクロコンテキストの例をご覧ください。

スクロールできます
説明
{$LOW_SPACE_LIMIT}コンテキストのないユーザー マクロ
{$LOW_SPACE_LIMIT:/tmp}コンテキストを持つユーザー マクロ (静的文字列)
{$LOW_SPACE_LIMIT:regex:"^/tmp$"}コンテキストを持つユーザー マクロ (正規表現)。 {$LOW_SPACE_LIMIT:/tmp} と同じ。
{$LOW_SPACE_LIMIT:regex:"^/var/log/.*$"}コンテキストを持つユーザー マクロ (正規表現)。 /var/log/ で始まるすべての文字列に一致。

例えば、WindowsのCドライブとDドライブに、それぞれ個別にディスク使用率の閾値を変更したい場合は、以下のように設定します。

{$VFS.FS.PUSED.MAX.CRIT:C} = 80(%)
{$VFS.FS.PUSED.MAX.CRIT:D} = 90(%)

また、ディスクの空き容量を監視している場合は以下のようになりますね。

{$VFS.FS.PUSED.FREE.CRIT:C} = 20G
{$VFS.FS.PUSED.FREE.CRIT:D} = 40G

このように、ディスクの容量や使い方にあわせて閾値を設定することができます!

コンテキストユーザーマクロは正規表現も使える!

上記の表で既にお気付きだと思いますが、コンテキストユーザーマクロ正規表現も使えるのです!
使い方はZabbixの公式サイトの通り、マクロ名の末尾に~:regex:"正規表現"と入力します。
正規表現を使うと、例えば複数のポートがあるネットワーク機器などは楽に設定できますね!

コンテキストユーザーマクロでIF毎の閾値を設定

それでは、トリガーのプロトタイプコンテキストユーザーマクロホストマクロマクロコンテキストを設定します。

トリガーのプロトタイプの設定

まずは、トリガーのプロトタイプコンテキストユーザーマクロを設定します。

last(/Template Resource/vfs.fs.size[{#FSNAME},pused])>{$VFS.FS.PUSED.MAX.CRIT:"{#FSNAME}"}

ここでのポイントは、上記のマクロの末尾に半角「:コロン)」を付けて、LLDマクロを繋げて入力します。
そうすることで、Zabbixディスカバリで生成された際に、{#FSNAME}の部分が自動的にインターフェース名(今回の場合はC:D:など)に置き換わる仕組みです。

ホストマクロで個別に設定

ここから、ホストマクロマクロコンテキストでディスク毎の閾値を設定します。

{$VFS.FS.PUSED.MAX.CRIT:C} = 80(%)
{$VFS.FS.PUSED.MAX.CRIT:D} = 90(%)

これで、特定のディスクの閾値だけを個別に変更することができました!

コンテキストユーザーマクロの便利なところ

このままだと、結局各ディスク毎に1つずつ閾値を設定しなければならないと思うかもしれませんが、実は「:コロン)」から後ろを消した通常マクロ{$VFS.FS.PUSED.MAX.CRIT})を設定していれば、コンテキストユーザーマクロを使用しなかった場合は、そのマクロで設定した値が適用されます。

スクロールできます
例)マクロ説明
{$VFS.FS.PUSED.MAX.CRIT}コンテキストユーザーマクロを設定しない場合に適用される。
{$VFS.FS.PUSED.MAX.CRIT:C}
{$VFS.FS.PUSED.MAX.CRIT:D}
それぞれのディスクの閾値を設定できる。
コンテキストユーザーマクロで指定した値が優先される。

もちろん今回のコンテキストユーザーマクロは、ネットワークのトラフィック監視でも利用することができますので、ぜひ試してみてください!

モバイルバージョンを終了