ディレクトリが変わるログ監視について

いつもお世話になっております。
以下のように月始めに、
ディレクトリごとローテーションするログを監視したいと考えています。
logrt[/var/log/'ホスト名'/'yyyymm'/kanshi.log]

'ホスト名'は{HOST.HOST}マクロで取得出来そうなのですが、
'[yyyymm]'の箇所をどう実現してよいのか思いつきませんでした。
 ※{DATE} マクロを用いればいけそうな気もしたんですが、
  アイテムキーのパラメーターとして使用出来ない…となっていました。
https://www.zabbix.com/documentation/2.2/jp/manual/appendix/macros/suppo...

良い方法があればご教授頂きたく。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。

広瀬です。

実施されたい事に関しては私も同じ事を考えた事がありましたが、当該方法で1点不可能な点があります

> 'ホスト名'は{HOST.HOST}マクロで取得出来そうなのですが、

これが出来ません。以下、公式ドキュメント抜粋

『Zabbix 2.0.3以降、アイテムキーのパラメータでサポートされているHOST.*マクロは、インターフェースを含んでいるアイテムのタイプでしか動作しません。
すなわち、これらのマクロは、「Zabbixエージェント(アクティブ)」、「計算」などのタイプでは動作しません。 』

log/logrtアイテムはアクティブタイプを利用為なければならいので、上記実施に於いてはNG扱いとなります。Zabbix Ver1.8であれば可能です<ただし、HOST.HOSTではないですが

>'[yyyymm]'の箇所をどう実現してよいのか思いつきませんでした。

logrt[/var/log/tomcat/yyyymmdd/tomcat_err.yyyymmdd.log\..*\..*\.log,ERROR,UTF-8,]

私の場合、プレスホルダーとして指定していました。ただし、これは1.8の時に採用した手法だったので、2.x以降で可能かは不明です。
ディレクトリ、ファイル名ともにYYYYMMDDにあたる部分はその指定が可能でした。
尚、上記の「tomcat_err.yyyymmdd.log\..*\..*\.log」は後半部に正規表現使ってますので、この辺りは適時変更ください。

◆パスをLLDで拾ってくる

前述のとおり、HOST.HOSTマクロがZabbixエージェント(アクティブ)では使えないことがわかり、断念していましたが、2.xなのでLLD機能で
ファイル存在する場所をカスタムLLDで拾ってくる手法がありそうです。実際に実践されている方のブログだったかを拝見したことがあります
こちらの方がかなり有用そうです。LLDのフィルタ機能=正規表現を使えば取捨選択もできそうです

広瀬です

2.4.7で試してみましたが、Ver1.8で使えたディレクトリ補完のyyyymmddのプレスホルダー方式はダメそうです。
カスタムLLD方式は一提案としての建前ですので、必ずしも意図した対応ができるとは限りませんのでご承知おきください。

find /var/log/tomcat -name "zbx_err.*.*.log" -mmin -60|cut -d"/" -f-X|sort -u 

 ※cut文の最後の「X」はその時の階層に応じる。-name "*.log"と-type dは同時に使えないので・・・

こんな感じでPATHだけ取得し、カスタムLLDで出力する場合のJSON形式に出力する。
後は、ディスカバリー設定でPATHの取得インターバルと、旧ディレクトリが消える場合の排除期間を定義するのが良いかと
思われます。findのオプションのmminやmtimeで調整すれば省力化は可能なのかと思います。

# sh ./log.filepath.get.sh TOMCAT
{
 "data":[

      { "{#LOGPATH}":"/var/local/fluent/stuhost/tomcat/20160319" }
      { "{#LOGPATH}":"/var/local/fluent/xyzhost/tomcat/20160320" }
 ]
}

実態ファイルは、『{#LOGPATH}/\.*\.log,ERROR,UTF-8』すれば反映はされると思います。
ただし、前日ディレクトリには当日分ファイルは存在しないので、「there are no files matching~」というエラーが監視間隔
毎には出てしまうと思います。そこは許容せざるを得ません。

・・・かなぁ?というところです。

ユーザー TNK の写真

Zabbixのlogrt[]の機能では、ファイルのパス内のファイル名の部
分であれば、正規表現を利用することができますが、ディレクトリ
の部分にはマニュアルにもある通り「絶対パス」が必要となるので
'yyyymm'のような指定はできなかったはずです。

代案として、現在のログ出力に何を利用されているのかわかりませ
んが、監視用にsyslogなどで監視用にも転送して、そのファイルを
監視するような設定にすることが考えられます。

ただし、logrotateなどを利用してログのローテーションの設定も
忘れずに行うようにしてください。

ユーザー kaeru の写真

>wakaba様
詳細情報ありがとうございました。
カスタムLLD仕様がわかっていないため、現在テスト中です。
対応目途が付きましたらエビデンスとして回答させて頂きます。

>TNK様
ご回答ありがとうごじあます。
ご指摘の通り、ディレクトリに対して正規表現は出来ませんでした。
対象ログはアプリから出力されるもので、
syslog出力や、同ディレクトリへログ出力できないか確認しましたが、
仕様上変更がすぐに出来ないとのことで中々手こずっています。
将来的には同ディレクトリへファイル出力して頂き、
ローテーション設定をしたうえでlogrt[]で監視しようかと思います。