LMEnvisionを使用したIstio管理のマイクロサービスの監視

LMEnvisionを使用したIstio管理のマイクロサービスの監視

LM Envisionは、LogicMonitorの統合された可観測性プラットフォームであり、包括的な監視機能と可観測性機能を統合しています。 このブログ投稿では、IstioサービスメッシュをLogicMonitor APMと統合して、アプリケーショントレースをLM Envision内で使用して、アプリケーションパフォーマンスをよりよく理解、最適化、およびトラブルシューティングできるようにする方法を示します。

1.サービスメッシュとは何ですか?

サービスメッシュにより、組織はマイクロサービスを保護および接続できるようになり、マイクロサービスを監視するための優れたソースが提供されます。 これにより、分散ソフトウェアシステム内のすべてのサービス間通信を管理する責任がなくなります。 サービスメッシュがそれを行うことができる方法は、ネットワークプロキシの配列を介することです。 基本的に、サービス間の要求は、サービスと並行して実行されるが、インフラストラクチャ層の外部にあるプロキシを介してルーティングされます。

   サービスメッシュの機能

  1. トラフィック管理: サービスメッシュは、再試行、タイムアウト、レート制限、トラフィック分割、および回路ブレーカーを提供できます。
  2. セキュリティ: サービス間の通信、証明書の検証による認証の提供、およびアクセスポリシーによる承認の保証。
  3. 可観測性:  レイテンシー、トラフィック、エラー、飽和度などの多くのメトリックを生成し、ログにアクセスし、各リクエストの完全なレコードを提供できます。

2.Istio

  • 導入:

    イスティオ は、信頼性の高いサービス間接続の維持を支援するように設計されたオープンソースのサービスメッシュです。 Istioは、Kubernetesで非常にうまく機能する最も人気のあるサービスメッシュです。 これは、IBM、Google、Lyftによって最初に開発されたサービスメッシュのオープンソース実装です。 分散アプリケーションに透過的に階層化し、トラフィック管理、セキュリティ、可観測性などのサービスメッシュのすべての利点を提供できます。 Istioは、の拡張バージョンを展開することで機能します 代理人としての使節 サイドカーとしてすべてのマイクロサービスに。

プロキシのネットワークはデータプレーンを構成し、これらのプロキシの構成と管理はコントロールプレーンから行われます。コントロールプレーンは基本的にサービスメッシュの頭脳です。 実行時にデータプレーン内のEnvoyプロキシに検出、構成、および証明書管理を提供します。

  • Istioの可観測性のしくみ:

    ほとんどのサービスメッシュ実装と同様に、Istioは既存のアプリケーションコンテナをサイドカーと呼ばれるプロキシコンテナで補完します。 サイドカープロキシは、サービスコンテナに出入りするネットワークトラフィックをインターセプトし、専用ネットワークを介してトラフィックを再ルーティングする特別に構成されたEnvoyインスタンスです。Istioは、Envoyプロキシを介して分散トレースを生成し、次のような多数のトレースバックエンドをサポートします。 ジプキン, イェーガー、OTELなど。 

  • Istioの可観測性がLMAPMとどのように連携するか:

      Envoyの助けを借りたIstioは、HTTPZipkin形式でLMOTELCollectorにトレースを送信し、LMOTELCollectorはZipkinレシーバーの助けを借りてそれらのトレースを受信します。 LMOTELコレクターは、エクスポーターを使用して、istioから受信したトレースをLogicMonitorバックエンドにエクスポートします。

3.セットアップの開始

このセットアップの一環として、LMOTELコレクターとIstioをインストールします。

ステップ-1LMOTELコレクターのセットアップと構成: 

  • Zipkinレシーバーを有効にするには、LMOTEL構成を変更し、構成ファイルをダウンロードします。
  • 設定ページの後に、LMOTELコレクターをインストールし、コマンドをコピーして、以下の例を参照して変更するコマンドを含むページが表示されます。
helm repo add logicmonitor "https://logicmonitor.github.io/k8s-helm-charts"
helm install -n logicmonitor \
--create-namespace \
--set lm.account=AccountName \
--set lm.bearer_token=xxxxx \
--set lm.otel_name="istio-eks-poc" \
--set replicaCount=1 \
--set-file=external_config.lmconfig=/Path/To/config.yaml  \
--set service.ports.zipkin=9411 \
lmotel logicmonitor/lmotel

このコマンドでは、Zipkinレシーバーポートを公開し、上記の手順でダウンロードした構成ファイルのパスを定義しました。

ステップ-2Istioの設定 

Istioctlを使用してIstioをインストールします。 あなたは参照することができます ドキュメント Istioctlをインストールします。

  • 次のコマンドを実行して、LMOTELコレクターのZipkinレシーバーのエンドポイントを渡してIstioをインストールします。
istioctl install \
  --set meshConfig.accessLogFile=/dev/stdout \
  --set values.global.tracer.zipkin.address=lmotel-svc.logicmonitor:9411
  • 次に、アプリケーションがデプロイされるk8s名前空間にistio-injection=enabledというラベルを付けます。 k8s名前空間にラベルを付けると、Istioはエンボイプロキシをサイドカーとしてポッドに挿入できます。
## Here we are labeling default namespacekubectl label namespace default istio-injection=enabled
kubectl get ns --show-labels
  • 次に、以下のリンクを参照して、ラベル付けされた名前空間にサンプルアプリをデプロイします。

Ref-1: https://istio.io/latest/docs/examples/bookinfo/

Ref-2:https://github.com/GoogleCloudPlatform/microservices-demo

上記のすべての手順を実行すると、アプリケーションがトレースを生成するとすぐに、以下に示すようにLMプラットフォームに表示されます。

LM Envision内でこれらのアプリケーショントレースを使用して、アプリケーションのパフォーマンスをよりよく理解し、最適化する領域を特定できます(マシン情報の記入> という構文でなければなりません。例えば、 トレース内にまたがるのに最も時間がかかります)、アプリケーションのパフォーマンスが最適ではない場合に事前に通知を受け取ります(マシン情報の記入> という構文でなければなりません。例えば、 アプリケーションの期間とエラーに対して動的なしきい値ベースのアラートを設定して、異常がいつ発生したかを把握し、トラブルシューティング時間を短縮することができます(マシン情報の記入> という構文でなければなりません。例えば、 スパンログは、期間が通常より長い理由に関するコンテキストを提供する場合があります)。

4. トラブルシューティング:

  • istio設定を編集する
kubectl -n istio-system edit configmap istio

5.参照: