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

Microservice Dashboard Introduction and Deep Dive

Microservice Dashboard Introduction and Deep Dive

メルペイでは、数多くのマイクロサービスが開発者のオーナーシップのもとに運用されています。多くのマイクロサービスが運用されていく一方で、ひとつひとつのサービスの品質や管理しているチーム等の把握が困難になりました。
これを解決するために、全てのマイクロサービスの情報を一つの場所に収集し、閲覧できるマイクロサービスダッシュボードを開発しました。
本セッションでは、マイクロサービスダッシュボードの画面を交えてデータ収集の仕組みや、収集したデータを単に表示するだけでなく、APIとして提供し2次利用する取り組みについてご紹介します。
------
Merpay Tech Fest 2022は3日間のオンライン技術カンファレンスです。
IT企業で働くソフトウェアエンジニアおよびメルペイの技術スタックに興味がある方々を対象に2022年8月23日(火)から8月25日(木)までの3日間、開催します。 Merpay Tech Festは事業との関わりから技術への興味を深め、プロダクトやサービスを支えるエンジニアリングを知れるお祭りです。 セッションでは事業を支える組織・技術・課題などへの試行錯誤やアプローチを紹介予定です。お楽しみに!

■イベント関連情報
- 公式ウェブサイト:https://events.merpay.com/techfest-2022/
- 申し込みページ:https://mercari.connpass.com/event/249428/
- Twitterハッシュタグ: #MerpayTechFest
■リンク集
- メルカリ・メルペイイベント一覧:https://mercari.connpass.com/
- メルカリキャリアサイト:https://careers.mercari.com/
- メルカリエンジニアリングブログ:https://engineering.mercari.com/blog/
- メルカリエンジニア向けTwitterアカウント:https://twitter.com/mercaridevjp
- 株式会社メルペイ:https://jp.merpay.com/

mercari
PRO

August 25, 2022
Tweet

More Decks by mercari

Other Decks in Technology

