Istio、Prometheus、およびGrafanaを使用した監視の設定方法

Istioの可観測性をPrometheusを使用して紹介

Istioサービスメッシュは、サイドカープロキシを使用してアプリケーション層からネットワークを抽象化します。Istioを使用することで、インフラストラクチャ全体での通信に対してセキュリティと高度なネットワーキングポリシーを実装できます。

しかし、Istioのもう一つの重要な機能は可観測性です。Istioを使用して、インフラストラクチャ内のすべてのマイクロサービスのパフォーマンスと動作を観察できます(下の画像を参照)。大規模組織におけるサイト信頼性エンジニア(SRE)の主な責任の一つは、CPU使用率、メモリ使用率、レイテンシ、スループットなどのアプリケーションのゴールデンメトリックを監視することです。

本記事では、SREがIstio、Prometheus、Grafanaの3つのオープンソースソフトウェアを統合することでどのような利点を得られるかについて説明します。Istioは最も有名なサービスソフトウェアであり、Prometheusは最も広く使用されている監視ソフトウェアであり、Grafanaは最も有名な可視化ツールです。

注意: 手順はIstio 1.17.Xでテストされています

Istio、Prometheus、Grafanaの設定のビデオを視聴

ビデオの手順に従いたい場合は、ビデオを視聴してください:

ステップ1: Istioのアドオンに移動し、PrometheusおよびGrafanaのYAMLファイルを適用

まず、コマンドを使用してIstioディレクトリのアドオンフォルダーに移動します。私は1.17.1を使用しているため、私のパスはistio-1.17.1/samples/addonsです。

Istioでは、Grafana、Prometheus、Jaeger、Kialiなどを設定するためのいくつかのYAMLファイルが既に提供されています。以下のコマンドを使用してPrometheusを設定できます。

Shell

 

kubectl apply -f prometheus.yaml
Shell

 

kubectl apply -f grafana.yaml

これらのアドオンYAMLはデフォルトでistio-system名前空間に適用されます。


ステップ2: 新しいサービスをデプロイし、Istio Ingress Gatewayをポートフォワードする

動作モデルを試すために、httpbinサービスをIstio対応の名前空間にデプロイします。サービスからのトラフィックを受け取るためにIstio ingress gatewayのオブジェクトを作成します。

また、Istio ingress gatewayを特定のポート7777にポートフォワードします。


localhost:7777で以下の画面が表示されるはずです。


ステップ3: PrometheusとGrafanaダッシュボードを開く

以下のコマンドを使用してPrometheusダッシュボードを開くことができます。

Shell

 

istioctl dashboard prometheus
Shell

 

istioctl dashboard grafana

GrafanaとPrometheusの両方がローカルホストで開きます。


ステップ4: PostmanからHTTPリクエストを作成する

httpbinサービスがトラフィック負荷時にCPUやメモリをどのように消費するかを確認します。Postmanアプリからlocalhost:7777に対していくつかのGETおよびPOSTリクエストを作成します。


一度GETまたはPOSTリクエストをhttpbinサービスに複数回送信すると、リソースの利用が発生し、Grafanaでそれらを確認できます。しかし最初に、PrometheusとGrafanaでhttpbinサービスのメトリクスを設定する必要があります。

ステップ5: Prometheusでのメトリクス設定

Kubernetesリソースに関連する様々なメトリクスを選択できます。例えばAPIサーバー、アプリケーション、ワークロード、envoyなどです。ここでは、container_memory_working_set_bytes メトリクスを設定に選択します。

Prometheusアプリケーションで、次の検索語句を使用してメトリクスをスクレイプする名前空間を選択します: container_memory_working_set_bytes { namespace= “istio-telemetry”} (istio-telemetryhttpbinサービスがデプロイされているIstio対応の名前空間名です)

このクエリを実行するだけで、名前空間のメモリが取得できます。ポッドのメモリ使用量を分析したいので、各ポッドのメモリ使用量を合計して、ポッドごとにグループ化することができます。次のクエリで目的の結果を得ることができます: sum(container_memory_working_set_bytes{namespace=”istio-telemetry”}) by (pod)


注意: Prometheusはメトリックデータのフィルタリング、スライシング、ダイシングに多くの柔軟性を提供します。この記事の中心的なアイデアは、IstioがメトリクスをエミットしてPrometheusに送信する能力を示すことでした

ステップ6: GrafanaでのIstioメトリクスグラフの設定

こんにちは、Prometheusでクエリsum(container_memory_working_set_bytes{namespace="istio-telemetry"}) by (pod)を簡単に取り込んで、時間の経過に沿ってグラフを描画できます。Grafanaで新しいダッシュボードを作成し、クエリをメトリクスブラウザに貼り付けるだけです。Grafanaは時系列グラフを描画します。適切な名前、凡例、タイトルでグラフを編集して、Opsチームの他の関係者と共有できます。


PrometheusメトリクスをGrafanaで表示するためのデータの調整やカスタマイズ方法はいくつかあります。企業のニーズに基づいてすべてのカスタマイズを選択できます。動画でいくつかの実験を行いましたので、ご覧ください。

結論

Istioサービスメッシュは、インフラ全体のオブザベリビリティを提供するのに非常に強力です。この記事では、Istio、Prometheus、Grafanaを使用したメトリクススクレイピングと可視化の小さなユースケースを紹介しました。Istioを使用してログのロギングやトレース、リアルタイムトラフィックを実行できます。それらのトピックについては、次のブログで説明します。

Source:
https://dzone.com/articles/how-to-configure-istio-prometheus-and-grafana-for-monitoring