Service Mesh (ASM) は、サービスメッシュ内外およびサービスメッシュ内を流れるすべてのトラフィックに対して監視メトリクスを生成し、サービスの動作を監視するのに役立ちます。これらのメトリクスには、トラフィック量、エラーレート、応答時間などの情報が含まれます。時間の経過とともに大量のメトリクスデータが蓄積され、Envoy と Prometheus のリソース消費が増加する可能性があります。これを管理するために、ASM は監視メトリクスを定期的にクリーンアップする機能を提供します。この機能は、Envoy にキャッシュされた未使用のメトリクスを自動的に削除し、Envoy のメモリ消費を削減し、Prometheus がメトリクスをスクレイプする際のネットワーク負荷を低減します。このトピックでは、この機能の設定方法と実用的な例について説明します。
前提条件
-
バージョン 1.18 以降の ASM インスタンスにクラスターを追加済みであること。詳細については、「ASM インスタンスへのクラスターの追加」をご参照ください。
操作手順
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
-
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
-
Observability Settings ページで Global タブをクリックします。Metric Settings セクションで、[メトリックの定期的クリーニング時間] の値を入力し、Submit をクリックします。
[メトリクスの定期的なクリーンアップを有効にする] スイッチをオンにします。
重要定期的なクリーンアップ時間は、Prometheus の
scrape_intervalの少なくとも 2 倍に設定してください。これにより、メトリクスがクリアされる前に Prometheus がメトリクスを正常にスクレイプできるようになります。
例
サンプルアプリケーションのデプロイ
-
次の YAML コンテンツを使用して、データプレーンクラスターにサンプルアプリケーションをデプロイします。詳細については、「ステートレスなワークロード Deployment の作成」または「YAML ファイルを使用したリソースの作成」をご参照ください。
-
次のコマンドを実行して、アプリケーションのステータスを確認します。
kubectl get pod出力例:
NAME READY STATUS RESTARTS AGE httpbin-846bxxx694-xxxxx 2/2 Running 0 44s sleep-866xxx97f9-xxxxx 2/2 Running 0 44s
メトリクスの有効化とテスト
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
-
[メッシュ管理] ページで ASM インスタンスの名前をクリックし、左側のナビゲーションウィンドウで を選択します。
-
Observability Settings ページで、Global タブをクリックします。Metric Settings セクションで、[サーバーサイドメトリック] セクションの REQUEST_COUNT メトリックの Enabled チェックボックスを選択します。その後、Submit をクリックします。
-
次のコマンドを実行して、httpbin アプリケーションにアクセスします。
kubectl exec -it deploy/sleep -- sh -c 'for i in $(seq 1 10); do curl -s httpbin:8000/status/418 > /dev/null; done' -
次のコマンドを実行して、httpbin アプリケーションの監視メトリクスを表示します。
kubectl exec -it deploy/httpbin -c istio-proxy -- curl 0.0.0.0:15020/stats/prometheus | grep istio_requests_total{出力例:
istio_requests_total{reporter="destination",source_workload="sleep",source_canonical_service="sleep",...,request_protocol="http",response_code="418",grpc_response_status="",response_flags="-",connection_security_policy="mutual_tls"} 20
定期的なメトリッククリーンアップの設定
-
「操作手順」セクションの手順に従って、監視メトリクスの定期的なクリーンアップ時間を 10 秒に設定します。
メトリックのクリーンアップは数秒遅れることがあります。検証中に、必要に応じてクリーンアップ時間を調整できます。
-
設定が完了したら、次のコマンドを実行して httpbin アプリケーションの監視メトリクスを表示します。
kubectl exec -it deploy/httpbin -c istio-proxy -- sh -c ' for i in $(seq 1 2); do echo "# istio_requests_total メトリックの現在の内容:"; curl -s 0.0.0.0:15020/stats/prometheus | grep istio_requests_total{; sleep 15; done'出力例:
# istio_requests_total メトリックの現在の内容: istio_requests_total{reporter="destination",source_workload="sleep",source_canonical_service="sleep",...connection_security_policy="mutual_tls"} 30 # istio_requests_total メトリックの現在の内容:テストコマンドは 2 回のポーリングリクエストを行います。クリーンアップ前に行われた最初のリクエストは、1 行のメトリック出力と 1 行のカスタム出力を返します。15 秒後、メトリックデータはクリアされ、その後続のリクエストは 1 行のカスタム出力のみを返します。