いつもお世話になっております。
ログ監視のカラム指定についてご教授をお願いしたいです。
ZabbixVerは2.4.8となります。
現在、以下のフォーマット形式のログを監視しようとしています。
[日付] [時間] [重要度] [メッセージ] [補足]
このログ監視を設定時、
3カラム目の[重要度]で障害判定を行いたいです。
[重要度]は0~2の数字で表され、1と2のみ障害としたいです。
上記を実施するにカラム指定が必要となると思うのですが、
アイテムまたはトリガーで、こういったカラム指定は出来るのでしょうか?
heya - 投稿数: 319
カラム指定は無理なので、するとしたら、
アイテムキー log[/var/log/xxx.log,"^............... [012] "]
トリガーの条件式 {host:log[/var/log/xxx.log,"^............... [012] "].regexp("^............... [12]")}=1
といった感じでできると思います。ただし、日付と時間の文字数が固定であるという条件付きです。
上の例では日付と時間が「Jul 3 03:08:02」というような形式(日が一桁の場合その左の空白は二つになり、常に半角15文字となる)と仮定しています。
日付と時間の文字数が固定でなければ・・・まあ正規表現をがんばればできそうな気はします。
追記
2.2 からは output というパラメーターがあるみたいですね。
log[/var/log/xxx.log,"^............... ([012]) ",,,,\1] としておけば、このアイテムの値は 0 か 1 か 2 になるみたいです。
そうなるとトリガーの条件式は {host:log[/var/log/xxx.log,"^............... ([012]) ",,,,\1].regexp("[12]")}=1 といった感じになるんでしょうか。数値として扱えないなら output を使わない場合とあまり変わらないような気もしますが・・・。
#Zabbix 3.0 ではoutput 指定があるならアイテムのデータ型にログ以外も選べるみたいです。
TNK - 投稿数: 4769
すでにheyaさんから回答を頂いていますが、ちょっと違う方法なの
で書いておきます。
何カラム目というようにカラムの順番を直接的に指定する方法はあ
りません。
正規表現でパターンを記述できるのであれば、Zabbix 2.2から追加
されたlog[]のoutputパラメータを利用する機能を利用して、ログ
から特定の場所の文字列を切り出すことができます。
ただし、2.4.8とのことですので、ログからだとアイテムとしては、
ログとしてしか保存できず、数値として取り出すことはできないこ
とにご注意ください。
ということで、そのログを正規表現でパターンを表現できるように
し、そのパターンを指定して重要度の部分の文字列を取得するアイ
テムを作成し、そのアイテムに対するトリガーを設定すれば良いと
思います。
例えば、以下のようなログだったとします。
各項目の間はホワイトスペース(' ')だと仮定します。
2016/07/06 09:47:20 0 Normal
2016/07/06 09:52:20 1 Warning
2016/07/06 09:57:20 0 Normal
2016/07/06 10:02:20 2 Error
そうすると、より適した正規表現があるとは思いますが、例えば、
以下のような正規表現で表すことができます。
[0-9]{4}.[0-9]{2}.[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2} ([0-9]+) *
あとはこれを利用して、以下のようなキーで値を取得します。
log[/tmp/test.log,"[0-9]{4}.[0-9]{2}.[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2} ([0-9]+) *",,,,\1]
あとは、その取得した値は、Zabbix 2.4だとログでしか保存できな
いので、トリガーの条件式ではstr()などを利用して「1」か「2」
であれば障害とみなすようなトリガーを作成すれば良いでしょう。
ご参考までに、Zabbix 3.0からは、ログからでも数値として取得し
て保存できるようになったので、数値で保存して、トリガーでは数
値の大小比較を利用した条件式でも監視することができます。
kaeru - 投稿数: 264
>>heya様
>>TNK様
ご回答ありがとうございます。
正規表現とにらみ合いながら現在設定を行っています。
別途頂いた内容を元に設定した値についてご報告させて頂きますが、
正規表現が絶望的に苦手で設定に手間取っているため、
取り急ぎお礼申し上げます。
kaeru - 投稿数: 264
>>heya様
>>TNK様
頂いた内容を元に以下で何とか取れるようになりました。
----------------------------------------------------------------------------
対象ログ :C:\Program Files\TESTyyyymmdd.log
実際のログ出力:2016/07/11 05:00:00 0 0 1 HEK
→区切りはTAB
文字コード :unicode
アイテムキー:
logrt["C:\Program Files\TEST........\.log","[0-9]{4}.[0-9]{2}.[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2} [12].*",1200]
※3カラム目の重要度 0 のものについてはアイテムで落とすことにしました。
----------------------------------------------------------------------------
区切りのTABをどう表現していいかわからなかったり(そのままTABを入れたらいけました)
文字化けしたり(よくよく見たらログがunicodeでした)と時間が掛かってしまいましたが…。
outputも入れていたのですが、
これから3.0.xが主流になる中で今回の設定を見返した時、
2.2.×系の仕様を忘れて「なんでstrで判定しているんだ?」となりそうなので一旦省きました。
以上、ご報告までです。ご回答誠にありがとうございました。