Zabbixには、自動でアイテムやトリガーを生成してくれるLLD(ローレベルディスカバリ)が存在しますが、プロトタイプで生成されたアイテムやトリガーは、基本的に同じ設定になります。
しかし、監視対象の状態によっては、特定のトリガーだけ閾値を変更したい場面もあると思います。
そこで、今回ご紹介するコンテキストユーザーマクロが役立ちます!
コンテキストユーザーマクロを使用する場面
以前ご紹介したように、ZabbixのLLDを使用すると、ディスクやネットワークのインターフェースを1つずつ設定しなくても、自動で取得して監視してくれます。
しかし、例えば監視対象に搭載されているディスクの容量はそれぞれ異なりますので、Zabbixでディスクの使用率や容量をLLDで監視した場合、同じ閾値では適切な監視ができないことがあります。
もし、ディスクの容量が1TBなら、1TBの90%は100GBですので余裕があると言えますが、同じ90%でも100GBなら10GBしかないので逼迫していると言えます。
そこで、コンテキストユーザーマクロの出番です!
コンテキストユーザーマクロを利用することで、インターフェース毎に閾値を設定することができます。
ユーザーマクロとコンテキストユーザーマクロ
それでは、Zabbixの公式サイトと以前ご紹介したディスク使用率監視を基に、コンテキストユーザーマクロでインターフェース毎の閾値を設定していきます。
通常のユーザーマクロ
既にZabbixを使われている方はご存知だと思いますが、ユーザーマクロには3種類あります。
- グローバルマクロ
- テンプレートマクロ
- ホストマクロ
それぞれ上から継承していき、ホストマクロが優先されます。
通常は以下のように設定し、優先度が高い方で値を上書きします。
1 |
{$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ドライブに、それぞれ個別にディスク使用率の閾値を変更したい場合は、以下のように設定します。
1 2 |
{$VFS.FS.PUSED.MAX.CRIT:C} = 80(%) {$VFS.FS.PUSED.MAX.CRIT:D} = 90(%) |
また、ディスクの空き容量を監視している場合は以下のようになりますね。
1 2 |
{$VFS.FS.PUSED.FREE.CRIT:C} = 20G {$VFS.FS.PUSED.FREE.CRIT:D} = 40G |
このように、ディスクの容量や使い方にあわせて閾値を設定することができます!
コンテキストユーザーマクロは正規表現も使える!
上記の表で既にお気付きだと思いますが、コンテキストユーザーマクロは正規表現も使えるのです!
使い方はZabbixの公式サイトの通り、マクロ名の末尾に~:regex:"正規表現"
と入力します。
正規表現を使うと、例えば複数のポートがあるネットワーク機器などは楽に設定できますね!
コンテキストユーザーマクロでIF毎の閾値を設定
それでは、トリガーのプロトタイプにコンテキストユーザーマクロ、ホストマクロにマクロコンテキストを設定します。
トリガーのプロトタイプの設定
まずは、トリガーのプロトタイプにコンテキストユーザーマクロを設定します。
1 |
last(/Template Resource/vfs.fs.size[{#FSNAME},pused])>{$VFS.FS.PUSED.MAX.CRIT:"{#FSNAME}"} |
ここでのポイントは、上記のマクロの末尾に半角「:(コロン)」を付けて、LLDマクロを繋げて入力します。
そうすることで、Zabbixのディスカバリで生成された際に、{#FSNAME}
の部分が自動的にインターフェース名(今回の場合はC:
やD:
など)に置き換わる仕組みです。
ホストマクロで個別に設定
ここから、ホストマクロにマクロコンテキストでディスク毎の閾値を設定します。
1 2 |
{$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} | それぞれのディスクの閾値を設定できる。 コンテキストユーザーマクロで指定した値が優先される。 |
もちろん今回のコンテキストユーザーマクロは、ネットワークのトラフィック監視でも利用することができますので、ぜひ試してみてください!
コメント