td-agentがAmazon Linuxで動作するか試してみた。
ちなみにrubyでも導入は簡単そうでした。
参考
http://docs.fluentd.org/articles/install-by-rpmhttp://docs.fluentd.org/articles/php
検証環境
- OS Amazon Linux 64bit
- インスタンスの種類 マイクロインスタンス
- ログの受信用サーバ1インスタンス
- ログの送信用サーバ1インスタンス
- PHP5.4から任意の値を送信(FuelPHP上で使ってみた)
1. td-agentのインストール
#次の1行をec2-userで実行した。 curl -L http://toolbelt.treasure-data.com/sh/install-redhat.sh | sh
ビルド済みのパッケージをインストールするだけなので、microインスタンスでもすぐに完了した。
Installing: td-agent x86_64 1.1.12-0 treasuredata 20 M Installing for dependencies: compat-libtermcap x86_64 2.0.8-49.2.amzn1 amzn-main 16 k compat-readline5 x86_64 5.2-17.3.amzn1 amzn-main 156 k openssl098e x86_64 0.9.8e-17.8.amzn1 amzn-main 894 k td-libyaml x86_64 0.1.4-1 treasuredata 125 k
2. 設定ファイル(ログ受信側)
/etc/td-agent/td-agent.conf<source> type forward port 24224 </source> <match log.**> type file path /var/log/fluent/log time_slice_format %Y%m%d%H (1時間毎にファイル分割してみた) time_slice_wait 10m time_format %Y%m%d %H:%M:%S compress gzip </match>
3. 設定ファイル(ログ送信側)
/etc/td-agent/td-agent.conf<source> type unix path /var/run/td-agent/td-agent.sock </source> <match log.**> type forward send_timeout 60s recover_wait 10s heartbeat_interval 1s phi_threshold 8 hard_timeout 60s <server> host 10.***.***.***(受信サーバのプライベートIPアドレス) port 24224 </server> <secondary> type file path /var/log/fluent/forward-failed </secondary> </match>
4. SecurityGroupsの設定
td-agentは、デフォルトで24224番ポートを使用するが、TCPとUDPの両方を使用するので、両方開けておく必要がある。
http://docs.fluentd.org/articles/in_forward
http://docs.fluentd.org/articles/out_forward
5. td-agentの起動
送信、受信双方のtd-agentを起動する。起動 /etc/init.d/td-agent start 停止 /etc/init.d/td-agent stop 再起動 /etc/init.d/td-agent restart 状態確認 /etc/init.d/td-agent status 自動起動 chkconfig --level 345 td-agent on
6. fluent-logger-phpのインストール
公式サイト掲載のパッケージをそのまま利用してみた。git clone https://github.com/fluent/fluent-logger-php.git cp -r src/Fluent /path/to/
7. ログを送信してみたサンプルコード
require_once '/path/to/Fluent/Autoloader.php'; use Fluent\Logger\FluentLogger; Fluent\Autoloader::register(); $key = 'log.pv'; $val = array( 'time' => date('Y-m-d H:i:s'), 'member_id' => 'aaaaaaa', 'useragent' => $_SERVER['HTTP_USER_AGENT'], 'ipaddress' => $_SERVER['HTTP_X_FORWARDED_FOR'], ); $logger = new FluentLogger("unix:///var/run/td-agent/td-agent.sock"); $logger->post($key, $val);
8. 試してみた感想
出力されるログは、JSON形式なので集計するときに取り扱いが簡単ですね。また、追加したい値が増えてもこれなら気兼ねなく追加できます。
基本的なことでかつ重要なことですが、今のところログの取りこぼしがありません。
試しに受信側落としてみたらセカンダリーに出力してくれるし、設定によってはコピーして転送してくれたりで、
冗長化や障害時のリカバリーも可能ですね。
日々すごい量のトラフィックをさばいている次の企業で導入されているのも納得です。
http://docs.fluentd.org/articles/users
あと、td-agentならrubyではない環境でも簡単にfluentdが導入できそうです。
ただし、Windowsは除くようですが・・・。
Fluentd doesn't run on Windows.
0 件のコメント:
コメントを投稿