Shadow Server on Fluentd at Fluentd Casual Talks #3

41
Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved. Fluentd で Shadow サーバ用意し たら捗った話(と性能検証の話) December 13th, 2013 Naotoshi Seo @sonots PFSYS DEPT, GPS DIV., DeNA Co., Ltd.

Transcript of Shadow Server on Fluentd at Fluentd Casual Talks #3

Page 1: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

Fluentd で Shadow サーバ用意したら捗った話(と性能検証の話)

December 13th, 2013

Naotoshi Seo @sonotsPFSYS DEPT, GPS DIV.,DeNA Co., Ltd.

Page 2: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

かじゅある!(挨拶

2

Page 3: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

自己紹介

3

・Naotoshi Seo・@sonots・インフラアプリエンジニア・Fluentdコミッタ

Page 4: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

HaikankoFluentd クラスタ管理ツール

ログのパス

ホスト  監視ワード

デプロイボタン

http://blog.livedoor.jp/sonots/archives/23590458.html

Page 5: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

http://blog.livedoor.jp/sonots/archives/29646713.html

Yohoushi分散GrowthForecastグラフツール

Page 6: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

Page 7: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

弊社のFluentd事例

7

Page 8: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

Fluentdの用途

8

⁃ ログ監視⁃ grep, grepcounter, ikachan, mail

⁃ ログ可視化⁃ datacounter, numeric-monitor, calc, yohoushi, record-reformer

⁃ ログ収集⁃ rewrite, file-alternative

http://blog.livedoor.jp/sonots/archives/25861525.html

Page 9: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

アーキテクチャ

9

・ホスト毎の通知をまとめたりグラフ集計する serializer ノード・fluent-plugin-ping-message を使った Fluentd プロセスの生存監視

watcherを監視

Page 10: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

弊社の事例の規模

10

⁃ Fluentd152プロセス⁃ 600万行/min⁃ 10万行/sec (at peak)

世界最大級のFluentdユーザ

(conf的な意味でw

Page 11: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

本題

11

Page 12: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

困ってるんです(31歳 男性

12

⁃ Fluentd のプラグインを作った!単体テストも書いた!⁃ 実際に本番に入れてみてたら変なデータ(例えば UTF-8 invalid とかとか!)が入ってきてあぼーん

⁃ Fluentd の設定を書いた!動作確認もした!⁃ 実際に本番に入れてみたら負荷があがってあぼーん

あるある!

Page 13: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

そこでShadowサーバ

13

Page 14: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

Shadow (プロキシ)サーバとは

Webアプリケーションのテストをいくら入念に整備したとしても、実際に起こり得るすべての可能性を網羅することは難しいのはもちろん、同じコードを複数の環境(言語やフレームワーク、ミドルウェア等のバージョン)で同じように動作することを保証するのは至難の業です。そこで、ユーザの実リクエストを複製して、稼働中の環境とは別に用意したテスト用の環境にもリクエストを送ることで検証をするというアプローチがとられます。そのために使われるツールのことを、シャドウプロキシサーバ(shadow proxy server)と呼びます。

14

http://qiita.com/kentaro/items/17e2c334a902677af995

主な実装・Kage (Ruby)・Geest (Perl)・Delta (Go)

Page 15: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

それFluentdでもやりたい ;-)

15

Page 16: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

できます

16

Page 17: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

しかも簡単に

17

Page 18: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.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 サーバのようにレスポンスを切る必要すらない)

Page 19: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

かじゅある!

19

Page 20: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

導入できたしRubyConf にでも行くか

@Miami

20

http://blog.livedoor.jp/sonots/archives/34188090.html

Page 21: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

リーダー「ちょっと待った。Fluentdのメモリ使用量すご

い増えてない?」

21

Page 22: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

22

Page 23: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

23

Page 24: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

/(^o^)\

24

Page 25: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

リーダー「直してからMiami行こうね(にっこり」

25

Page 26: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

カジュアルすぎた orzカジュアルに試せるように導入したのに ...

26

Page 27: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

ちゃんと性能検証します ...

27

Page 28: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

ここから性能検証の話

28

Page 29: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

dummy_log_generator

29

⁃ ログを吐き出しまくるツール⁃ 特徴⁃ rate (行数/秒)を指定できる⁃ ログメッセージをランダム生成できる⁃ dummy_log_generator_simple も付属⁃ システムのI/O限界を引き出せる

http://qiita.com/sonots/items/750da77a18e62852a02f

Page 30: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

検証環境

30

⁃ CPU: Xeon E5-2670 2.60GHz x 2 (32コア)⁃ メモリ: 24G⁃ ディスク読み込み: 250MB/sec (hdparamベンチ)⁃ ディスク書き込み: 160MB/sec (ddベンチ)

Page 31: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

ログ読み込み(送信なし)

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 を作成

Page 32: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

ログ送信

32

Page 33: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

out_forward のパラメータ

33

http://d.hatena.ne.jp/tagomoris/20120731/1343707793

Page 34: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

34

http://www.slideshare.net/harukayon/fluentd-22317236

chunk 毎にTCPソケットをopen/close

Page 35: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

ログ送信(1)

35

flush_interval はメモリを出来る限り早く空けるために 0s に固定buffer_queue_limit は「queue size limit exceeds」の warn が出ない程度に大きくした

buffer_chunk_limit

num_threads

限界 lines / sec CPU (%) メモリ (kB) 備考

100k 32 32000 [warn] size of the emitted data exceeds buffer_chunk_limit.

1m 32 100936 100% 16521210m 32 88208 100% 安定時は 150000 lines /sec だ

がそれを超えると詰まり始める

100m 8 88814 詰まった。10 sec に1回まとめて 888143 行の emit

fluentd v10 (out_forward)

fluentd v10 (keep_forward with keepalive)

buffer_chunk_limit

num_threads

限界 lines / sec CPU (%) メモリ (kB) 備考

1m 32 115460 103% chunk が小さい場合、keepalive に効果あり。10m では効果なし

Page 36: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

ログ送信(2)

36

限界 lines / sec 送信 CPU (%) メモリ (%) 受信 CPU (%) メモリ (%)

528,749 99.8 0.1% 87% 0.3%

・fluentd の out_forward にログを出すパッチ https://gist.github.com/sonots/7646378 をあてて計測・out_forward って詰まると劣化する? http://togetter.com/li/595607

out_forward はなぜ詰まる?⁃ fluent-agent-lite はログを送信できない場合は、読み込まない、という制御が入っている

⁃ 一方、fluentd は、ログを送信できなくても、どんどんログを読み込んでしまう

⁃ バッファにログが溜まってどんどん処理効率が落ちて性能劣化

受信(in_forward)は受け取って捨てるだけ (type null)

fluent-agent-lite

Page 37: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

ログ送信まとめ

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 に効果あり

Page 38: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

全体まとめ

38

⁃ Shadow サーバを導入しました⁃ かじゅあるに本番データでテスト可能になった :D⁃ Haikanko で Shadow だけ更新できるようにしている

⁃ Deliver ノードの安定パラメータを紹介⁃ buffer_chunk_limit 1m が安定⁃ ※ただし、詰まりがなければ 10m のほうが性能は出る⁃ num_threads も大きくしましょう

⁃ 色々作った⁃ ベンチマークツール dummy_log_generator⁃ keep_forward で keepalive 接続

Page 39: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

Appendix:アーキテクチャ

39

watcherを監視

・ホスト毎の通知をまとめたりグラフ集計する serializer ノード・fluent-plugin-ping-message を使った Fluentd プロセスの生存監視

Page 40: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

Appendix: 監視の話

40

⁃ プロセス監視⁃ 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

Page 41: Shadow Server on Fluentd at Fluentd Casual Talks #3

Copyright (C) 2013 DeNA Co.,Ltd. All Rights Reserved.

Fluentd Advent Calendar まだ空いてます!

http://qiita.com/advent-calendar/2013/fluentd

41

Thank you