🦎

「Istio を導入してマイクロサービス間のメトリクスを取得する」SLO駆動なSRE活動に向けた取り組み パート2

2021/09/22に公開

Agenda

  • 登場人物
  • 想定読者
  • 前回の内容
  • SLI/SLO を定義する上での課題
  • 課題に対しての Magic Moment での具体的な取り組み

登場人物

想定読者

  • SRE に取り組んでいる、または取り組もうとしている方

前回の内容

藤崎) 前回は、サービスレベルとはなんぞや という部分を深堀りしてきました。理解が深まったところで、今回は SLI/SLO を定義するために取り組んだことについて振り返りながら紹介していきましょう。

増田) そうですね!振り返っていきましょかーー!

SLI/SLO を定義する上での課題

藤崎) まず最初に上がった課題は、もともと Prometheus は立っていたものの、cAdvisor 経由での CPU やメモリーの使用量しか取れていなかったことですよね。

増田) Magic Moment ではマイクロサービスアーキテクチャを採用しており、マイクロサービス間のメトリクスも重要な指標になるので、それらを取れるようにする必要がありましたね。

藤崎) そうでしたね。これをきっかけに、サービスメッシュを導入して Prometheus で取得できる情報を増やすことを検討し始めましたよね。

増田) ですです。そのときにやったことをそれぞれ詳しくみていきましょかーー

課題に対しての Magic Moment での具体的な取り組み

藤崎) 最初にやったのはサービスメッシュの構築でしたね。サービスメッシュ導入の決定から迅速に Tech チームでのペアタスク(※1)で取り組むことになった記憶があります。

増田) そうそう。ちょうど僕ら二人で取り組みましたよねーー

藤崎) サービスメッシュの構築の前に、まずはサービスメッシュについての理解を深めるところからはじめましたね。

増田) 仕組みを理解せずにただ導入するというのは何かあったときに対応もできないですし、なんとなく動いているという状態ほど怖いものはないですからねw

藤崎) 後日談ですが、、ここで理解を深めておいたことで対応できた障害(テスト環境で良かった 😭)とかありましたね。。

増田) あれは仕組みを理解していないと解決に時間を要したでしょうね。。

藤崎) せっかく理解を深めたのでここで簡単にサービスメッシュについても触れておきましょうか!

増田) そうですね!まず、サービスメッシュとは、マイクロサービスアーキテクチャでのサービス間通信のきめ細やかな制御をする仕組みのことですよね。

藤崎) 各マイクロサービスのサイドカーとしてサービスプロキシをデプロイし、全てのサービス間通信をプロキシ経由にすることで、いろいろな制御ができるんですよね。

増田) はい!通信がプロキシを通ることでマイクロサービス間通信の観測をする上で必要なメトリクスを取得できる。

藤崎) 僕たちがほしい情報が取れるようになるってわけですね!

増田) サービスメッシュを構築する上で 自前実装, Linkerd, Istio など複数候補はありましたが GKE との親和性が高いのと、僕が前職で経験のあった Isito を導入することにしました。

藤崎) Istio を導入する上で、まずは Istio on GKE を使うか、最新バージョンの Istio を自分たちでデプロイするかを考え Stable な最新バージョンをデプロイすることにしましたね。

増田) その時の Istio on GKE と、デプロイしようとした最新バージョンの Istio のアーキテクチャが異なっていたのでそこらへんのキャッチアップもしましたねーー

藤崎) Istio をデプロイする方法を調べると、Helm でデプロイする方法や、istioctl でデプロイする方法等ありましたが、kubectl と同様にデプロイだけでなくオペレーション時も使用できるため、僕たちは istioctl を使用することに決めました。

増田) 公式のドキュメントも充実していて、istioctl を簡単に導入することができましたね。

藤崎) istioctl を使用してメトリクスを取りたい Namespace に対して istio-proxy (envoy) のインジェクションを有効化することで、サイドカーとして istio-proxy をデプロイできるようにしました。

増田) その後に Prometheus のサービスディスカバリーに istio-proxy を追加してメトリクスを取得できる状態にしましたね。

藤崎) これで無事、Prometheus でメトリクスが取れるようになりました。

メトリクスを基に可視化したマイクロサービス間通信(kiali)
メトリクスを基に可視化したマイクロサービス間通信(kiali)

増田) 次は取得したメトリクスを基に Grafana でダッシュボードとして可視化する作業に入りましたね。Grafana の Data Source に istio-proxy からのメトリクスをプルしてこれるようになった Prometheus を追加するだけで、可視化の準備が整いましたね。

藤崎) ここまでは非常に簡単でしたね!あとは可視化するだけというところでしたが、PromQL の知見が少なかったので PromQL で可視化するという部分は結構苦戦しましたよね・・・

増田) 大変でした。。大変な思いを綴ると長くなってしまうので、次の記事で PromQL の苦労話、それから、SLI/SLO をどのように定義したのかについて紹介していきましょう!

藤崎) あ、最後に! Magic Moment では、サービスの根本から一緒に考えて開発してくださる方を募集しています!

https://www.wantedly.com/companies/magicmoment

(※1) ペアタスク・・・主に SRE 活動を中心に、2~3 人 1 組で 1 つのタスクに取り組む活動。属人化を防いだり、ペア間での技術的な知見のシェア等を目的に Magic Moment の Tech チームで導入している。

Discussion