logrt[]キーのファイル名の指定の勘違い【MIRACLE ZBX 1.8, 2.0, 2.2】
logrt[]キーでのファイル名の指定はよく勘違いされています。正規表現を正しく使用し無駄なマッチングが発生しないようにしましょう。
logrt[]キーでのファイル名の指定は勘違いが多い!
サポートをしていて常に思うことですが、logrt[]キーでのファイル名の指定に勘違いが多いです。
これは、MS DOS時代の悪影響と思っています。
いきなり動作の結論
を今回は書きます。(ソースコードで解説するまでもないので)
- エージェントは、ファイル名の文字列の最後の'/'を検索します。(Windowsの場合は、'\')
- 最後の'/'の前までがファイルの存在するディレクトリとなります。
- 最後の'/'の一文字先からが、ファイル名をマッチングさせるための正規表現となります。
たったこれだけです。
Zabbix エージェントは、ログファイルが存在する場合は、そのエントリを正規表現で検索します。
...
logrtの正規表現はファイル名でのみサポートされており、ディレクトリの正規表現でのマッチングはサポートされていません。
POSIX(拡張)正規表現はMS DOSとは違うよ!
多くの問い合わせであまり正しくないと思われるファイル名の指定がされています。
よくあるものとしては、以下のものです。
logrt[/var/log/zabbix/zabbix_server\.log*]
上記では、「/var/log/zabbixディレクトリにあるファイル群で、ファイル名がPOSIX拡張正規表現 zabbix_server\.log* にマッチするもの」が読み込み対象になります。
POSIX拡張正規表現では、「*は直前文字の0回以上の繰り返し」となります。
(ちなみに、「.は任意の一文字」となります。)
ですので、上記の場合、マッチングするファイル名は以下のようなものとなります。
- zabbix_server.lo
- zabbix_server.loggggg
- foozabbix_server.log
- zabbix_server.logbar
- foozabbix_server.lobar
- ...
多分ですが、*の使用を勘違いしているのは、MS DOSの影響と思っています。
正しい記述はどうすればいい?
多くの方が要望しているファイル名は以下のものだと思います。
- zabbix_server.logで始まる
- 末尾はlogの後に何も付かないか、'.一桁の数字'が付く
上記の場合は以下のようにします。
^zabbix_server\.log(|\.[[:digit:]])$
^で行頭であることを明示し、()で正規表現の集合を表しています。
()内では、何もないか、'.一桁の数字'のどちらかとなり、最後に'$'で行末であることを明示します。