Transcript

  1. Microservice Dashboard Introduction and Deep Dive Yuta Uekusa Engineering Productivity

    Team, Merpay, Inc.
  2. Yuta Uekusa Engineering Productivity Team 2018年1月にメルペイに参画し、テックリードとしてマイク ロサービスの開発に携わる。その後、 Architectチーム でマイクロサービスダッシュボードの開発などを担当。 2022年1月からEngineering

    Productivityチームに 所属。
  3. 目次 01 Microservice Dashboardについて 02 Microservice Dashboardの機能と仕組み 03 APIを活用したデータの二次利用

  4. 目次 01 Microservice Dashboardについて 02 Microservice Dashboardの機能と仕組み 03 APIを活用したデータの二次利用

  5. Microservice Dashboard • 全てのマイクロサービスの情報を収集し、可視化することを目的とした社 内サービス ◦ Webブラウザで簡単に閲覧 ◦ 集めたデータをAPIで提供 ▪

    APIの活用事例は後述
  6. 開発の経緯 • マイクロサービスの情報の把握が難しい ◦ サービスの概要 ◦ SLOの定義 ◦ 開発しているチームメンバー ◦

    SlackチャンネルやPagerduty • 運用ドキュメントとして社内Wikiにまとめていたが全てのサービスを網 羅できておらず管理が大変 • 2019年12月頃に開発がスタート
  7. 目次 01 Microservice Dashboardについて 02 Microservice Dashboardの機能と仕組み 03 APIを活用したデータの二次利用

  8. 技術スタック • Backend ◦ Go ◦ Cloud Spanner, Pub/Sub, Scheduler

    ◦ GraphQL, gRPC • Frontend ◦ TypeScript ◦ React, MUI ◦ GraphQL
  9. Single Page Application API Gateway Microservice Dashboard Frontend assets GraphQL

    API Spanner Get Assets GraphQL Query Browse
  10. API API Gateway Microservice Dashboard GraphQL API gRPC API Spanner

    GraphQL Query System Pub/Sub Scheduler HTTP Request
  11. 機能一覧 01 サービスの情報を可視化する 02 サービスの情報資産を可視化する 03 サービスの依存関係を可視化する 04 サービスのコストを可視化する 05

    サービスの品質を可視化する
  12. サービスの情報を可視化する • マイクロサービスの情報を簡単に把握できるようにすることを目的 ◦ サービスの概要が分かる ◦ 開発しているチームメンバーが分かる ◦ 質問するためのSlackチャンネルが分かる

  13. サービスの情報① • Microservice Starter-kit ◦ Platformチームが提供しているTerraform module ◦ マイクロサービスの初期構築に必要なインフラリソースを用意してく れる

    ▪ GCPプロジェクトやKubernetes namespaceなど ◦ サービスIDというサービスを一意に識別するためのIDを定義
  14. サービスの情報② • Microservices Spec ◦ マイクロサービスのメタデータの定義 ◦ service.yamlというYAMLファイル ◦ 構造はprotobufで定義

  15. microservices-terraformリポジトリで管理されている microservices/ ▼ kouzoh-echo-jp/ ▼ development/ module_microservice_starter_kit.tf ▶ production/ service.yaml

  16. Microservice Starter-kitのデータを集める仕組み Microservice Dashboard microservices-terraform ① git clone
 ③ 保存


    ② Terraformファイルをパース&加工 
 Spanner Cloud Schedulerによる時間トリガー
  17. Microservices Specのデータを集める仕組み Microservice Dashboard Pub/Sub microservices-terraform ① CIからデータをpublish 
 ③

    保存
 ② データを加工
 API Gateway Spanner
  18. サービス一覧画面

  19. サービス概要画面

  20. チームの情報 • Microservices Team-kit ◦ Platformチームが提供しているTerraform module ◦ チームのメンバーリストや権限を宣言的に管理 ◦

    Starter-kitと同じ仕組みで収集している
  21. チーム詳細画面

  22. 機能一覧 01 サービスの情報を可視化する 02 サービスの情報資産を可視化する 03 サービスの依存関係を可視化する 04 サービスのコストを可視化する 05

    サービスの品質を可視化する
  23. サービスの情報資産を可視化する • マイクロサービスがどういった情報資産を保有しているか把握できるよう にすることを目的 ◦ システム的に管理することで情報資産の棚卸しを効率化する ◦ サービスの重要度を把握することで情報セキュリティ対策の分析に 役立てる

  24. サービスの情報資産 • 個人情報のみを対象とする ◦ 個人情報の分類をprotobufで定義 ▪ 個人情報区分(誰の個人情報か) • お客様、従業員など ▪

    個人情報の種類 • Email、電話番号など ▪ 組み合わせによって重要度が決まる
  25. サービスの情報資産の画面

  26. 情報資産台帳の自動生成 • 収集したデータを元に情報資産台帳を自動的に作成できる ◦ 情報資産の棚卸しを効率化する ◦ 情報セキュリティ対策の分析に利用する

  27. 機能一覧 01 サービスの情報を可視化する 02 サービスの情報資産を可視化する 03 サービスの依存関係を可視化する 04 サービスのコストを可視化する 05

    サービスの品質を可視化する
  28. サービスの依存関係を可視化する • マイクロサービスの呼び出し元と呼び出し先を簡単に把握できるように することを目的 ◦ 知らないサービスからリクエストされていないか ◦ 意図しないサービスへリクエストしていないか

  29. サービス依存関係の情報 01 DatadogのService Dependency API 02 Terraformで管理しているNetwork Policyの設定 03 マイクロサービスの環境変数に入っている宛先

    今回は三つめの環境変数を元に依存関係データを作成する仕 組みについて紹介
  30. マイクロサービスの環境変数 • Kubernetes カスタムコントローラー ◦ 特定のリソースの状態変化に応じて任意の処理を行う • PodとCronJobリソースの状態変化に応じて処理を行うコントローラー を開発 ◦

    namespace内のConfigMapを含む環境変数を取得し、宛先の パターンに当てはまる文字列を抽出する ◦ 既存データと抽出したデータを比較して差分があれば更新
  31. サービス依存関係のグラフ

  32. 機能一覧 01 サービスの情報を可視化する 02 サービスの情報資産を可視化する 03 サービスの依存関係を可視化する 04 サービスのコストを可視化する 05

    サービスの品質を可視化する
  33. サービスのコストを可視化する • 組織のメンバーがコスト最適化できそうなサービスを探したり、 開発チー ムがサービスのコストの状態を把握できるようにすることを目的

  34. サービスのコストの情報 • Platformチームが毎月集計しているBigQueryのデータと連携 ◦ GCPのコスト ◦ GKEのコスト ◦ Datadogのコスト

  35. サービスのコストの情報を集める仕組み Microservice Dashboard ② データを加工して保存 
 ① 費用データをクエリ 
 BigQuery

    Platformチーム 費用データを格納
 Spanner Cloud Schedulerによる月次トリガー
  36. サービスのコスト画面

  37. コストダッシュボード画面

  38. 機能一覧 01 サービスの情報を可視化する 02 サービスの情報資産を可視化する 03 サービスの依存関係を可視化する 04 サービスのコストを可視化する 05

    サービスの品質を可視化する
  39. サービスの品質を可視化する • マイクロサービスの信頼性について開発チームだけでなく組織のメン バーも把握できるようにすることを目的 • メルペイSREチームが主導して開発

  40. SLOのステータス • メルペイSREチームによってマイクロサービスのSLOの設定をサポート する基盤が整備されている • SLO module ◦ メルペイSREチームが提供しているTerraform module

    ◦ DatadogのSLOのモニターなどを宣言的に管理
  41. SLOのステータスを集める仕組み Microservice Dashboard ② データを加工して保存 
 ① Datadog API で取得

    
 Spanner Cloud Schedulerによる日次トリガー microservices-terraform SLO IDなどを連携

  42. サービスのSLO画面

  43. SLOダッシュボード画面

  44. 目次 01 Microservice Dashboardについて 02 Microservice Dashboardの機能と仕組み 03 APIを活用したデータの二次利用

  45. 集めたデータをAPIで提供する • 集めたデータを社内で有効活用できるようにすることを目的 ◦ 様々なデータを正規化して再利用性を高める ◦ 業務の自動化を推進して生産性の向上に繋げる • システムからだけでなく個人でも使うことができる •

    GraphQLを採用 ◦ ユースケースに縛られない柔軟性
  46. 活用事例 01 マイクロサービスのオーナーの連絡先を抽出 02 一時的な権限付与を行う運用ツール

  47. サービスオーナーの連絡先を抽出 • 各マイクロサービスに何か対応のお願いをすることがある • なかなか対応を進めてもらえないマイクロサービスに対しては、サービス オーナーに直接連絡してお願いすることがある ◦ サービスオーナーの連絡先を抽出するためにAPIが利用されてい る

  48. curlで抽出する例 実行結果

  49. 活用事例 01 マイクロサービスのオーナーの連絡先を抽出 02 一時的な権限付与を行う運用ツール

  50. 一時的な権限付与を行う運用ツール • Carrier ◦ Platformチームで開発している運用ツール ◦ 指定のサービスに対してGCPやKubernetesのRoleをリクエスト でき、オーナーの承認を得ると一時的に権限が付与される

  51. Carrier

  52. まとめ • Microservice Dashboard ◦ 全てのマイクロサービスの情報を収集し、可視化する ◦ 集めたデータをAPIで提供することで業務の自動化を推進し、生産 性向上につなげる

  53. None