誰でも ZABBIX

Zabbixの使い方、役に立つ情報、等々

3. ログ監視 - 記録日時の取り込み

データ型の中でもログはやや特殊です。その他のデータ、数値やテキストは、監視データと取得時間が記録されています。それに対しログは、ログ自体の記録日時や、イベント情報、優先度といった別の属性も同時に保持できるようになっています。

今回は、ログファイルのデータから、タイプスタンプを取り込む方法を、様々なログのフォーマットで実際に確認します。

ログの時間

アイテム作成画面に、ログの時間の形式という項目があります。

f:id:Unam:20180213074120p:plain

これは、データ型でログを選択した際に、ログデータから日付データを抽出する際のフォーマットを指定するための項目です。

データ型のログの場合、テキストよりも、保持される項目がいくつか多いのが特徴です。

f:id:Unam:20180213080103p:plain 引用元 > History object [Zabbix Documentation 3.4]

ログデータは、Windowsイベントログの記録も考慮して、イベントIDやイベントソース、優先度なども格納できるようになっています。このうち、Timestampの部分は、通常のログ監視でも格納できるようになっています。それが、ログの時間の形式という項目です。

ログの時間の指定方法は、マニュアルに以下のように定義されています。

f:id:Unam:20180213074345p:plain 引用元 1 アイテムの作成 [Zabbix Documentation 2.2]
上記はV2.2の日本語マニュアルですが、V3.4も記載内容は同じです。

ログの時間の取得例

Zabbixのログ

まずは、マニュアルに記載されていたサンプルフォーマットを使用し、Zabbixのログ日付を取り込めるか確認します。監視するログファイルはテスト用のファイルです。

f:id:Unam:20180213084525p:plain

テストデータの設定

$ echo " 23480:20100328:154718.045 Zabbix agent started. Zabbix 1.8.2 (revision 11211)." >> /tmp/logfile


監視データのヒストリで確認すると、このように検知時間だけではなく、ログに記録されたタイムスタンプを独立した項目として確認することができます。

f:id:Unam:20180213082716p:plain

プレイスホルダーは、日付を意味する文字以外は何でもよいとマニュアルには記載されているので、pをAに、:をZに置き換えてみます。

f:id:Unam:20180213082943p:plain

特に、問題なく取得できました。

f:id:Unam:20180213083242p:plain

MySQL

ログファイルは、以下のようなフォーマットです。

$ echo "2018-02-12T23:27:58.753069Z 80974 [Note] Aborted connection 80974 to db: 'zabbix' user:" > /tmp/logfile


ログの時間の定義です。

f:id:Unam:20180213084016p:plain

取得結果は以下のようになります。

f:id:Unam:20180213084401p:plain

特殊なフォーマット

西暦データが二桁の場合

$ echo "18-02-12T23:27:58.753069Z 80974 [Note] Aborted connection 80974 to db: 'zabbix' user:" >> /tmp/logfile


ログ時間の形式

yy-MM-ddphh:mm:ss


結果 → ×
f:id:Unam:20180213200856p:plain

日付が一桁の場合

$ echo "2018-02-7T23:27:23 80974 [Note] Aborted connection 80974 to db: 'zabbix' user:" >> /tmp/logfile


日付を一桁で定義します。

yyyy-MM-dphh:mm


結果 → OK(?)
f:id:Unam:20180213202204p:plain

日付が二桁になったらこの定義では誤った日時で取り込んでしまうので、実質的にはNGですね。
f:id:Unam:20180213202918p:plain

秒なし、の場合

$ echo "2018-02-12T23:27 80974 [Note] Aborted connection 80974 to db: 'zabbix' user:" >> /tmp/logfile


フォーマットからもに該当する部分を削除します。

yyyy-MM-ddphh:mm


結果 → OK
f:id:Unam:20180213202204p:plain

年なし、月が英文字、の場合

$ echo "Feb 13 20:09:35 zabbix systemd[1]: Time has been changed" >> /tmp/logfile


ちょっと無理やり、というか期待薄ですが、以下のように定義します。

MMMpddphh:mm:ss


結果→×
f:id:Unam:20180213201601p:plain

まとめ

Zabbix側の日付のフォーマットはそれほど柔軟性のある指定はできないので、Zabbixで確実に取り込めるよう、ログ側の日付を調整したほうがよさそうです。