トリガー条件式でのマクロ設定は可能か
いつも参考にさせていただいております。
さて、現在トリガー条件を以下のようにしておりますが、エラーとなります
{Template Service DataImport-Server:proc.num[Kanshi_{$SV_GROUP}.exe].count(#5,{$KMKANSHI_NUM},"ne")}=5
上記のようにトリガー条件式を作成するとエラーとなり適用できない状況です。
調べてみると、上記{$SV_GROUP}の部分のマクロが原因のようです。
プロセス数監視をしたいのですが、プロセス名がサーバによって異なっているため、この部分をマクロに
しておりますが、proc.numの[ ]内はユーザ定義マクロができないという仕様でしょうか??
ZabbixServer2.4.8を利用しています。
fripper - 投稿数: 495
編集・追記 @ 2017/08/30 02:00 AM JST
==注意==
以下の書き込みには、私自身の認識違いによる誤りが含まれています
本スレッドの後の書き込みも含め、参照ください
※後に参照する方の一助となりますように‥
================以下原文
アイテムのキーとしてマクロを利用することは可能ですが
(グローバルマクロ→テンプレートのホストマクロ→ホストのホストマクロ の順で評価・上書される)
トリガー条件式の中では、グローバルマクロ以外はうまく作用しないのではないかと思います
キチンと試したわけではないのですが、トリガー条件式の中には「ホスト:キー名.関数~」の形式で
複数のホストのアイテムを複合的に記載することが可能なので、アイテムキー表記内の
ホストマクロはうまく解釈されないのだと思います
トリガー条件式に記載する評価用関数(max/min 等)に対するパラメータとしての
ホストマクロは、トリガーが定義されているホストのホストマクロ(‥以下上記評価順に従う)で
評価されるようです
>https://www.zabbix.com/documentation/3.0/manual/appendix/macros/supported_by_location
> → Item key parameters
> → Trigger expressions (only in constants and function parameters)
アイテムキーのパラメータとしては利用可能
トリガー表記式の中では、評価関数のパラメータとして、もしくは評価式右辺の定数値として利用可能
‥といったように読めます‥
fripper - 投稿数: 495
コメント記載してから寝る間に少し思い返してみたのですが、
私自身も上記のようなアイテムパラメータ内にホストマクロ使ったキーと
それに対するトリガー設定していた気がするので、先のコメントは
間違っている気がします‥汗
申し訳ありません
改めて調べたうえでコメントしなおします
hurukichi - 投稿数: 21
早々のご返信ありがとうございます。{$SV_GROUP}のマクロは4種類しか入れませんのでマクロを使う必要は今のところ後回しでもよいかなと思います
調査お手数おかけいたしますがよろしくお願いいたします。
hurukichi - 投稿数: 21
すみません、、
先ほど確認をしたところ、アイテムキーの設定が誤っており、無事にトリガー条件式のパラメータにマクロ設定できました。。
大変失礼いたしました。。
fripper - 投稿数: 495
>アイテムキーのパラメータとしては利用可能
>トリガー表記式の中では、評価関数のパラメータとして、もしくは評価式右辺の定数値として利用可能
この部分の訂正を
アイテムキーのパラメータ部に含まれるホストマクロは、
当該アイテムの定義されているホストのマクロとして展開されたうえで
トリガー評価式として条件評価されるようです
その他、トリガー評価式内の定数としてのマクロ表記や、
トリガー関数のパラメータとしてのマクロ表記は、トリガーが定義されているホストの
マクロ値として評価されているみたい
複数のスコープで評価順が変わることから、複数のホストのアイテム取得値を
複合的に評価するようなトリガーを作る場合には、マクロ定義値と展開結果に注意して
記載しないと、思わぬ結果になることもある
‥といったところでしょうか
#誤りあればご指摘いただきたいです(汗
追記‥
>アイテムキーのパラメータ部に含まれるホストマクロは、
>当該アイテムの定義されているホストのマクロとして展開されたうえで
正確には
「アイテムキーのパラメータ部分に表記されているユーザマクロは評価・展開されていません」
‥というべきですね(汗
ホスト名:アイテムキー・パラメータのユーザマクロ表記部分を含め、
文字列の表記的に一致するアイテムキー設定となっているアイテム」が特定される
→トリガー式に書く「hostname:item.key.hoge[ parameter,${macro}]」の部分
→hostname に所属するアイテムのアイテムID
→だから、この部分でのマクロ表記の展開結果が‥といった点は関係なく、特に展開されていない
単に、ホスト(hostname)のアイテム設定に書かれた「キー」の文字列と一致しているか否か、だけが重要
そのアイテムの監視収集値をベースに、トリガー関数(min/max 等)の部分が評価され、ひとつの値となる
→last() なら、最新の収集結果値となる
→トリガー関数の評価のために、ここのマクロは、トリガーの所属ホストのマクロ値として展開される必要がある
すべての「アイテムキー表記」「トリガー関数表記 min/max/last 等」が展開・解釈されるまで、上記処理が続く
→その結果「 ( xxx = 0 ) and ( yyy = 1 ) 」といった算術式・論理演算式だけが残るようになる
→値の比較・評価のために、ここのマクロは、トリガーの所属ホストのマクロ値として展開される必要がある
算術式・論理演算式の部分が評価され、true or false として「トリガー条件式に合致するか否か」‥として判定される
といった流れですね
hurukichi - 投稿数: 21
こまかなご説明いただきありがとうございます。
私の知識が甘いせいか上記のおっしゃっていることはあまり理解できませんでした。
とりあえず実現したいことはできましたが、このあたりの知識はこのレスを参考にしながら
自身で知識を深めていきたいと考えております。
改めて感謝いたします。