Slide 1

Slide 1 text

マイクロサービス の ログ可視化 ~分散トレーシング導入してみた~ 技術推進部オートメーションG 秋葉 啓充 2021/07/21

Slide 2

Slide 2 text

アジェンダ • マイクロサービスの課題 • 分散トレーシングの紹介 • 実際に導入してみた

Slide 3

Slide 3 text

マイクロサービスの課題 • マイクロサービスは、互いのサービスへの影響を最小限化した疎結合なモデルで構成されています。裏を返せば、 1つのリクエストにもかかわらず、複数のサービスをまたいで処理をしなければなりません。 • 故にリクエスト全体の流れを分析することが難しくなり、そのままではトレーサビリティの低下を招くことになります。 3 どのサービスがつながっているんだ??

Slide 4

Slide 4 text

4 そこで!!

Slide 5

Slide 5 text

分散トレーシングの紹介 • 分散トレーシングとは、SpanとTraceという考え方でマイクロサービスのアプリケーションの監視やトラブルシュー ティング障害が発生した場所とパフォーマンスの低下の原因を特定します。 5 • Spanとは、1回のsqlの実行や、1回の外部へのリクエストなど、各操作の開始から終了を表します。 • Traceとは、全体の開始から終了までのSpanの集合です。

Slide 6

Slide 6 text

分散トレーシング Jaeger Jaegerは、UberTechnologiesによってオープンソースとしてリリースされた分散トレースシステム です。 次のようなマイクロサービスベースの分散システムの監視とトラブルシューティングに使用され ます。 • 分散コンテキストトレース • 分散トランザクション監視 • 根本原因分析 • サービス依存性分析 • パフォーマンス/レイテンシーの最適化 6 https://www.jaegertracing.io/

Slide 7

Slide 7 text

Jaeger技術仕様 Jaegerの技術仕様は以下の通り • フロントエンドはReactによるUI実装 • バックエンドはGoによる実装 • サポートストレージバックエンド • Cassandra 3.4+ • Elasticsearch 5.x, 6.x • メモリストレージ 7

Slide 8

Slide 8 text

8 実際に導入してみた

Slide 9

Slide 9 text

案件概要 4月 5月 6月 ・案件ご相談 ・お客様環境に見合ったログ監視サービス検討 ・分散トレーシング機能試験導入 ・分散トレーシング機能ブラッシュアップ  お客様  教育業界  スケジュール  体制図 9

Slide 10

Slide 10 text

ソフトウェア構成図 10

Slide 11

Slide 11 text

実際に起きた出来事 11 5 月 6 月 • EKSにログを取得する仕組みがない為、そもそもログをどうやって集約してよいかがわからない • 出ているログを分析してみたが、統計を知ったところで使いどころがイメージがつかない • ElasticSearch Service があまりにも高い • ベトナムのホーチミンロックダウンに伴うオフィス出勤が禁止 • ログ監視サービスが定まらない • 他サービスが、忙しくてクライアントを導入ができない • VPCの上限数に到達してサービス稼働できない • サービスURLがデプロイの度に毎度変わるので連絡が追いつかない • ログを参照したが、そもそもログがほとんど出ていない • ログ監視サービスを見られる人と見られない人がいる • サービス選択時に訳の分からない数値が出ていると言われる • UIが直感的に使えないという意見をもらう • 検索ができない、動かないと言われる • 膨大な資料を英語で渡される • これではエラー補足できないという意見をもらう • 各サービスがプロトコル・言語・フレームワークが統一されているわけではない • …… etc

Slide 12

Slide 12 text

ログ監視サービスが定まらない 開発会社 事例の 多さ AWS マネージド 導入 経験 特徴 Jaeger Uberが 開発 〇 - 〇 • Zipkinを 元に作成 X-Ray Amazon が開発 △ 〇 - • サービスマップ 作成 Instana Instana が開発 〇 - △ • パフォーマンス モニタリング Datadog Datadog が開発 △ - - • ダッシュボード による可視化 Zipkin Twitter が開発 〇 - - • Javaで作成 12 • ログ監視サービスが乱立していてどれにするか決められない • 導入経験があり、デファクトのJaegerを試すことにした

Slide 13

Slide 13 text

• 直感的に使えない(≒使い慣れていない)という意見と解釈して以下の対応を行いました • 操作マニュアル・ビデオを整備して配布 • 検索条件に正規表現を使用できるように変更 • 普段からローカルログで見るのではなく、Jaeger UI を使ってもらうようエスカレーション 13 UIが直感的に使えないという意見をもらう

Slide 14

Slide 14 text

これではエラー補足できないという意見をもらう 14 { “log”: “2021-06-11 05:05:22.039 [Account Service] XX.XXX.XXX.XX Root=1-XXXXXX-405811633a68259804ed32cd PATCH /accounts/api/userinfo http-hogehoge-58081-exec-10 INFO jp.XXXXX.XXXXXX.account.infrastructure.XXXXX.XXXConfiguration 185 XXXAPIの結果メッセージ=¥"[BKE_0003](PF02)データベースの更新に失敗しました (TBL_PERSONAL)¥"¥n", "stream": "stdout" } エラーメッセージをINFOレベルで 出力しているケースなども散見される ログの出力レベルの統一の為に ログフォーマット出力ガイドラインを作成して展開

Slide 15

Slide 15 text

まとめ • 分散トレーシングを導入してみても、 そもそもログが適切に吐かれていないとつらい 15 • マイクロサービスを可視化するには、 分散トレーシングが有効

Slide 16

Slide 16 text

ご清聴ありがとうございました