countトリガー関数の動作について
お世話になります。
表題にありますcount関数について
お伺いさせていただきます。
<実現したいこと>
過去10分間に正規表現にマッチするログが存在しない場合に、
トリガーを発動させたい。
<設定>
zabbix version 3.0.15
アイテムが正常に機能していることはテスト済み。
トリガー設定イメージ
{ホスト名:logrt[ファイルパス,正規表現].count(600)}=0
<困りごと>
10分以上、正規表現にマッチするログが出力されてないにもかかわらず、
トリガーが成立しない。
いろいろと調べましたが、原因や解決に行き着かず、
不躾ながらお伺いさせていただいております。
以上、よろしく御願いいたします。
fripper - 投稿数: 495
トリガー条件式の評価は、通常は「新しいアイテム値が届いた時」に評価・判定されます
よって、アイテムの段階で正規表現を指定して格納値をフィルタしているような状況下ですと
「そもそもアイテムに新しい値が格納されない」という状況になってしまうため
トリガー条件式の評価、そのものが実行されません
トリガー式に指定できる関数のうち、nodataをはじめとする以下のもの
>nodata(), date(), dayofmonth(), dayofweek(), time(), now()
が利用されている場合のみ、新しいアイテム値の格納有無にかかわらず
30秒に1度、式が評価されるような動作になります
トリガー条件式を見直しして、30秒おきに評価が発動するような条件式にする方法が1つ
他には、アイテム設定ではフィルタせず、logrt[xxxxx] としてすべてのログ出力を収集したうえで
トリガー条件式で regexp 関数などを使ってフィルタするような方法が1つ
‥かと存じます
yajima.m - 投稿数: 4
fripper様
ご回答ありがとうございます。
ご回答の内容について、試してみます。
また、ご報告させていただきます。
yajima.m - 投稿数: 4
fripper様
報告が遅くなり申し訳ございません。
レスポンスがこれほど早いとは思っておりませんで、
伺ったこちらが油断しておりました。
結果としては、ログはzabbixのDBに全て収集し、
count関数でフィルタをかけることで、動作させました。
あと、{ホスト名:logrt[ファイルパス,正規表現].count(600)}=0
にandで{ホスト名:logrt[ファイルパス,正規表現].nodata(600)}=1で
実験しましたが、これはトリガー発動せずでした。
fripper様のご助言にて、
本件理解し解決することができましたので、
ただただ感謝の言葉しかないです。
本件、ご対応いただき、まことにありがとうございました。