shadow server on fluentd at fluentd casual talks #3

Post on 09-May-2015

3.927 Views

Category:

Education

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

December 13th, 2013

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

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

かじゅある!(挨拶

2

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

自己紹介

3

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

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

HaikankoFluentd クラスタ管理ツール

ログのパス

ホスト  監視ワード

デプロイボタン

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

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

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

Yohoushi分散GrowthForecastグラフツール

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

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

弊社のFluentd事例

7

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

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

アーキテクチャ

9

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

watcherを監視

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

弊社の事例の規模

10

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

世界最大級のFluentdユーザ

(conf的な意味でw

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

本題

11

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

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

12

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

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

あるある!

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

そこでShadowサーバ

13

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)

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

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

15

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

できます

16

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

しかも簡単に

17

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 サーバのようにレスポンスを切る必要すらない)

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

かじゅある!

19

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

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

@Miami

20

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

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

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

い増えてない?」

21

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

22

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

23

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

/(^o^)\

24

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

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

25

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

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

26

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

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

27

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

ここから性能検証の話

28

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

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ベンチ)

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

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

ログ送信

32

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

out_forward のパラメータ

33

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

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

34

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

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

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 では効果なし

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

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

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 接続

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

Appendix:アーキテクチャ

39

watcherを監視

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

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

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

Fluentd Advent Calendar まだ空いてます!

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

41

Thank you

top related