Zabbix ローレベルディスカバリ(LLD)の拡張①
Zabbix ローレベルディスカバリ(LLD)の拡張②
Zabbix ローレベルディスカバリ(LLD)の拡張③
Zabbix ローレベルディスカバリ(LLD)の拡張④
Zabbix ローレベルディスカバリ(LLD)の拡張⑤
はじめに
ファイル名が一意に定まらないログの監視を行うためにlogrtアイテムキーが用意されています。
勘違いしやすいのですが、このアイテムキーは正規表現に一致するファイル群の中から最新のもの”一つだけ”が監視対象とされます。
またフォルダパスについては正規表現の適用ができないため、ファイル群は同一フォルダ内になければいけません。
例) アイテムキー:logrt["/var/log/http/access.log-[0-9]{8}$","ERROR","UTF-8",100]
/var/log/http/access.log-20150401
/var/log/http/access.log-20150402
/var/log/http/access.log-20150403
/var/log/http/access.log-20150404 ←★監視対象
↓
/var/log/http/access.log-20150405 ←☆更新日時が新しいファイルができると、そちらに監視対象が移る
やりたいこと
今回は途中のPathが不定で、且つ複数のログをローレベルディスカバリを使って一括登録を行いたいと思います。
例)★=監視したいログファイル
/var/log/httpd/サービス1/access_サービス1.log ★
access_サービス1.log-20150401
access_サービス1.log-20150402
access_サービス1-1.log ★
access_サービス1-1.log-20150401
access_サービス1-1.log-20150402
/var/log/httpd/サービス2/access_サービス2.log ★
access_サービス2.log-20150401
access_サービス2.log-20150402
/var/log/httpd/サービス3/access_サービス3.log ★
access_サービス3.log-20150401
access_サービス3.log-20150402
~~~~以下、続く~~~~
zabbix_agentd.conf(エージェント側)での設定
UserParameter=log.path.discovery[*],/etc/zabbix/zabbix_discovery/log.path.discovery.sh $1 $2 $3
WebGUIでの設定
ディスカバリルール | |
---|---|
名前 | ログのディスカバリ |
タイプ | Zabbixエージェント |
キー | log.path.discovery[/var/log/httpd,access,1] |
※3つ目のオプションは複数のディスカバリルールを登録する際に一意になるように付けます。 |
アイテムのプロトタイプ | |
---|---|
名前 | ログ監視[{#FILE_NAME1}] |
タイプ | Zabbixエージェント |
キー | log[{#FILE_PATH1},ERROR,UTF-8,100] |
log.path.discovery.sh
#!/bin/bash
DIR_PATH=$1
BASE_STRING=$2
NUMBER=$3
LIST=`find ${DIR_PATH} -regex ".*${BASE_STRING}.*\.log$" 2>/dev/null`
if [ "${LIST}" = "" ] ;then
echo "ZBX_NOTSUPPORTED"
exit 1
fi
IFS=$'\n'
echo -n "{\"data\":["
FIRST=1
for line in ${LIST}
do
FILE_PATH="${line}"
FILE_NAME="${FILE_PATH##*/}"
if [ ${FIRST} -eq 1 ] ; then
FIRST=0
else
echo -n ","
fi
echo -e -n "{\"{#FILE_NAME${NUMBER}}\":\"${FILE_NAME}\",\"{#FILE_PATH${NUMBER}}\":\"${FILE_PATH}\"}"
done
echo "]}"
出力結果
# zabbix_get -s 192.168.0.1 -k "log.path.discovery[/var/log/httpd,access,1]" | jq "."
{
"data": [
{
"{#FILE_PATH1}": "/var/log/httpd/サービス1/access_サービス1.log",
"{#FILE_NAME1}": "access_サービス1.log"
},
{
"{#FILE_PATH1}": "/var/log/httpd/サービス1/access_サービス1-1.log",
"{#FILE_NAME1}": "access_サービス1-1.log"
},
{
"{#FILE_PATH1}": "/var/log/httpd/サービス2/access_サービス2.log",
"{#FILE_NAME1}": "access_サービス2.log"
},
{
"{#FILE_PATH1}": "/var/log/httpd/サービス3/access_サービス3.log",
"{#FILE_NAME1}": "access_サービス3.log"
}
]
}
ファイル名の先頭文字列が同じものを多数監視しなければならない場合に有効な方法かと思います。