Shadow Server on Fluentd at Fluentd Casual Talks #3

5,670 views

Published on

Published in: Education
0 Comments
22 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,670
On SlideShare
0
From Embeds
0
Number of Embeds
1,475
Actions
Shares
0
Downloads
46
Comments
0
Likes
22
Embeds 0
No embeds

No notes for slide

Shadow Server on Fluentd at Fluentd Casual Talks #3

  1. 1. Fluentd で Shadow サーバ用意し たら捗った話(と性能検証の話) December 13th, 2013 Naotoshi Seo @sonots PFSYS DEPT, GPS DIV., DeNA Co., Ltd. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  2. 2. かじゅある!(挨拶 2 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  3. 3. 自己紹介 ・Naotoshi Seo ・@sonots ・インフラアプリエンジニア ・Fluentdコミッタ 3 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  4. 4. Haikanko Fluentd クラスタ管理ツール ログのパス ホスト  監視ワード デプロイボタン http://blog.livedoor.jp/sonots/archives/23590458.html Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  5. 5. Yohoushi 分散GrowthForecastグラフツール http://blog.livedoor.jp/sonots/archives/29646713.html Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  6. 6. Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  7. 7. 弊社のFluentd事例 7 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  8. 8. Fluentdの用途 ⁃ ログ監視 ⁃ grep, grepcounter, ikachan, mail ⁃ ログ可視化 ⁃ datacounter, numeric-monitor, calc, yohoushi, record-reformer ⁃ ログ収集 ⁃ rewrite, file-alternative http://blog.livedoor.jp/sonots/archives/25861525.html 8 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  9. 9. アーキテクチャ watcherを監視 ・ホスト毎の通知をまとめたりグラフ集計する serializer ノード ・fluent-plugin-ping-message を使った Fluentd プロセスの生存監視 9 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  10. 10. 弊社の事例の規模 ⁃ Fluentd152プロセス ⁃ 600万行/min ⁃ 10万行/sec (at peak) 世界最大級の Fluentd ユーザ (conf的な意味でw 10 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  11. 11. 本題 11 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  12. 12. 困ってるんです(31歳 男性 ⁃ Fluentd のプラグインを作った!単体テストも書いた! ⁃ 実際に本番に入れてみてたら変なデータ(例えば UTF-8 invalid とかとか!)が入ってきてあぼーん ⁃ Fluentd の設定を書いた!動作確認もした! ⁃ 実際に本番に入れてみたら負荷があがってあぼーん あるある! 12 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  13. 13. そこで Shadow サーバ 13 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  14. 14. Shadow (プロキシ)サーバとは Webアプリケーションのテストをいくら入念に整備したとしても、実際 に起こり得るすべての可能性を網羅することは難しいのはもちろん、同じ コードを複数の環境(言語やフレームワーク、ミドルウェア等のバージョ ン)で同じように動作することを保証するのは至難の業です。そこで、ユ ーザの実リクエストを複製して、稼働中の環境とは別に用意したテスト用 の環境にもリクエストを送ることで検証をするというアプローチがとられ ます。そのために使われるツールのことを、シャドウプロキシサーバ (shadow proxy server)と呼びます。 主な実装 ・Kage (Ruby) ・Geest (Perl) ・Delta (Go) http://qiita.com/kentaro/items/17e2c334a902677af995 14 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  15. 15. それ Fluentdでも やりたい ;-) 15 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  16. 16. できます 16 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  17. 17. しかも簡単に 17 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  18. 18. # deliver.conf <match **> type copy <store> type forward <server> host real.local port 24224 </server> </store> <store> type forward <server> host shadow.local port 24224 </server> </store> </match> type copy して shadow サーバに forward するだけ (web サーバのようにレスポンスを切る必要すらない) Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. 18
  19. 19. かじゅある! 19 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  20. 20. 導入できたし RubyConf にでも行くか @Miami http://blog.livedoor.jp/sonots/archives/34188090.html 20 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  21. 21. リーダー「ちょっと待った。 Fluentdのメモリ使用量すご い増えてない?」 21 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  22. 22. 22 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  23. 23. え 23 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  24. 24. /(^o^)\ 24 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  25. 25. リーダー「直してからMiami 行こうね(にっこり」 25 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  26. 26. カジュアルすぎた orz カジュアルに試せるように導入したのに ... 26 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  27. 27. ちゃんと 性能検証します ... 27 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  28. 28. ここから性能検証の話 28 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  29. 29. dummy_log_generator ⁃ ログを吐き出しまくるツール ⁃ 特徴 ⁃ rate (行数/秒)を指定できる ⁃ ログメッセージをランダム生成できる ⁃ dummy_log_generator_simple も付属 ⁃ システムのI/O限界を引き出せる http://qiita.com/sonots/items/750da77a18e62852a02f 29 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  30. 30. 検証環境 ⁃ CPU: Xeon E5-2670 2.60GHz x 2 (32コア) ⁃ メモリ: 24G ⁃ ディスク読み込み: 250MB/sec (hdparamベンチ) ⁃ ディスク書き込み: 160MB/sec (ddベンチ) 30 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  31. 31. ログ読み込み(送信なし) 限界 lines / sec CPU (%) メモリ (kB) fluent-agent-lite 560,219 99.8 952 fluentd v10 (in_tail) 157,148 100.4 38,280 fluentd v10 (in_tail_ex) 154,107 100.1 43,980 fluentd v11 (in_tail) 159,178 99.8 27,372 ・fluent-agent-lite はログ送信しないように改変 https://gist.github.com/sonots/7586077 ・負荷なく計測できるように https://github.com/sonots/fluent-plugin-flowcounter-simple を作成 31 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  32. 32. ログ送信 32 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  33. 33. out_forward のパラメータ http://d.hatena.ne.jp/tagomoris/20120731/1343707793 33 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  34. 34. chunk 毎にTCPソケットをopen/close http://www.slideshare.net/harukayon/fluentd-22317236 34 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  35. 35. ログ送信(1) fluentd v10 (out_forward) buffer_chun k_limit num_thre 限界 lines / sec CPU (%) ads 100k 32 32000 1m 32 100936 100% 10m 32 88208 100% 100m 8 メモリ (kB) 88814 備考 [warn] size of the emitted data exceeds buffer_chunk_limit. 165212 安定時は 150000 lines /sec だ がそれを超えると詰まり始める 詰まった。10 sec に1回まとめ て 888143 行の emit fluentd v10 (keep_forward with keepalive) buffer_chun k_limit num_thre 限界 lines / sec CPU (%) ads 1m 32 115460 103% メモリ (kB) 備考 chunk が小さい場合、keepalive に効果あり。10m では効果なし flush_interval はメモリを出来る限り早く空けるために 0s に固定 buffer_queue_limit は「queue size limit exceeds」の warn が出ない程度に大きくした 35 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  36. 36. ログ送信(2) 受信(in_forward)は受け取って捨てるだけ (type null) fluent-agent-lite 限界 lines / sec 送信 CPU (%) メモリ (%) 受信 CPU (%) メモリ (%) 528,749 99.8 87% 0.1% 0.3% out_forward はなぜ詰まる? ⁃ fluent-agent-lite はログを送信できない場合は、読み込ま ない、という制御が入っている ⁃ 一方、fluentd は、ログを送信できなくても、どんどんログを 読み込んでしまう ⁃ バッファにログが溜まってどんどん処理効率が落ちて性能劣化 ・fluentd の out_forward にログを出すパッチ https://gist.github.com/sonots/7646378 をあてて計測 ・out_forward って詰まると劣化する? http://togetter.com/li/595607 36 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  37. 37. ログ送信まとめ ⁃ fluentd の送信制御は out_forward 側で行われる ⁃ fluent-agent-lite は素晴らしい ⁃ 全く詰まりなし ⁃ 528,749 lines /sec ⁃ out_forward 安定パラメタ ⁃ flush_interval 0s ⁃ buffer_chunk_limit 1m ⁃ num_threads 32 (サーバの数に合わせて要調節) ⁃ 100,936 lines / sec ⁃ chunk が 1m 程度に小さい場合 keepalive に効果あり 37 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  38. 38. 全体まとめ ⁃ Shadow サーバを導入しました ⁃ かじゅあるに本番データでテスト可能になった :D ⁃ Haikanko で Shadow だけ更新できるようにしている ⁃ Deliver ノードの安定パラメータを紹介 ⁃ buffer_chunk_limit 1m が安定 ⁃ ※ただし、詰まりがなければ 10m のほうが性能は出る ⁃ num_threads も大きくしましょう ⁃ 色々作った ⁃ ベンチマークツール dummy_log_generator ⁃ keep_forward で keepalive 接続 38 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  39. 39. Appendix:アーキテクチャ watcherを監視 ・ホスト毎の通知をまとめたりグラフ集計する serializer ノード ・fluent-plugin-ping-message を使った Fluentd プロセスの生存監視 39 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  40. 40. Appendix: 監視の話 ⁃ プロセス監視 ⁃ fluentd は daemontools で起動しているので svstat で生死監視 ⁃ fluent-plugin-ping-message で agent 含め生死監視 ⁃ 重複デーモン監視: 直っているのでやってない ⁃ 負荷監視 ⁃ flowcounter で流量を監視。安定稼働できる流量を把握 ⁃ queue size limit exceeds (out_forward で詰まると出る) ⁃ detached forwarding server の頻度 ⁃ その他各種プラグインのエラーログメッセージ http://www.slideshare.net/GedowFather/fluentd-meetup-2-fluentd http://docs.fluentd.org/ja/articles/monitoring 40 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.
  41. 41. Fluentd Advent Calendar まだ空いてます! http://qiita.com/advent-calendar/2013/fluentd Thank you 41 Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

×