ファイルが作成されたら自動追尾するfluent-agent-chimeraを作りました
特定のディレクトリ配下に、任意のタイミングでディレクトリが新規作成されて、その配下にログが出力されているような状況下で、そのログをin_tailで取り込みたいという必要性から、fluent-agent-chimera
を作りました。
目次
例えば というディレクトリ、ファイルがあるとします。 これに対して、設定ファイルとして以下のようなものを用意します。 この設定でfluent-agent-chimeraを起動すると、まず のファイルが監視対象となり、ログが出力されると指定のfluentサーバにログがforwardされます。 ここで というファイルが作成されると、dir1/hoge_20180202.log は監視対象からはずれ、dir1/hoge_20180203.log が監視対象となります。 さらに が作成されれば、このファイルも新たに監視対象となります。 このように、監視対象のディレクトリと、正規表現にマッチするファイル(ただし、ファイル名に日付を含むファイル)を新規に作成されるものも含めて自動追尾して、fluentサーバにログをforwardしてくれるのが、fluent-agent-chimeraです。 まぁ、アプリとかバッチのログ出力をちゃんと最初から設計して、普通にfluentやfluent-agent-hydraなどで追えるようにしおけばこんなものは不要なのですが、いろいろ事情もあるわけで(つらい)、こんな GitHubのリポジトリにも書いていますが、fluent-agent-chimeraは、@fujiwara さんの です。基本的な構成は同じで、inotifyでの処理部分を作り込みつつ、in_forwardを削ったり、ファイルの中身を処理するところ削ったりしています。 fluent-agent-chimeraは、基本的に新規作成ファイルの検知がメインで、あとはなるべくローカルのfluentに処理を移譲する、という想定でいます。 あとは、fluentのclientとして、@lestrrat さんの に変更しまいた。fluent-agent-hydraを大きく書き換えているので、fluentのclient部分をfluent-agent-hydraに組み込まれているfluent clientに依存させると、それに追随するのも手間かなと思ったのと、単にいじってみたかったので、変えました。そのおかげで、unix domain socketでfluentサーバと通信も可能です。 今回、初めてGoのソースを公開するってのをしたのですが、一連の公開の手順については、@songmu さんの を多いに参考にさせてもらいました。 goxz 含めて、gobump, ghr, ghch などが見事に連携されていて、このやり方が標準になれば良いのでは、と個人的には思ったほどです。多分、今後もこれにならう感じになりそうです。 個人的には、やっぱりGoは肌にあっているなぁという感じです。もっとGoを書いていきたい。 で、もし感想とかありましたら、@takakiku までいただけると嬉しいかもです。どういうものか
/path/to/batchdir
- dir1
- hoge_20180201.log
- hoge_20180202.log
- xxxx_20180201
- yyyy.log
- dir2
- hoge_20180201.log
[Server]
Network = "tcp"
Address = "127.0.0.1:24224"
[[Logs]]
Tag = "batch"
Basedir = "/path/to/batchdir"
Recursive = true
TargetFileRegexp = "^.+/batchdir/.*(\\d{8})(?:.*\\.log)?$"
FileTimeFormat = "20060102"
/path/to/batchdir
- dir1
- hoge_20180202.log
- xxxx_20180201
- dir2
- hoge_20180201.log
/path/to/batchdir/dir1/hoge_20180203.log
/path/to/batchdir/dir3/hoge_20180202.log
闇のようなツールを生み出しました。実装について
そのほか
最後に