Bash
MySQL
zabbix

【Zabbix】history_logから詳細なログデータを抽出

【まえがき】

別のシェルでeventsテーブルからイベントデータ一覧を抽出し、
アラート内容を定期的にチェックする運用を試験的に始めてみたのですが、
Windowsのアプリケーションログ/システムログや、
SNMPTrapログ、/var/log/messagesのエラーログなどの
いわゆるログ系のアラートについての対処に困りました。

アラートが飛んでイベントデータに表示されるのはいいのですが、
どういったエラー内容なのかはWebGUI上でひとつひとつ専用ページに飛んで、
確認しなければなりませんでした。

面倒だったので、イベントデータでエラー内容が不明瞭なアラートは、
itemidで紐づけて、詳細なログ内容を表形式で取り出すシェルを作成してみました。

【動作環境】

簡単ですが、動作環境です。

Zabbix:3.09
MYSQL :5.7.20

【シェル内容】

eventdetail.sh
#!/bin/bash
#指定したitemidの詳細内容をヒストリログから出力する
#ある一定の期間から出力する
#
###基本設定
OUT_DIR=/home/ToolAdmin/eventdata
OUT_FILE=eventdetail_`date +%Y%m%d%H%M%S`.log
MY_CONF=/home/ToolAdmin/mysql.conf
ITEM_LIST=/home/ToolAdmin/shell/itemidlist.txt #txtにitemidを列で並べてます
STIME=`date +%s -d '7days ago'` #1週間分のログを出力
ETIME=`date +%s`

###mysqlでデータ抽出
CNT=0
while read LINE
do
if [ $CNT -eq 0 ]; then
mysql --defaults-extra-file=${MY_CONF} <<SQL > $OUT_DIR/$OUT_FILE
SELECT
 i.itemid 'アイテムID',
 h.name 'ホスト名',
 FROM_UNIXTIME(hl.clock) '日時',
 hl.severity 'Win深刻度',
 hl.source 'Winソース',
 hl.logeventid 'WinEVT_ID',
 hl.value 'エラー内容'
FROM history_log hl
INNER JOIN items i ON hl.itemid = i.itemid
INNER JOIN hosts h ON i.hostid = h.hostid
WHERE hl.clock BETWEEN ${STIME} AND ${ETIME}
AND hl.itemid = $LINE
SQL
CNT=`expr $CNT + 1`
else
###else側は単純に一行目をsedで削除したいために条件分岐してます
mysql --defaults-extra-file=${MY_CONF} <<SQL | sed -e "/^ア.*/d" >> $OUT_DIR/$OUT_FILE
SELECT
 i.itemid 'アイテムID',
 h.name 'ホスト名',
 FROM_UNIXTIME(hl.clock) '日時',
 hl.severity 'Win深刻度',
 hl.source 'Winソース',
 hl.logeventid 'WinEVT_ID',
 hl.value 'エラー内容'
FROM history_log hl
INNER JOIN items i ON hl.itemid = i.itemid
INNER JOIN hosts h ON i.hostid = h.hostid
WHERE hl.clock BETWEEN ${STIME} AND ${ETIME}
AND hl.itemid = $LINE
SQL
CNT=`expr $CNT + 1`
fi
done < $ITEM_LIST

これで結果としてこんな感じのログが出ます。
EXCELに転記した画像です。
キャプチャ.PNG

【残課題】

今日、帰ってきてパパっと作成してみたのですが、
以下の点がまだ不明瞭でもう少し調べて綺麗に出力されるようにしたいです。

 ・history_log.severityのそれぞれの番号の意味

severityはWindowsの深刻度のことですが、
実際どれがどの番号なのかわからないため、ネットや実機で情報を確認しながら、
CASE~WHEN文で綺麗に変換できるようにしたいです。

Zabbixはデータベースの各カラムの番号の意味などを
調べだすと、面白いですね。SQLが好きだから楽しいです。

◆参考URLページ
下記URLの「Log history」の項は参考になりました。
https://www.zabbix.com/documentation/3.2/manual/api/reference/history/object

もしなにかアドバイス頂ければありがたいです。

おやすみなさい。