本文の内容は、2022年10月13日にVictor Hernandoが投稿したブログ(https://sysdig.com/blog/how-to-monitor-istio-with-sysdig/)を元に日本語に翻訳・再構成した内容となっております。
前回の記事では、KubernetesのIstioサービスメッシュを、すぐに使えるobservabilityスタックを使って監視する方法についてお話しました。今回は、Sysdig Monitorを使ったIstioのサービスメッシュの監視と、問題のトラブルシューティングの方法について説明します。
Istioサービスメッシュは、Kubernetes上で動作するマイクロサービスに対して特別な特徴と機能性を提供します。その機能の一部を紹介します。
- Kubernetesにおけるカオスエンジニアリングのためのフォールトインジェクション。
- マイクロサービスのためのネットワーク管理(仮想サービス、ルーティングオプション、ロードバランシング、トラフィックの最適化など)。
- 透過的なTLS暗号化、認証、認可、監査ツールなどのセキュリティ機能。
これらの機能はすべて、エコシステム全体に複雑なレイヤーを追加し、Kubernetes上で動作するアプリケーションやサービスを監視することをさらに難しくしています。
Sysdig Monitorは、Istioの監視でユーザーを支援し、ユーザーがデータを確認できる包括的で統一されたポータルを提供します。さらに、Sysdig Monitor は、アプリケーションのトラブルシューティングや問題の根本原因を非常に迅速に見つけ出すのに役立つ一連のツールである Advisor や Inspect のような特別な機能を提供します。
これらのSysdig Monitorのユニークな機能についてもっと知りたいと思いますか?あなたはこのサイトにたどり着きました!おめでとうございます。
Sysdig Monitor for Istio サービスメッシュのベネフィット
すでに「KubernetesのサービスメッシュであるIstioを監視する方法」を読まれた方は、すでに自問自答されていることでしょう。すでにデフォルトのIstio監視スタックを持っているのに、なぜSysdig Monitorを使う必要があるのでしょうか?
このセクションでは、この基本的な質問にお答えします。以下のリストをチェックして、Sysdig Monitor がどのように Istio サービス・メッシュの監視に役立つかを学んでください。
- Advisorは、Istioサービスメッシュインフラストラクチャーの問題のトラブルシューティングを支援します。
- Inspectは、Sysdigエージェントが収集したキャプチャーを分析するためのWeb UIを提供します。問題が発生した直後の事後分析が可能です。
- スケーラビリティは、Sysdig Monitorでアウトオブボックスで提供されます。Sysdig MonitorはSaaS型なので、Prometheusを大規模に利用する場合のような問題に直面することはないでしょう。
- Sysdig MonitorはLTS(Long-Term Storage)を提供します。時系列データをどこにどのように保存するかについて心配する必要はありません。
- Sysdig Agentは、あなたが必要とするすべてのIstioのメトリクスを収集します。Istioは既に
prometheus.io
アノテーションによってPrometheus形式のメトリクスを公開しているので、Istioインフラのメトリクスを収集するためにPrometheusインスタンスをデプロイする必要はありません。Sysdigエージェントがそのタスクを担当します。 - Sysdig Monitorには、Istio用のアラートテンプレートのセットが用意されています。あなたの好みに合わせて、独自のアラートを作成することも可能です。
- Istio のコントロールプレーン、サービス、ワークロードのダッシュボードは、Sysdig Monitor にデフォルトで含まれています。プラットフォームが Istio のトラフィックを取り込み始めるとすぐに、ダッシュボードが自動的に有効になります。
- Metrics explorer を使えば、クラスターで利用可能なすべてのメトリクスを自由に調べることができます。PromQL UI は、独自の PromQL クエリーを実行する機会を提供します。
- Sysdig Monitorは、あらゆるKubernetesディストリビューションとクラウドプロバイダー向けの統合ポータルです。すべての環境の監視データを一箇所で入手できます。
このように、Sysdig MonitorはIstioの監視でお客様を支援するために多くの専用機能を提供しています。
Sysdig MonitorでIstioを監視する方法
まず、まだSysdig Monitorのユーザーでない場合は、30日間のトライアルアカウントをリクエストしてください。Sysdigポータルで登録後、数分でアクティベートされます。このトライアルアカウントでは、Sysdig Monitorのすべての機能を利用することができ、クレジットカードも必要ありません。Sysdig Monitorは、Kubernetesクラスターにデプロイされたエージェントを介して、Kubernetesクラスターから情報を取得します。Sysdig エージェントは yaml ファイルにいくつかのマニフェストを適用するか、helm チャートでインストールすることができます。
本記事で使用した環境にデプロイされているエージェントは1.5.21です。これは sysdig-deploy helm chart 1.3.13 の一部です。他のバージョンの説明や、エージェントのデプロイ方法の詳細が必要な場合は、Sysdig Monitorの公式ドキュメントを確認してください。
SysdigエージェントのPodは、sysdig-agentという名前の
DaemonSet
によって制御されています。 DaemonSet
はその性質上、すべてのノードがSysdig Agentポッドのコピーを持っていることを保証します。$ kubectl get daemonset -n sysdig-agent NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE sysdig-agent 3 3 3 3 3 <none> 5m sysdig-agent-node-analyzer 3 3 3 3 3 <none> 5m
エージェントをデプロイしたら – マニフェストをマニュアルで適用したのか、helmチャートでインストールしたのかは関係なく – ポッドが立ち上がるまで数秒待ちます。
$ kubectl get pods -n sysdig-agent NAME READY STATUS RESTARTS AGE sysdig-agent-d987v 1/1 Running 0 42s sysdig-agent-ffr5j 1/1 Running 0 42s sysdig-agent-node-analyzer-jgtbz 2/3 Running 0 39s sysdig-agent-node-analyzer-plrfz 2/3 Running 0 39s sysdig-agent-node-analyzer-qglg4 2/3 Running 0 39s sysdig-agent-s2nwh 1/1 Running 0 42s
エージェントの準備が整い、クラスターからSysdig Monitor SaaSポータルに情報を送信していますが、…
Istioのサービスメッシュを監視したいのですが、Sysdig Monitorで他に何をすればいいのでしょうか?
何もありません!🥳
前のセクションで述べたように、Istioのメトリクスは
prometheus.io
のアノテーションによってPrometheus形式で公開されています。これは、IstioメトリクスをスクレイピングしたいPrometheusインスタンスのタスクを容易にしてくれます。では、エージェントはPrometheusのメトリクスエンドポイントからメトリクスをスクレイピングできるのでしょうか?
そうです!🙌。
本当に、軽量なPrometheusサーバーがSysdigエージェントに組み込まれていて、Kubernetesクラスターでメトリクスを公開している異なるエンドポイントから、エージェントがメトリクスを収集できるようになっています。例えば、他のPrometheusインスタンス、Prometheus形式でメトリクスを公開するエンドポイント、メトリクスエクスポーターなどです。
Sysdigを使った監視の設定についてより詳しい情報が必要な場合は、役立つ素晴らしいガイドを用意しました。Sysdig Monitor を使って数ステップでフル機能の監視環境を構築する方法をご覧ください!
Istioサービスメッシュのコントロールプレーンを監視する
Sysdig Monitorは、Istioを監視するためのダッシュボードをすぐに利用できるようにしています。このセクションでは、Istioサービスメッシュコントロールプレーンのダッシュボードについて説明します。これは、Istioのコントロールプレーンですべてが適切に動作していることを確認するために確認したいダッシュボードです。
Pilotのプッシュとエラーのグラフは、Istio(Pilot)が適切に変更を伝播しているかどうかを判断するのに十分な情報を提供します。
Istioは、xDSと呼ばれるディスカバリーAPIのセットで、Envoyプロキシーを動的に構成します。Envoyのセクションをチェックして、これらの動的な設定を適用している間、どのように実行しているのかを確認します。
最後になりますが、WebhookセクションはGalleyが行う検証およびインジェクションの数を表しています。
このダッシュボードで使用されるメトリクスについて詳しく知りたい場合は、Istio監視統合のドキュメントを参照してください。
Istioサービスダッシュボード
Istioサービスダッシュボードは、Istioサービスメッシュ内でサービスやアプリケーションがどのように動作しているかを完全に表示することができます。HTTP接続の場合、クライアントとサーバーのリクエスト量、それらのリクエスト時間、非5xx HTTPコードレスポンスの割合などを確認することができます。
TCP 接続については、Sysdig Monitor はアウトオブボックスで使えるグラフを提供しており、TCP がバイトを受信および送信したことを確認できます。
このダッシュボードで使用されるメトリクスについての詳細は、Istio Envoy監視インテグレーションのドキュメントを確認してください。
Istioワークロードを監視する方法
Istio Workloadダッシュボードは、Istioサービスメッシュの接続量を簡単に発見するために設計されたグラフのコレクションを提供しています。さらに、応答コード、レイテンシー、成功率など、Istioサービスメッシュで実行されているサービスの健全性に関する情報を提供します。
このダッシュボードのおかげで、Istio上で実行されているワークロードの健全性を簡単に見抜くことができます。レイテンシー、4xx、5xx 応答コードに注目してください。これらのグラフは、アプリケーションの健全性についての洞察を与えてくれます。
Istioサービスメッシュの問題のトラブルシューティング
Sysdig Monitor が提供するトラブルシューティング機能を試すときが来ました。Sysdig Monitorのポータルから、SysdigのAdvisorがどのように問題のトラブルシューティングに役立つかを見ていきましょう。
このテストシナリオでは、HTTP と TCP のトラフィックを生成するためにいくつかのワークロードを実行しました。Bookinfo アプリケーションのサンプルをデプロイし、トラフィックを生成するために curl を無限ループで実行すると、同様のユースケースを簡単に再現することができます。
$ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}') $ export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}') $ export INGRESS_HOST=$(kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}') $ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT $ while true; do curl -s -o /dev/null "http://$GATEWAY_URL/productpage"; done
しばらくすると、Istioサービスのダッシュボードで、ClientとServerのリクエスト量の減少が報告されるようになります。“Server Success Rate” (非5xx応答)に注目すると、reviews-v3が失敗しているようなことがわかります。
Istio サービスダッシュボードで、クライアントとサーバーのリクエスト量減少を報告しています。
Workload Status & Performance ダッシュボードに移動してみましょう。Bookinfoテストアプリケーションを構成するいくつかのワークロードに問題があることを確認するのに超便利でしょう。
メモリのグラフに突出したピークがあるわけではありませんが(直線的に常に成長しているように見えますが)、CPUは月へ向かうロケットのように離陸していきました
Workload Status & Performance ダッシュボード – Bookinfoテストアプリケーションを構成するいくつかのワークロードに問題があることを確認するのに超便利です。
要約すると、reviews v3 ワークロードに問題があるということです。確かに、トラフィックの低下、サーバーの応答失敗などの原因である可能性があります。今のところ、いくつかの手がかりがあるようですが…
この問題の根本的な原因を見つけるために、他に何かできることはありますか?
Advisorで遊んでみましょう!
左のバーメニューの一番上のアイコンから、Advisorにアクセスすることができます。
Advisorセクションで、”Containers “タブをチェックすると、このPodについて以前に見たことのあるデータ(メモリとCPUの使用率)が見つかります。
ツリー上でナビゲートすると、他のプロジェクト/ポッド/コンテナを探索することができます。他のサービス/ポッドに問題がないことを確認するのに役立つ可能性があります。
Processes タブは、Podで実行されているコンテナに関連するプロセスの詳細情報を提供します。このケースでは、Java プロセスがメモリと CPU リソースをすべて消費しているようです。
最後に、Sysdig の Advisor を使用して、現在のコンテナログを確認してみましょう。
ビンゴ!です。🎉
問題の根本原因を見つけましたね。Javaアプリケーションは、ログでOutOfMemoryエラーを報告しています。
ボーナストラック
あなたはすでにトラブルの原因を突き止めました。今回は、OutOfMemoryErrorのために特定のアプリケーションが動作しなくなり、サービス全体が正常に動作しなくなったのです。でも…もし、また同じようなことが起こったときのために、アラートを設定し、アラートがトリガーされるたびにキャプチャーを作成し、事後分析ができるとしたらどうでしょうか。
reviews-v3アプリケーションが100msに達するか超過するたびに発せられるアラートを作成してみよう。
このアラートは、大量のデータ(システムコール、プロセス、ファイル、使用中のCPUとメモリなど)を含むキャプチャーを自動的にトリガーします。このキャプチャーをSysdig Inspectで使用し、その時に何が起こったかを把握します。
Sysdig Inspectは、Sysdig Monitorに統合されたオープンソースツールです。コンテナ内の特定の時間に何が起こったかを分析することができます。また、その時間にどのプロセスが動いていたのか、メモリやCPUの消費量、ネットワークデータ、ファイルなどを取得することができます。
このキャプチャーファイルがあれば、問題が発生したときにコンテナで何が起こったかを簡単に、素早く把握することができます。Sysdig Monitorポータルからキャプチャーを開くだけで、Inspectorが新しいUIを提供し、コンテナスナップショットをナビゲートしてくれます。
Sysdig Inspectは、Sysdig Monitorに統合されたオープンソースのツールです。コンテナ内で特定の時間に何が起こったかを分析することができます。また、その時間に実行されていたプロセス、メモリとCPUの消費量、ネットワークデータ、ファイルなどを取得することができます。
まとめ
Istio service mesh for Kubernetesは、ユーザーに多くの素晴らしい機能を提供します。それには、マイクロサービス用のネットワーク管理、セキュリティ機能、さらにはIstioサービスメッシュのインフラストラクチャーを監視するだけでなく、管理することを可能にするobservabilityスタックも含まれます。これにより、アプリケーションと Kubernetes がさらに複雑になります。 Istio サービス メッシュの監視はオプションではなく、必須です。 Sysdig Monitor は、お客様が Istio コントロール プレーン、サービス、ワークロードを監視し、問題をリアルタイムでトラブルシューティングするのに役立つ追加機能を提供します。
Sysdig Monitor が Kubernetes クラスターの監視とトラブルシューティングにどのように役立つかについてもっと知りたい場合は、Sysdig Monitor のトライアルページにアクセスして、30 日間の無料アカウントをリクエストしてください。数分で使い始めることができます!