Zabbix ローレベルディスカバリ（LLD）の拡張⑤ Path不定、複数ログの一括監視


 [Zabbix ローレベルディスカバリ（LLD）の拡張①](http://qiita.com/usiusi/items/51e8478cb080412958a4)
 [Zabbix ローレベルディスカバリ（LLD）の拡張②](http://qiita.com/usiusi/items/d616b7c0d51a926ca4a0)
 [Zabbix ローレベルディスカバリ（LLD）の拡張③](http://qiita.com/usiusi/items/0972da38984a82e43e74)
 [Zabbix ローレベルディスカバリ（LLD）の拡張④](http://qiita.com/usiusi360/items/8d44fd6b975b2db40ded)
 [Zabbix ローレベルディスカバリ（LLD）の拡張⑤](http://qiita.com/usiusi360/items/4664b10426bb6d993e1d)

# はじめに
ファイル名が一意に定まらないログの監視を行うために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] |



```bash: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 "]}"

```



```json:出力結果
# 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"
    }
  ]
}

```

ファイル名の先頭文字列が同じものを多数監視しなければならない場合に有効な方法かと思います。