コンテンツにスキップ

大量マイクロサービスプロジェクトのパフォーマンス可観測性のベストプラクティス


著者: 劉鋭

背景説明

image.png

多数のシステムを Guance に統合するにつれて、[APM] のリストには収集されたすべての APM サービスが表示されるようになります。これらのサービスの中から目的のプロジェクトのサービスを探すのは、目が回るような作業になるかもしれません。

そこで、RUM のように APM も一覧表示でき、各プロジェクトの稼働状況を素早く確認できるビューがあれば便利だと思いませんか?現在のプロジェクトの API 呼び出し回数、失敗回数、Top10 のレイテンシAPIなど、一目でわかるビューです。

Guance はビューに関して強力な拡張性を備えており、お客様の意向に沿ってプロジェクトビューを構築することができます。例えば、2 つの Java SpringCloud マイクロサービスのプロジェクトがあり、それぞれが複数のマイクロサービスで構成されている場合、Guance のビューを使用すると、以下のような効果が得られます。ご参考までにご確認ください。

  • Project A :

image.png

  • Project B :

image.png

前提条件

  • アプリケーションの APM を Guance に統合していること

  • アプリケーションが K8s 環境にデプロイされていること(非 K8s 環境でも手順はほぼ同じですが、yaml ファイルの修正箇所が異なります)

  • 複数のプロジェクト(例: Project A、Project B)が存在すること(単一プロジェクトでもこの方法はサポートされます)

  • APM が ddtrace に基づいていること

APM トレース収集の最適化

上記のビュー効果を実現するには、アプリケーションと DataKit の設定を一部微調整する必要があります。
上記のビューを実現するための考え方は以下の通りです。

  • アプリケーション側(マイクロサービス)の起動時に、app_id というタグ(スパンタグ)を追加し、その値として projectId(UUID で生成した 32 桁の projectId を使用可能)を設定します。

  • 2 つの app_id を準備します。それぞれ 4a10ede2a69f11eca952fa163e23efe1(Project A)、aea5a70da66811eca952fa163e23efe1(Project B)です。

マイクロサービスアプリケーションの yaml を最適化する

アプリケーションが K8s 上にデプロイされていると仮定します。

  • Project A の関連マイクロサービス yaml の一部設定は以下の通りです。
        - name: APP_ID
          value: "4a10ede2a69f11eca952fa163e23efe1"
        - name: JAVA_OPTS
          value: |-
            -javaagent:/usr/dd-java-agent/agent/dd-java-agent.jar -Ddd.service.name=demo-k8s-auth  -Ddd.tags=container_host:$(POD_NAME),app_id:$(APP_ID) -Ddd.service.mapping=redis:redisk8s -Ddd.env=dev -Ddd.agent.port=9529
  • Project B の関連マイクロサービス yaml の一部設定は以下の通りです。
        - name: APP_ID
          value: "aea5a70da66811eca952fa163e23efe1"
        - name: JAVA_OPTS
          value: |-
            -javaagent:/usr/dd-java-agent/agent/dd-java-agent.jar -Ddd.service.name=k8sruoyi-auth  -Ddd.tags=container_host:$(POD_NAME),app_id:$(APP_ID) -Ddd.service.mapping=redis:redisk8s -Ddd.env=$(SPRING_BOOT_PROFILE) -Ddd.agent.port=9529

DataKit yaml を最適化する

ConfigMap に ddtrace.conf を追加する

    ddtrace.conf: |-
        [[inputs.ddtrace]]
          endpoints = ["/v0.3/traces", "/v0.4/traces", "/v0.5/traces"]
          customer_tags = ["app_id"]

ここでは customer_tags タグを定義し、この設定にタグを追加します。

同時に、mountPath を追加する必要があります。

        - mountPath: /usr/local/datakit/conf.d/ddtrace/ddtrace.conf
          name: datakit-conf
          subPath: ddtrace.conf 

Nacos レジストリ関連のトレースを無効化する

アプリケーションでレジストリセンター(例: Nacos)を使用している場合、レジストリセンターにはハートビート検出が存在し、ハートビートのたびにトレースが生成されます。これらのトレースは、本番環境ではデータ報告のリソースを無駄に消費します。レジストリセンター関連のトレースを無視したい場合は、以下のように設定します。

(この手順は必須ではありません。必要に応じて実施してください。)

    ddtrace.conf: |-
        [[inputs.ddtrace]]
          endpoints = ["/v0.3/traces", "/v0.4/traces", "/v0.5/traces"]
          customer_tags = ["app_id"]
            [inputs.ddtrace.close_resource]
               "*" = ["PUT /nacos/*","GET /nacos/*","POST /nacos/*"]

Nacos レジストリセンターのハートビート報告チェックでは主に 3 つの URL が使用されます。ここでは正規表現を用いてフィルタリングしています。
GET /nacos/v1/ns/instance/listPUT /nacos/v1/ns/instance/beatPOST /nacos/v1/cs/configs/listener

DataKit とアプリケーションを再起動します。以上で最適化設定は完了です。早速効果を確認してみてください。

関連ドキュメント

<ddtrace 設定>

<Kubernetes アプリケーションの RUM-APM-LOG 連携分析>

フィードバック

このページは役に立ちましたか?