大量マイクロサービスプロジェクトのパフォーマンス可観測性のベストプラクティス¶
著者: 劉鋭
背景説明¶
多数のシステムを Guance に統合するにつれて、[APM] のリストには収集されたすべての APM サービスが表示されるようになります。これらのサービスの中から目的のプロジェクトのサービスを探すのは、目が回るような作業になるかもしれません。
そこで、RUM のように APM も一覧表示でき、各プロジェクトの稼働状況を素早く確認できるビューがあれば便利だと思いませんか?現在のプロジェクトの API 呼び出し回数、失敗回数、Top10 のレイテンシAPIなど、一目でわかるビューです。
Guance はビューに関して強力な拡張性を備えており、お客様の意向に沿ってプロジェクトビューを構築することができます。例えば、2 つの Java SpringCloud マイクロサービスのプロジェクトがあり、それぞれが複数のマイクロサービスで構成されている場合、Guance のビューを使用すると、以下のような効果が得られます。ご参考までにご確認ください。
- Project A :
- Project B :
前提条件¶
-
アプリケーションの 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/list、PUT /nacos/v1/ns/instance/beat、POST /nacos/v1/cs/configs/listener。
DataKit とアプリケーションを再起動します。以上で最適化設定は完了です。早速効果を確認してみてください。


