Upgrade to Pro — share decks privately, control downloads, hide ads and more …

マイクロサービスのログ可視化

 マイクロサービスのログ可視化

532348a1aba5a909e283624c3d2a9a95?s=128

SHIFT_EVOLVE

July 26, 2021
Tweet

Transcript

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

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

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

  4. 4 そこで!!

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

  6. 分散トレーシング Jaeger Jaegerは、UberTechnologiesによってオープンソースとしてリリースされた分散トレースシステム です。 次のようなマイクロサービスベースの分散システムの監視とトラブルシューティングに使用され ます。 • 分散コンテキストトレース • 分散トランザクション監視

    • 根本原因分析 • サービス依存性分析 • パフォーマンス/レイテンシーの最適化 6 https://www.jaegertracing.io/
  7. Jaeger技術仕様 Jaegerの技術仕様は以下の通り • フロントエンドはReactによるUI実装 • バックエンドはGoによる実装 • サポートストレージバックエンド • Cassandra

    3.4+ • Elasticsearch 5.x, 6.x • メモリストレージ 7
  8. 8 実際に導入してみた

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

     教育業界  スケジュール  体制図 9
  10. ソフトウェア構成図 10

  11. 実際に起きた出来事 11 5 月 6 月 • EKSにログを取得する仕組みがない為、そもそもログをどうやって集約してよいかがわからない • 出ているログを分析してみたが、統計を知ったところで使いどころがイメージがつかない

    • ElasticSearch Service があまりにも高い • ベトナムのホーチミンロックダウンに伴うオフィス出勤が禁止 • ログ監視サービスが定まらない • 他サービスが、忙しくてクライアントを導入ができない • VPCの上限数に到達してサービス稼働できない • サービスURLがデプロイの度に毎度変わるので連絡が追いつかない • ログを参照したが、そもそもログがほとんど出ていない • ログ監視サービスを見られる人と見られない人がいる • サービス選択時に訳の分からない数値が出ていると言われる • UIが直感的に使えないという意見をもらう • 検索ができない、動かないと言われる • 膨大な資料を英語で渡される • これではエラー補足できないという意見をもらう • 各サービスがプロトコル・言語・フレームワークが統一されているわけではない • …… etc
  12. ログ監視サービスが定まらない 開発会社 事例の 多さ AWS マネージド 導入 経験 特徴 Jaeger

    Uberが 開発 〇 - 〇 • Zipkinを 元に作成 X-Ray Amazon が開発 △ 〇 - • サービスマップ 作成 Instana Instana が開発 〇 - △ • パフォーマンス モニタリング Datadog Datadog が開発 △ - - • ダッシュボード による可視化 Zipkin Twitter が開発 〇 - - • Javaで作成 12 • ログ監視サービスが乱立していてどれにするか決められない • 導入経験があり、デファクトのJaegerを試すことにした
  13. • 直感的に使えない(≒使い慣れていない)という意見と解釈して以下の対応を行いました • 操作マニュアル・ビデオを整備して配布 • 検索条件に正規表現を使用できるように変更 • 普段からローカルログで見るのではなく、Jaeger UI を使ってもらうようエスカレーション

    13 UIが直感的に使えないという意見をもらう
  14. これではエラー補足できないという意見をもらう 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レベルで 出力しているケースなども散見される ログの出力レベルの統一の為に ログフォーマット出力ガイドラインを作成して展開
  15. まとめ • 分散トレーシングを導入してみても、 そもそもログが適切に吐かれていないとつらい 15 • マイクロサービスを可視化するには、 分散トレーシングが有効

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