feature image

2022年7月24日 | ブログ記事

ISUCON12に向けてダッシュボードを自作してログを可視化しました

前書き

ISUCON12予選に@tesso、@toshi00、@Rasがチーム「tetora」で参加した際に@Rasがダッシュボードを自作した話です。参加記は多分後で書きます。

メンバーのブログもぜひ。

今回作ったのはElasticsearch(分析エンジン)、Fluent Bit(ログ収集/転送ツール)、Kibana(ダッシュボードUI)を組み合わせたEFKと呼ばれるダッシュボードです。全てGithub上にOSSとして公開されていて、Docker imageも用意されています。

完成品をあげておきます。スターを押してくれるとあなたの心の中の@Rasが喜びます。もちろんIssue/PRも大歓迎です。

GitHub - tetoraorg/isucon-dashboard
Contribute to tetoraorg/isucon-dashboard development by creating an account on GitHub.

これらを全てセットアップするとこんな感じになります。かっけ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

153.127.197.150_5601_app_dashboards

前回のISUCON11でOBの@nagatechさんがダッシュボードを自作していて便利そうだったので作ってしまいました。完全に二番煎じです。

今回自作してみて、結論はこんな感じになりました。

今回、ISUCON運営から配布されたさくらのクラウドのクーポンを使ってダッシュボードを作成しました。@nagatechさんが5000円弱と話していたので練習も含めたらほぼ使い切るかなと思ったのですが、ちゃんと使わないときはサーバーを落としていたからか、貰った分(2万円)の1/4も使わないという結果になりました。
(サーバーは練習時は4Core/4GB、本番では4Core/8GBを使用しました)

----------2022-07-24-164711

実装してみて

苦悩の数々が@Rasのscrapboxにまとまっています(scrapなのでまとまってはないです)

Fluent Bit編

作り始めた当初はEFKのFがFluent BitではなくFluentdでした。しかしRuby製のFluentdよりもC製のFluent Bitの方が高速ということで、速度を求められるISUCON用であることを考慮してFluent Bitに乗り換えました。公式ドキュメントで比較されています(どちらともCloud Nativeという企業が制作しています)。

Fluent Bitの方が高速である理由として、C言語で作られていることに加えて特定のプラグインを使わなければ依存が0になることだと言及されています。

つまりFluent Bitの方がシンプルに記述できるのですが、裏を返すとFluentdに比べてプラグインが圧倒的に少ないことが大きなデメリットとなります。Fluent Bitのプラグインの数は公式が配布している70個程度ですがFluentdは有志がプラグインを作ることができるため現在1000個以上も用意されています。

何も考えずに「速い」だけでFluent Bitに乗り換えた結果、NginxのアクセスログとMySQL/MariaDBのスロークエリログを自分で書く羽目になってしまいました、、、(これが一番つらかった)

まだしっかり見てはいないのですが、次で紹介するElasticsearchと同じ企業が作ったLogstashを使ってみてもよかったかもしれません。(こっちはELKシステムと呼ぶことが多いようです)

練習時はISUCONサーバー上でログのフィルタリングとパースを行い、30秒ごとにダッシュボードサーバーに送信していたのですが、結構メモリを占有するため(htopで見るとサーバーの1/2くらいのときもあった)前日に急いでサーバーでこれらを行うようにしました。ちゃんと計測はしてないのですが、このおかげで本番はそこまで負荷が気にならなかった気がしています。

Elasticsearch & Kibana編

この2つはどちらもElasticという企業のプロジェクトで、公式ドキュメントにDocker composeを使う方法が記載されているのでそれに従えば環境構築はスッと終わります。

苦労した点としてはこれらが挙げられます。

痒い所に手が届かなかったのはKibanaをGrafanaとかに変えれば良さそうな気がするので来年はもう少しダッシュボードを強化させたいですね。

また、ダッシュボードではアクセスログとスロークエリログを可視化するようにしたのですが、競技中はhtopやpprofなども並行してみるため、結局見るところがばらついててしまいました。当日の朝htopと同等の情報ををダッシュボードに導入しようとしたのですがあまりうまくいかず辞めました。htopは時差があると困るため、30秒ごとにサーバーから送られてくるよりは手元で見るほうが良いという結論に至ったのですが、pprofはダッシュボードに乗るとめちゃめちゃうれしいと思っています。Kibanaでフレームグラフを作る方法が分からず断念しました(これもGrafanaとかだったらできるのかな)。良い方法があれば教えてください。

とはいえ、去年はkataribe、pt-query-digest、pprofをベンチを回すたびにDiscordにテキストファイル形式で投げていて結構見づらかったのでそれよりは使いやすくなったと思っています。

終わりに

ダッシュボードの反省点をつらつらと嘆くブログになってしまいました。今年は学生10位(一般枠通過を除けば7位)で惜しくも枠から弾かれてしまったのですが、来年はダッシュボードをめちゃめちゃ強化して(か他にいい方法を考えて)本選に行くぞ!!!!!!!!!!!!

Ras icon
この記事を書いた人
Ras

20B。アライグマです。

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2021年9月21日
ISUCON11 traP CM制作についての小話
dan_dan icon dan_dan
2021年4月2日
traQの検索機能が謎のエラーを吐いた話
toki icon toki
2019年12月17日
部内ISUCONを開催しました
xecua icon xecua
2022年7月25日
ISUCON12予選に参加して完敗しました(mazrean)
mazrean icon mazrean
2021年8月27日
学生枠でISUCON11予選を突破しました
mazrean icon mazrean
2021年8月25日
ISUCON11予選に参加してきました!
anko icon anko
記事一覧 タグ一覧 Google アナリティクスについて