3. ログ監視 - 記録日時の取り込み
データ型の中でもログはやや特殊です。その他のデータ、数値やテキストは、監視データと取得時間が記録されています。それに対しログは、ログ自体の記録日時や、イベント情報、優先度といった別の属性も同時に保持できるようになっています。
今回は、ログファイルのデータから、タイプスタンプを取り込む方法を、様々なログのフォーマットで実際に確認します。
ログの時間
アイテム作成画面に、ログの時間の形式という項目があります。
これは、データ型でログを選択した際に、ログデータから日付データを抽出する際のフォーマットを指定するための項目です。
データ型のログの場合、テキストよりも、保持される項目がいくつか多いのが特徴です。
ログデータは、Windowsイベントログの記録も考慮して、イベントIDやイベントソース、優先度なども格納できるようになっています。このうち、Timestampの部分は、通常のログ監視でも格納できるようになっています。それが、ログの時間の形式という項目です。
ログの時間の指定方法は、マニュアルに以下のように定義されています。
引用元 1 アイテムの作成 [Zabbix Documentation 2.2]
※上記はV2.2の日本語マニュアルですが、V3.4も記載内容は同じです。
ログの時間の取得例
Zabbixのログ
まずは、マニュアルに記載されていたサンプルフォーマットを使用し、Zabbixのログ日付を取り込めるか確認します。監視するログファイルはテスト用のファイルです。
テストデータの設定
$ echo " 23480:20100328:154718.045 Zabbix agent started. Zabbix 1.8.2 (revision 11211)." >> /tmp/logfile
監視データのヒストリで確認すると、このように検知時間だけではなく、ログに記録されたタイムスタンプを独立した項目として確認することができます。
プレイスホルダーは、日付を意味する文字以外は何でもよいとマニュアルには記載されているので、pをAに、:をZに置き換えてみます。
特に、問題なく取得できました。
ログファイルは、以下のようなフォーマットです。
$ echo "2018-02-12T23:27:58.753069Z 80974 [Note] Aborted connection 80974 to db: 'zabbix' user:" > /tmp/logfile
ログの時間の定義です。
取得結果は以下のようになります。
特殊なフォーマット
西暦データが二桁の場合
$ echo "18-02-12T23:27:58.753069Z 80974 [Note] Aborted connection 80974 to db: 'zabbix' user:" >> /tmp/logfile
ログ時間の形式
yy-MM-ddphh:mm:ss
結果 → ×
日付が一桁の場合
$ echo "2018-02-7T23:27:23 80974 [Note] Aborted connection 80974 to db: 'zabbix' user:" >> /tmp/logfile
日付を一桁で定義します。
yyyy-MM-dphh:mm
結果 → OK(?)
日付が二桁になったらこの定義では誤った日時で取り込んでしまうので、実質的にはNGですね。
秒なし、の場合
$ echo "2018-02-12T23:27 80974 [Note] Aborted connection 80974 to db: 'zabbix' user:" >> /tmp/logfile
フォーマットからも秒に該当する部分を削除します。
yyyy-MM-ddphh:mm
結果 → OK
年なし、月が英文字、の場合
$ echo "Feb 13 20:09:35 zabbix systemd[1]: Time has been changed" >> /tmp/logfile
ちょっと無理やり、というか期待薄ですが、以下のように定義します。
MMMpddphh:mm:ss
結果→×
まとめ
Zabbix側の日付のフォーマットはそれほど柔軟性のある指定はできないので、Zabbixで確実に取り込めるよう、ログ側の日付を調整したほうがよさそうです。