はじめに
前回、fluentd(td-agent)を使って同一サーバ内でテストしてみたので今回はサーバ間で転送してみるテストです
また、起動スクリプトを編集して詳細なログも出して確認してみます
補足
そんなにテクニカルでも有用でもないカモですがこちらにメモまとめをメモっておきました
→td-agent(fluentd)を本番サ―ビスで小さく使ってみたメモ-まとめ
やりたいことはこんな感じ
概要
1.webサーバではアプリケーションのログをjson形式でファイルに書き出している(log4phpとかで)。
2.それをfluentd(td-agent)でtailして、ログサーバに転送する。
3.ログサーバでは受け取ったjson形式のログを所定の場所にファイルとして書き出す。
4.それらを詳細なログを出してみてみる
※3.の部分をのちのちmongodbに入れるように変える予定
イメージ
以降の説明では
webサーバをsv1、webサーバをsv2と呼ぶことにします
また、今回はgemから入れるfluentdではなく、td-agentでやることにします
td-agentについて
http://docs.fluentd.org/ja/articles/install-by-rpm
やってみる
主な手順はこちら
-- sv1、sv2共通 --
1.td-agentダウンロード&インストール
2.td-agent起動&停止の確認-- sv1(送信側) --
3.td-agentの設定&forward準備
4.td-agentの詳細なログを出す設定をしてみる
5.起動&動作確認-- sv2(受信側) --
6.td-agentの設定&forward準備
7.td-agentの詳細なログを出す設定をしてみる
8.起動&動作確認-- sv1、sv2合わせて --
9.iptablesを設定して疎通確認
10.やってみるテスト
ではさっそく。。
sv1、sv2共通
1.td-agentダウンロード&インストール
※ダウンロード # cd /usr/local/src # sudo wget http://packages.treasure-data.com/redhat/x86_64/td-agent-1.1.17-0.x86_64.rpm # sudo wget http://packages.treasure-data.com/redhat/x86_64/td-libyaml-0.1.4-1.x86_64.rpm ※インストール # sudo yum localinstall td-agent-1.1.17-0.x86_64.rpm td-libyaml-0.1.4-1.x86_64.rpm
2.td-agent起動&停止の確認
※起動 # sudo /etc/init.d/td-agent start Starting td-agent: [ OK ] ※ステータスを確認 # sudo /etc/init.d/td-agent status td-agent (pid 7711) を実行中... ※プロセスを確認 # ps aux | grep td td-agent 7711 0.0 0.1 212984 15700 ? Sl 16:35 0:00 /usr/lib64/fluent/ruby/bin/ruby /usr/sbin/td-agent --group td-agent --log /var/log/td-agent/td-agent.log --daemon /var/run/td-agent/td-agent.pid td-agent 7714 1.0 0.2 258240 26516 ? Sl 16:35 0:00 /usr/lib64/fluent/ruby/bin/ruby /usr/sbin/td-agent --group td-agent --log /var/log/td-agent/td-agent.log --daemon /var/run/td-agent/td-agent.pid hoge 7805 0.0 0.0 107456 916 pts/91 S+ 16:35 0:00 grep td- ※ログも確認 # less /var/log/td-agent/td-agent.log 2013-12-03 16:35:07 +0900 [info]: starting fluentd-0.10.39 2013-12-03 16:35:07 +0900 [info]: reading config file path="/etc/td-agent/td-agent.conf" 2013-12-03 16:35:07 +0900 [info]: using configuration file: <ROOT> <match td.*.*> type tdlog apikey YOUR_API_KEY auto_create_table buffer_type file buffer_path /var/log/td-agent/buffer/td </match> <match debug.**> type stdout </match> <source> type forward </source> <source> type http port 8888 </source> <source> type debug_agent bind 127.0.0.1 port 24230 </source> </ROOT> 2013-12-03 16:35:07 +0900 [info]: adding source type="forward" 2013-12-03 16:35:07 +0900 [info]: adding source type="http" 2013-12-03 16:35:07 +0900 [info]: adding source type="debug_agent" 2013-12-03 16:35:07 +0900 [info]: adding match pattern="td.*.*" type="tdlog" 2013-12-03 16:35:07 +0900 [info]: adding match pattern="debug.**" type="stdout" 2013-12-03 16:35:07 +0900 [info]: listening fluent socket on 0.0.0.0:24224 2013-12-03 16:35:07 +0900 [info]: listening dRuby uri="druby://127.0.0.1:24230" object="Engine" ※止めてみる # sudo /etc/init.d/td-agent stop Shutting down td-agent: [ OK ] ※確認 # ps aux | grep td- hoge 19649 0.0 0.0 107452 932 pts/91 S+ 17:11 0:00 grep td-
sv1(送信側)
3.td-agentの設定&forward準備
※一応バックアップを保存(tmplateもあるけど。。) # sudo cp -ap /etc/td-agent/td-agent.conf /etc/td-agent-forwardtest.conf ※設定ファイル編集 # sudo vi /etc/td-agent/td-agent-forwardtest.conf -- vi -- <source> type tail format json path /var/log/td-agent/forward_test_input.log pos_file /var/log/td-agent/forward_test_log.pos tag json.forward.test </source> <match json.forward.test> type forward <server> host 192.168.72.2 port 24224 </server> </match> -------- ※読み込みファイルの変更方法がわからなかったのでtd-agent.confにinclude # sudo vi /etc/td-agent/td-agent.conf --viで追記-- include td-agent-forwardtest.conf --------
4.td-agentの詳細なログを出す設定をしてみる
公式サイトにもありますが、/etc/init.d/td-agent(起動スクリプト)を直接編集します
今現在は、viで直接開いて34行目でした。--log /var/log/td-agent/td-agent.logの後ろに-vvを追記します
# sudo vi /etc/init.d/td-agent -- vi -- TD_AGENT_ARGS="${TD_AGENT_ARGS-/usr/sbin/td-agent --group td-agent --log /var/log/td-agent/td-agent.log}" ↓ #TD_AGENT_ARGS="${TD_AGENT_ARGS-/usr/sbin/td-agent --group td-agent --log /var/log/td-agent/td-agent.log}" TD_AGENT_ARGS="${TD_AGENT_ARGS-/usr/sbin/td-agent --group td-agent --log /var/log/td-agent/td-agent.log -vv}" --------
5.起動&動作確認
↑のほうで詳細じゃないほうのログも乗せてます。
traceレベルのログが出たり、fluent/supervisor.rb:169:supervise:みたいにバックトレース的なのがでました
また、tail -fしてちょっとたつと最後にdetachedと出ます。
これはsv2(受信側)の設定をしてないためなので気にせずそのまま次へ。。
# sudo /etc/init.d/td-agent start # tail -f /var/log/td-agent/td-agent.log 2013-12-06 12:02:41 +0900 [info]: fluent/supervisor.rb:169:supervise: starting fluentd-0.10.39 2013-12-06 12:02:41 +0900 [info]: fluent/supervisor.rb:271:read_config: reading config file path="/etc/td-agent/td-agent.conf" 2013-12-06 12:02:41 +0900 [trace]: fluent/plugin.rb:87:register_impl: registered buffer plugin 'file' 2013-12-06 12:02:41 +0900 [trace]: fluent/plugin.rb:87:register_impl: registered buffer plugin 'memory' ・・・省略・・・ 2013-12-06 12:02:41 +0900 [trace]: fluent/plugin.rb:87:register_impl: registered input plugin 'tail' ・・・省略・・・ <secondary> type file path /var/log/td-agent/forward-failed </secondary> </match> </ROOT> 2013-12-06 12:02:41 +0900 [info]: fluent/engine.rb:94:block in configure: adding source type="tail" 2013-12-06 12:02:41 +0900 [info]: fluent/engine.rb:110:block in configure: adding match pattern="json.forward.test" type="forward" 2013-12-06 12:02:41 +0900 [info]: plugin/out_forward.rb:87:block in configure: adding forwarding server '192.168.72.2:24224' host="192.168.72.2" port=24224 weight=60 2013-12-06 12:02:41 +0900 [debug]: plugin/out_forward.rb:170:rebuild_weight_array: rebuilding weight array lost_weight=0 2013-12-06 12:02:41 +0900 [info]: plugin/in_tail.rb:289:initialize: following tail of /var/log/td-agent/forward_test_input.log 2013-12-06 12:06:54 +0900 [warn]: plugin/out_forward.rb:406:tick: detached forwarding server '192.168.72.2:24224' host="192.168.72.2" port=24224 phi=8.41515295486209 2013-12-06 12:06:54 +0900 [debug]: plugin/out_forward.rb:170:rebuild_weight_array: rebuilding weight array lost_weight=60 <span style="color:#ff4500">※↑sv2設定してないのでdetachedされる</span>
sv2(受信側)
6.td-agentの設定&forward準備
※一応バックアップを保存(tmplateもあるけど。。) # sudo cp -ap /etc/td-agent/td-agent.conf /etc/td-agent-receivetest.conf ※設定ファイル編集 # sudo vi /etc/td-agent/td-agent-receivetest.conf -- vi -- <source> type forward port 24224 </source> <match json.forward.test> type file path /var/log/td-agent/forward_test_output.log </match> -------- ※td-agent.confにinclude # sudo vi /etc/td-agent/td-agent.conf --viで追記-- include td-agent-receivetest.conf -------- |||< ***7.td-agentの詳細なログを出す設定をしてみる sv1と同じです >|| # sudo vi /etc/init.d/td-agent -- vi -- TD_AGENT_ARGS="${TD_AGENT_ARGS-/usr/sbin/td-agent --group td-agent --log /var/log/td-agent/td-agent.log}" ↓ #TD_AGENT_ARGS="${TD_AGENT_ARGS-/usr/sbin/td-agent --group td-agent --log /var/log/td-agent/td-agent.log}" TD_AGENT_ARGS="${TD_AGENT_ARGS-/usr/sbin/td-agent --group td-agent --log /var/log/td-agent/td-agent.log -vv}" --------
8.起動&動作確認
# sudo /etc/init.d/td-agent start # tail -f /var/log/td-agent/td-agent.log 2013-12-06 12:21:05 +0900 [info]: fluent/supervisor.rb:169:supervise: starting fluentd-0.10.39 2013-12-06 12:21:05 +0900 [info]: fluent/supervisor.rb:271:read_config: reading config file path="/etc/td-agent/td-agent.conf" 2013-12-06 12:21:05 +0900 [trace]: fluent/plugin.rb:87:register_impl: registered buffer plugin 'file' ・・・省略・・・ <source> type forward port 24224 </source> <match json.forward.test> type file path /var/log/td-agent/forward_test_output.log flush_interval 1s </match> </ROOT> 2013-12-06 12:21:05 +0900 [info]: fluent/engine.rb:94:block in configure: adding source type="forward" 2013-12-06 12:21:05 +0900 [info]: fluent/engine.rb:110:block in configure: adding match pattern="json.forward.test" type="file" 2013-12-06 12:21:05 +0900 [info]: plugin/in_forward.rb:64:listen: listening fluent socket on 0.0.0.0:24224
sv1、sv2合わせて
9.iptablesを設定して疎通確認
5.起動&動作確認でsv1のログでdetachedされてるのを確認しましたが、
port24224でやりとりするためにiptablesを編集します。
※TCPとUDP両方やる必要があるみたいです
下記の行を追加して再起動しました
# sudo vi /etc/sysconfig/iptables -- vi -- -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 24224 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 24224 -j ACCEPT -------- # sudo /etc/init.d/iptables restart iptables: チェインをポリシー ACCEPT へ設定中filter nat [ OK ] iptables: ファイアウォールルールを消去中: [ OK ] iptables: モジュールを取り外し中: [ OK ] iptables: ファイアウォールルールを適用中: [ OK ]
iptablesも設定したので、再度sv1の/var/log/td-agent/td-agent.logを再度見てみます
tail -f /var/log/td-agent/td-agent.logの内容↓
2013-12-06 12:06:54 +0900 [warn]: plugin/out_forward.rb:406:tick: detached forwarding server '192.168.72.2:24224' host="192.168.72.2" port=24224 phi=8.41515295486209 2013-12-06 12:06:54 +0900 [debug]: plugin/out_forward.rb:170:rebuild_weight_array: rebuilding weight array lost_weight=60 2013-12-06 12:58:27 +0900 [warn]: plugin/out_forward.rb:422:heartbeat: recovered forwarding server '192.168.72.2:24224' host="192.168.72.2" port=24224 2013-12-06 12:58:27 +0900 [debug]: plugin/out_forward.rb:170:rebuild_weight_array: rebuilding weight array lost_weight=0
detachedのログの後に、recoveredと出たのでちゃんと疎通できました
10.やってみるテスト
それでは
sv1で指定したinputファイルに直接json文字列を書き込むと、
(fluentdがtailで読んでsv2に転送して)
sv2で指定したoutputファイルにそれが書き込まれるかのテストしてみます
sv1で下記実行
# echo '{"json":"td-agent_no_message_from_sv1", "date":"'`date "+%Y-%m-%dT%T"`'"}' | sudo tee -a /var/log/td-agent/forward_test_input.log # echo '{"json":"td-agent_no_message_from_sv1", "date":"'`date "+%Y-%m-%dT%T"`'"}' | sudo tee -a /var/log/td-agent/forward_test_input.log # echo '{"json":"td-agent_no_message_from_sv1", "date":"'`date "+%Y-%m-%dT%T"`'"}' | sudo tee -a /var/log/td-agent/forward_test_input.log
sv2で/var/log/td-agent/forward_test_output.logに書かれるか確認
# less forward_test_output.log.20131206_0.log 2013-12-06T13:05:05+09:00 json.forward.test {"json":"td-agent_no_message_from_sv1","date":"2013-12-06T13:05:05"} 2013-12-06T13:05:06+09:00 json.forward.test {"json":"td-agent_no_message_from_sv1","date":"2013-12-06T13:05:06"} 2013-12-06T13:05:06+09:00 json.forward.test {"json":"td-agent_no_message_from_sv1","date":"2013-12-06T13:05:06"}
無事転送されてログが書き出されました!
おわりに
結構長い記事になっちゃいましたがやってみると楽しいですね!enjoy!