前回に続いて、ログ収集ソフトのfluentdをいじろうと思います。せっかくなので、リモートホストのアクセスログの収集も検証してみよう。
インストールについては前回やったので割愛するけども、td-agentユーザが追加されたことでZabbixからという警告が大量に届いたのだが、これは/etc/passwdのチェックサムが合わないときに発せられる警告らしい。
デフォルトのテンプレートを使ってるだけなんだけど、守られている感があってなかなかいいね。
でも警告のクリアのやり方が分からないので、zabbixserverをリロードして放置している。
では話を戻して、リモートのログ収集だけども、トランシーバーと同じく、送信側と受信側のどちらにも設定が必要なんだけど、confファイルの書き方は非常にシンプルにできていて、単一サーバーで使う時と同じように
source と match だけでいい。
試してみた結果の注意としては、matchの名前は分けて使うのが良いと思います。今回はテストという事で同じものを流用しましたが、訳がワカラナイログになってしまいます。
まず受信側
## Input
<source>
type forward
port 24224
bind 0.0.0.0
</source>
## Input
<source>
type tail
path /var/log/httpd/access_log
format apache2
pos_file /var/log/td-agent/tmp/apache.access.log.pos
tag apache.access
</source>
## Output
<match apache.access>
type file
path /var/log/td-agent/apache.access
time_slice_format %Y%m%d
time_format %Y%m%dT%H%M%S%z
</match>
なんということでしょう。
<source>
type forward
port 24224
bind 0.0.0.0
</source>
前回のものに上の部分が追加されただけです。これだけで動くのだから、fluentdが如何に大規模用に作られたのかというのが分かるし、シンプルなものを作れる人はすごいな。
2点だけ要注意で、ファイルのパーミッションと、ファイアウォールは利用するポートはTCPとUDPともに開けないといけないようだ。
受信側はこんな感じでした。
続いて送信側。
送信側は意図的に受信側に似せているので(コピペともいうけど)、実際に使うにはちょと注意が必要かも。
だけど、うまく工夫して使えば、かなり使えるようには思える。
## Input
## 受信側と同じでもOKだね。
<source>
type tail
path /var/log/httpd/access_log
format apache2
pos_file /var/log/td-agent/tmp/apache.access.log.pos
tag apache.access
</source>
## Output
<match apache.access> ##送信のディレクティブ
type copy
<store> # <store>を使って分岐ができ、これはローカルにも残すような設定です。
type file
path /var/log/td-agent/apache.access
time_slice_format %Y%m%d
time_format %Y%m%dT%H%M%S%z
</store>
<store> # こっちがログサーバーへ飛ばす記述。
type forward
send_timeout 60s
recover_wait 10s
heartbeat_interval 1s
phi_threshold 8
hard_timeout 60s
<server> # 送信先サーバーの情報を記述する。
name hoge server # ホスト名じゃなくてOKみたい。
host ***.***.***.***
port 24224
</server>
</store>
</match>
数台のログを1つにまとめられて便利だね。
こんな感じで、最初はちょっと手間取ったけど、かなりお手軽にログの集中管理ができるようになっているようでした。
なかなかおもしろいもんだね。
参考サイト
fluentdで始めるログ管理【フォワード設定まとめ】 | eXcale Developer’s Blog