トリガーの曜日・時間指定での検知除外設定

はじめまして

Zabbixバージョン:2.0.0

現在、下記のようなプロセス数監視トリガーを設定しています。

{proc.num[******].last(0)}<1
(※アイテム更新間隔:60秒)

このトリガーに
「日曜日のAM3:00~3:10に限り障害検知しないようにする」
という条件文を組み込みたいと考えています。
時間帯の指定はtime関数を使えばいいと思うのですが、
「日曜日のみ」という条件をそこに噛ませるにはどうしたら良いのでしょうか。

例外の更新間隔の設定は使わず、あくまでトリガー条件式での対応を考えています。

よろしくお願いいたします。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー KAZ の写真

SKさん

dayofweekを使ってみてはどうでしょう?

以下、1.8マニュアルですが、参考になるかと…
https://www.zabbix.com/documentation/jp/1.8/manual/config/triggers

ユーザー SK の写真

KAZ様

返信ありがとうございます。

dayofweekを使用すると、以下のような感じでしょうか。

{proc.num[******].last(0)}<1
& ({proc.num[******].dayofweek(0)}=7
& ({proc.num[******].time(0)}<030000 | {proc.num[******].time(0)}>031000))

私の予測ですが、これですと日曜日にしかトリガーが稼動しなくなってしまう気がします。
恐縮ですが、具体的な設定例など提示していただけると幸いです。
(本来ならこちらで検証すべきですが、十分な時間がとれないもので…)

よろしくお願いいたします。

ユーザー KAZ の写真

SKさん

試してないですが、時間の様に月(1)~土(6)とするか…

{proc.num[******].last(0)}<1
& ({proc.num[******].dayofweek(0)}>0 | {proc.num[******].dayofweek(0)}<7)
& ({proc.num[******].time(0)}<030000 | {proc.num[******].time(0)}>031000))

日曜日以外とすれば良いのでは?

{proc.num[******].last(0)}<1
& ({proc.num[******].dayofweek(0)}#7)
& ({proc.num[******].time(0)}<030000 | {proc.num[******].time(0)}>031000))

ユーザー SK の写真

KAZ様

設定例ありがとうございます。

>時間の様に月(1)~土(6)とするか…
>日曜日以外とすれば良いのでは?
1番目の設定例ですが、「月~土曜日、AM3:00~3:10の間検知しない。日曜日はトリガー稼動しない」となってしまいませんでしょうか。
dayofweekについて理解不足で申し訳ないのですが、トリガーの稼動をその曜日だけに限定してしまう、というような
挙動をするのでしょうか。

そうであれば、2番目の設定例も同様の結果となってしまう気がします。

目指している結果について補足しますと、
「日曜日のAM3:00~3:10の10分間のみ障害検知しない。その10分以外は通常検知」
ということです。

dayofweekの挙動を詳しく知りたいのですが、検索しても有用な情報がほとんどないですね…

ユーザー kng の写真

横から失礼します。

({proc.num[httpd,,,].last()}=0)
&
( ({proc.num[httpd,,,].dayofweek(0)}=7
 & {proc.num[httpd,,,].time(0)}<031000
 & {proc.num[httpd,,,].time(0)}>030000) = 0 )

で、いけませんか?

※修正

ユーザー KAZ の写真
SKさん

勘違いしてました。
「日曜日のAM3:00~3:10に限り障害検知しないようにする」は

「月~土は監視する。
 日曜日は0時から3時まで、3時10分から23時59分(59秒)まで監視する」
となりますので、そのまま書けば良いです。
下記ですね。(見やすいようにインデント付けました。)

{proc.num[******].last(0)}<1 & 
(
 ({proc.num[******].dayofweek(0)} > 0 & {proc.num[******].dayofweek(0)} < 7) |
 ({proc.num[******].dayofweek(0)} = 7 &
  (
   ({proc.num[******].time(0)} >= 000000 & {proc.num[******].time(0)} <  030000) | 
   ({proc.num[******].time(0)} >  031000 & {proc.num[******].time(0)} <= 235959)
  )
 )
)
dayofweekの挙動を詳しく知りたいのですが、検索しても有用な情報がほとんどないですね…
オープンソースなので、そういう時は試した方が早いです。
ユーザー SK の写真

kng様

設定例ありがとうございます。
すごくシンプルな条件文ですね。是非試させていただきます。
お手数でなければ、時間指定の部分の記述について簡単に解説いただけないでしょうか。

ユーザー kng の写真

すみません。
携帯からの投稿なので、上の設定例はおかしいので、以下に日本語で書きますね。

({プロセス}がない)&
(((曜日が日曜日)&((時間が3時より大きい)&(時間が3時10分より小さい))の結果が0)

を条件としています。

日曜日であり、且つ該当時間を()でくくったばあい、その結果が真であれば条件一致ですので、結果をさらに評価し、偽である場合に一致させています。

帰宅後、ちゃんと書き直しますね。。。

ユーザー kng の写真

({proc.num[httpd,,,].last()}=0)
&
(({proc.num[httpd,,,].dayofweek(0)}=7 &{proc.num[httpd,,,].time(0)}<031000 &
{proc.num[httpd,,,].time(0)}>030000 ) = 0 )

ユーザー kng の写真

期間を特定して、『=0』で否定することで、実現できます

ユーザー SK の写真

kng様

(({proc.num[httpd,,,].dayofweek(0)}=7 <031000 >030000 ) = 0 )

この部分は、「日曜日の、AM3:00~3:10の間でない場合」という意味であっているでしょうか。

仮に、最後の「=0」を「=1」に変えると、「日曜日の、AM3:00~3:10の間である場合」となるのでしょうか。

ユーザー kng の写真

ご認識の通りです

否定しない場合は、『=0』いりません。
dayof~で曜日を特定
timeで時間を指定
を全てandとすることで、特定の時間にマッチとし、
その結果を否定することで、除外しています

ユーザー KAZ の写真

kngさん

すっきりして見やすいですね!

ユーザー kng の写真

KAZさん

ありがとうございます。
評価式を評価するのは邪道ですかね?(笑)

ユーザー KAZ の写真

kngさん

私の個人的意見ですが、理解して使うなら邪道も正道もなく、それは「ロジック」かと…A(^^;
なので、それでトリガー式が短くなるならありでは?

ユーザー kng の写真

KAZさん

トリガー式が短くなるのはいいのですが、引き継ぎが控えてたりすると、
説明が大変だったりするので、ナレッジ共有とかには気を使います・・・

シンプルに書くのがベターなのですが、誰が見ても分かるというのも重要で
さじ加減が難しいですね。

ユーザー SK の写真

kng様

なるほど、承知しました。
こちらの条件文に関しても試させていただこうと思います。
ご丁寧にありがとうございました。

ユーザー SK の写真

KAZ様

設定例ありがとうございます。
月~土曜日と、日曜日の10分以外をor条件で結べばよかったのですね。
解決できそうです。感謝いたします。

ちなみにですが、「日曜日は0時から3時まで、3時10分から23時59分(59秒)まで監視する」の部分は
以下のようにしても問題ないでしょうか。(すみません、ちょっと表示がおかしいですが…)

({proc.num[******].time(0)} >= 000000 < 030000) |
({proc.num[******].time(0)} > 031000 <= 235959)
 
                    ↓

{proc.num[******].time(0)}<030000 | {proc.num[******].time(0)}>031000

ユーザー KAZ の写真

SKさん

あー、そうですね。
問題ないですね。A(^^;

ユーザー SK の写真

KAZ様

ご丁寧にありがとうございました。