[Dynatrace] Envoy/Istioを使った Service Mesh アプリをDynatraceでモニタリングする（Trace 編）

## Bookinfo applicationのTraceをDynatraceに取り込む
さっそく、続編を書くことにしました。前回のブログで、Bookinfo applicationをKubernetes上で動かすところまでを紹介しました。今回はそのアプリの分散トレースを可視化すべく、envoy ingress/egress traceはOpenTelemetry経由で取得し、その他のサービスはOneAgentで取得したいと思います。ただし、Product page と Detailsサービスはそれぞれ python と ruby で書かれているため、こちらのトレースはOneAgentではとれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778724/b6b61a1c-1928-4d47-a1a7-de6d69b29704.png)

## 何はともあれ、Dynatrace Operatorのインストールから
KuberntesのアプリをDynatraceでモニタリングする場合は、Dynatrace Operatorを使用します。2025年5月の本記事執筆時点では、下記3つの [Deployment option](https://docs.dynatrace.com/docs/ingest-from/setup-on-k8s/deployment#observability-options) があります。
1. Kubernetes Platform monitoring
2. Kubernetes Platform monitoring + Application monitoring
3. Kubernetes Platform monitoring + Fullstack observability
今回はアプリケーションの分散トーレスを可視化したいので、2 or 3 のいずれかのオプションを使う必要がありますが、Kuberntes のホストも今回は追加で見ようと思いますので、3つ目のオプション（Kubernetes Platform monitoring + fullstack observability）を使用します。

## Kubernetes platform monitoring + Fullstack observaiblity の導入
Dynatraceでは、このオプションのインストール方法が[こちら](https://docs.dynatrace.com/docs/shortlink/installation-k8s-cloud-native-fs)に記載されています。今回は、皆さんもよく使うであろう helm chart を使ってインストールしたいと思います。

### 1. Dynatrace Operator のインストール
まずは Dynatrace operator をインストールします。multipass を使って spin up した VM には、helm コマンドがインストールされていないため、まず snap コマンドで helm をインストールします。
```
ubuntu@envoy-qiita:~$ which helm
ubuntu@envoy-qiita:~$ 
ubuntu@envoy-qiita:~$ sudo snap install helm --classic
2025-05-12T13:47:04+09:00 INFO Waiting for automatic snapd restart...
helm 3.17.3 from Snapcrafters✪ installed                                                                                                                                              
ubuntu@envoy-qiita:~$ which helm
/snap/bin/helm
ubuntu@envoy-qiita:~$ helm version
version.BuildInfo{Version:"v3.17.3", GitCommit:"e4da49785aa6e6ee2b86efd5dd9e43400318262b", GitTreeState:"clean", GoVersion:"go1.23.7"}
ubuntu@envoy-qiita:~$ 
```
`helm version`コマンドを実行し、version 3.x が表示されればOKです。このhelmコマンドを使って、Dynatrace operator をインストールします。
```
ubuntu@envoy-qiita:~$ helm install dynatrace-operator oci://public.ecr.aws/dynatrace/dynatrace-operator --create-namespace --namespace dynatrace --atomic
Pulled: public.ecr.aws/dynatrace/dynatrace-operator:1.5.1
Digest: sha256:255f7bcef32ecb53109a287943ed8f665aedee7a382443bb07ee6319dca7d017
NAME: dynatrace-operator
LAST DEPLOYED: Mon May 12 13:48:47 2025
NAMESPACE: dynatrace
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thank you for installing dynatrace-operator.

Your release is named dynatrace-operator.

To find more information about the Dynatrace Operator, try:
https://github.com/Dynatrace/dynatrace-operator

To verify the current state of the deployments, try:
  $ kubectl get pods -n dynatrace
  $ kubectl logs -f deployment/dynatrace-operator -n dynatrace
ubuntu@envoy-qiita:~$ 
```
helmコマンドの出力で、`STATUS: Deployed`になっていればOKです。また、追加で kubectl get pods -n dynatrace コマンドで、Dynatrace Operator 関連の Pod が `Running` になっていることも確認しましょう。
```
ubuntu@envoy-qiita:~$ kubectl get pods -n dynatrace
NAME                                  READY   STATUS    RESTARTS   AGE
dynatrace-oneagent-csi-driver-lpsh4   4/4     Running   0          2m1s
dynatrace-operator-79f4845898-6l6xr   1/1     Running   0          2m1s
dynatrace-webhook-68875cd7c5-kcc22    1/1     Running   0          2m1s
dynatrace-webhook-68875cd7c5-n4f8j    1/1     Running   0          2m1s
ubuntu@envoy-qiita:~$
```
この時点では、まだ Dynatrace のテナントには接続されていません。Dynakubeと呼ばれる CRD（Custom Resource Definition）を使って、自身が持つDynatraceテナント（environment）にデータが遅れるようにしていきます。
その前に、Dynatrace OneAgentがテナントにデータを遅れるように、Token を設定しておきます。必要なトークンは2種類あり、Operatot token と Data injest token です。それぞれのトークンに必要な permission は、下記リンクをクリックして下さい。
* [Operator Token](https://docs.dynatrace.com/docs/shortlink/installation-k8s-tokens-permissions#operatorToken)
* [Data Ingest Token](https://docs.dynatrace.com/docs/ingest-from/setup-on-k8s/deployment/tokens-permissions#dataIngestToken)
```
kubectl -n dynatrace create secret generic dynakube --from-literal="apiToken=<OPERATOR_TOKEN>" --from-literal="dataIngestToken=<DATA_INGEST_TOKEN>"
ubuntu@envoy-qiita:~$ kubectl get secret -n dynatrace
NAME                                       TYPE                 DATA   AGE
dynakube                                   Opaque               2      6s
dynatrace-webhook-certs                    Opaque               5      41m
sh.helm.release.v1.dynatrace-operator.v1   helm.sh/release.v1   1      41m
ubuntu@envoy-qiita:~$ kubectl get secret dynakube -n dynatrace -o yaml
apiVersion: v1
data:
  apiToken: <hash for YOUR OPERATOR TOKEN>
  dataIngestToken: <hash for YOUR DATA_INGEST TOKEN>
kind: Secret
metadata:
  creationTimestamp: "2025-05-12T05:30:24Z"
  name: dynakube
  namespace: dynatrace
  resourceVersion: "53225"
  uid: 733172c5-d97a-4fff-84af-421f0ed5e26f
type: Opaque
ubuntu@envoy-qiita:~$
```
dynakube という secret が作成されていればOKです。secretに保存されているトークンは入力したトークンそのものではありませんのでご注意下さい。

### 2. Dynakube のインストール
次に、dynakube をインストールします。fullstack モニタリングの[手順3](https://docs.dynatrace.com/docs/ingest-from/setup-on-k8s/deployment/full-stack-observability#expand--dynakube-custom-resource-sample-for-full-stack-monitoring--3)に書かれた yaml ファイルを参考にしましょう。このサンプルには記載されていないが大事な設定としては、
* Dynatrace の K8s app に表示されるクラスタ名のカスタマイズ
metadata > annocations で、`feature.dynatrace.com/automatic-kubernetes-api-monitoring-cluster-name` を分かりやすく変更しておきましょう。デフォルトだと `dynakube` になるので、沢山K8s clusterをモニタリングしていると、分からなくなってしまいますので。
```
metadata:
  name: dynakube
  namespace: dynatrace
  annotations:
    feature.dynatrace.com/k8s-app-enabled: "true"
    feature.dynatrace.com/injection-readonly-volume: "true"
    feature.dynatrace.com/automatic-kubernetes-api-monitoring-cluster-name: "envoy-qiita"
```
* istio integrationの設定
dynakube の spec にて、`enableIstio` オプションを有効にしておきます。このオプションを有効にしておくと、自動的に dynatrace namespace に `ServiceEntry` と `VirutalServices` が作成され、envoy proxy を介して Dynatrace 環境（SaaSテナント、OneAgent、ActiveGate）と通信できるようになります。
```
spec:
  # Optional: Configure istio to allow access to the Dynatrace Cluster from the OneAgent or ActiveGate pods.
  #
  enableIstio: true
```
Dynakube の YAML の準備ができたら、apply します。kubectl get dynakube -n dynatrace コマンドの出力で `STATUS` が空白になっていれば、Deployの準備が進んでいることを意味します。ここでErrorなどのメッセージが表示されている場合は、トークンの認証が失敗しているなどの理由が考えられますので、今一度設定手順を見直して下さい。
```
ubuntu@envoy-qiita:~$ kubectl apply -f dynakube-cncf.yaml 
dynakube.dynatrace.com/dynakube created
ubuntu@envoy-qiita:~$ kubectl get dynakube -n dynatrace
NAME       APIURL                                    STATUS   AGE
dynakube   https://<your tenant>.live.dynatrace.com/api            9s
ubuntu@envoy-qiita:~$ kubectl get dynakube -n dynatrace -w
NAME       APIURL                                    STATUS   AGE
dynakube   https://<your tenant>.live.dynatrace.com/api            11s
dynakube   https://<your tenant>.live.dynatrace.com/api            29s
dynakube   https://<your tenant>.live.dynatrace.com/api   Deploying   30s
dynakube   https://<your tenant>.live.dynatrace.com/api   Deploying   5m30s
dynakube   https://<your tenant>.live.dynatrace.com/api   Running     5m41s
```
`STATUS=Running`になったらpodを確認します。activegateとoneagentのPodが`STATUS=Running`になっていれば、OKです。
```
ubuntu@envoy-qiita:~$ kubectl get pods -n dynatrace
NAME                                  READY   STATUS    RESTARTS   AGE
dynakube-activegate-0                 1/1     Running   0          6m43s
dynakube-oneagent-xl7cb               1/1     Running   0          6m42s
dynatrace-oneagent-csi-driver-lpsh4   4/4     Running   0          75m
dynatrace-operator-79f4845898-6l6xr   1/1     Running   0          75m
dynatrace-webhook-68875cd7c5-kcc22    1/1     Running   0          75m
dynatrace-webhook-68875cd7c5-n4f8j    1/1     Running   0          75m
```
DynatraceのKubernetes Appで、`envoy-qiita`という K8s clusterが見えたら正しくActiveGateはインストールされています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778724/84fb74ed-ce29-4944-bb33-0c77f06daf40.png)
Infrastructure & Operations App で、`envoy-qiita`というホストが見えたら正しくOneAgentもインストールされています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778724/0af5fea8-5e13-49e9-83d7-dcc6f5d1431a.png)
ただ、この時点では bookinfo application の Node.Js / Java / Python プロセスに対してOneAgentがinjectされていないため、フルスタックでもモニタはできていません。なぜなら、OneAgentが起動するまえに、Bookinfo applicationが先に動いていたためです。なので、ここで bookinfo application を削除しても、もう一度 deploy します。その後、これらのプロセスがフルスタックでもモニタされるか確認します。
```
ubuntu@envoy-qiita:~$ kubectl -n bookinfo-app delete -f istio-1.26.0/samples/bookinfo/platform/kube/bookinfo.yaml 
service "details" deleted
serviceaccount "bookinfo-details" deleted
deployment.apps "details-v1" deleted
service "ratings" deleted
serviceaccount "bookinfo-ratings" deleted
deployment.apps "ratings-v1" deleted
service "reviews" deleted
serviceaccount "bookinfo-reviews" deleted
deployment.apps "reviews-v1" deleted
deployment.apps "reviews-v2" deleted
deployment.apps "reviews-v3" deleted
service "productpage" deleted
serviceaccount "bookinfo-productpage" deleted
deployment.apps "productpage-v1" deleted
ubuntu@envoy-qiita:~$ kubectl -n bookinfo-app get pods
NAME                                      READY   STATUS    RESTARTS   AGE
bookinfo-gateway-istio-56954d7d95-qmd2h   1/1     Running   0          3h59m
ubuntu@envoy-qiita:~$ 
```
もう一度、applyし直す。
```
ubuntu@envoy-qiita:~$ kubectl -n bookinfo-app apply -f istio-1.26.0/samples/bookinfo/platform/kube/bookinfo.yaml 
service/details created
serviceaccount/bookinfo-details created
deployment.apps/details-v1 created
service/ratings created
serviceaccount/bookinfo-ratings created
deployment.apps/ratings-v1 created
service/reviews created
serviceaccount/bookinfo-reviews created
deployment.apps/reviews-v1 created
deployment.apps/reviews-v2 created
deployment.apps/reviews-v3 created
service/productpage created
serviceaccount/bookinfo-productpage created
deployment.apps/productpage-v1 created
ubuntu@envoy-qiita:~$ kubectl get pods -n bookinfo-app
NAME                                      READY   STATUS    RESTARTS   AGE
bookinfo-gateway-istio-56954d7d95-qmd2h   1/1     Running   0          4h8m
details-v1-77b775f46-mkbzf                2/2     Running   0          3m26s
productpage-v1-78dfd4688c-7rmfc           2/2     Running   0          3m26s
ratings-v1-7c4c8d6794-jnz52               2/2     Running   0          3m26s
reviews-v1-849f9bc5d6-zg2gd               2/2     Running   0          3m26s
reviews-v2-5c757d5846-2cgpj               2/2     Running   0          3m26s
reviews-v3-6d5d98f5c4-zrhj4               2/2     Running   0          3m26s
ubuntu@envoy-qiita:~$ 
```
### 3. OneAgentのトレース情報の確認
これでOneAgentが各プロセスにInjectされたと思いますので、DynatraceのUIで各プロセスの様子を見てみます。OneAgentが対応しているプロセスについては、正しくRuntimeのメトリクスが取れているのが分かります。
* productpage written by Python
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778724/2a12eadb-20ec-4653-ad79-428dc814f26f.png)
* review written by Java
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778724/1f083e5a-04c2-4c8c-93d4-49f0bdd431e3.png)
* ratings written by Node.js
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778724/e4539658-b448-4d98-8bb7-d10b0a555789.png)
Distributed Tracing Appで見ても、OneAgentからのTraceは全て見ていることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778724/a81342e6-dd6f-4765-a485-b058ad673111.png)

でも、本当に見たいのは Envoy proxy を含むEnd-to-endの分散トレースです。ここから、isitoを通じて、Dynatraceに envoy proxy のトレース情報を取得できるように設定していきます。

### 4. Envoy proxy trace をDynatraceでモニタリングする
Dynatraceの[ヘルプドキュメント](https://docs.dynatrace.com/docs/ingest-from/opentelemetry/integrations/istio)には、OpenTelemetryを介してEnvoy Traceをとる方法が丁寧に記載されています。ここのガイドに沿って、このブログでも紹介していきます。実際には、Dynatraceのテナントのメニューに沿って表示されるConfigをそのまま使って下さい。
- Seetings > Install OneAgent > Istio とクリックした際に表示される画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778724/8b18f439-2dd2-4754-8e12-13d85a3da21b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778724/c179c498-c363-4263-aa57-fb5eaa21e39c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778724/4a0070f1-df76-42a5-91cc-95ac511bf38c.png)

a) AccessTokenを設定する
Envoy proxy のトレース情報を取り込むために必要なトークンは、下記2つです。予め、istioにConfigを投入する前にDynatraceの `Access Token`で設定しておきます。
* openTelemetryIrace.injest
* adaptiveTrafficManaged.read

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778724/91b99eff-6c44-4481-a0d7-27b0945c70af.png)

b) MeshConfig をistio に適用する
今回のデモで使ったbookinfo applicationのプロファイルにMeshConfigの設定を追加することで、extensionProviderを使えるようにします。Dynatraceに表示された設定をそのまま、bookinfo applicationのプロファイルに追加します。ただし、`apiVersion`と`kind`は削除可能です（デモプロファイル上に設定があるため）。
```
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    extensionProviders:
    - name: dynatrace-otel
      opentelemetry:
        port: 80
        service: "istio-system/scz18209.live.dynatrace.com"
        http:
          path: "/api/v2/otlp/v1/traces"
          timeout: 10s
          headers:
            - name: "Authorization"
              value: "Api-Token <your access token>"
        resource_detectors:
          dynatrace: {}
        dynatrace_sampler:
          tenant: "scz18209"
          cluster_id: -1733236678
```
デモプロファイルに上記内容を追加したうえで、istioctl コマンドで再度プロファイルをインストールします。
```
ubuntu@envoy-qiita:~/istio-1.26.0/samples/bookinfo$ istioctl install -f demo-profile-no-gateways.yaml -y
        |\          
        | \
        |  \        
        |   \       
      /||    \      
     / ||     \     
    /  ||      \    
   /   ||       \   
  /    ||        \  
 /     ||         \ 
/______||__________\
____________________
  \__       _____/  
     \_____/        

✔ Istio core installed ⛵️                                                                                                                                                             

✔ Istiod installed 🧠
✔ Installation complete
ubuntu@envoy-qiita:~/istio-1.26.0/samples/bookinfo$ 
```
c) Dynatrace ServiceEntry を作成する
UIの手順に従い、下記マニフェストを istio-system namespace に適用します。
```
ubuntu@envoy-qiita:~$ cat qiita-serviceentry.yaml 
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: dynatrace-se-otel
spec:
  hosts:
  - scz18209.live.dynatrace.com
  ports:
  - number: 80
    name: http-port
    protocol: HTTP
    targetPort: 443
  - number: 443
    name: https-port
    protocol: HTTPS
  resolution: DNS
  location: MESH_EXTERNAL
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: dynatrace-dr-otel
spec:
  host: scz18209.live.dynatrace.com
  trafficPolicy:
    portLevelSettings:
    - port:
        number: 80
      tls:
        mode: SIMPLE
------------------------------------------------------------------------------
ubuntu@envoy-qiita:~$ kubectl apply -f qiita-serviceentry.yaml -n istio-system
serviceentry.networking.istio.io/dynatrace-se-otel created
destinationrule.networking.istio.io/dynatrace-dr-otel created
ubuntu@envoy-qiita:~$ kubectl get se -n istio-system
NAME                HOSTS                             LOCATION        RESOLUTION   AGE
dynatrace-se-otel   ["scz18209.live.dynatrace.com"]   MESH_EXTERNAL   DNS          6s
ubuntu@envoy-qiita:~$ kubectl get dr -n istio-system
NAME                HOST                          AGE
dynatrace-dr-otel   scz18209.live.dynatrace.com   11s
ubuntu@envoy-qiita:~$ 
```
Apply したら、ServiceEntry(se)とDestinationRoute(dr)が、isito-system namespace 配下に設定されているか確認しましょう。
d) Tracerの有効化
最後の手順です。UIに表示されたマニフェストをコピーして、istio-system namespace配下に適用します。
```
ubuntu@envoy-qiita:~$ cat qiita-tracing-provier.yaml 
apiVersion: telemetry.istio.io/v1alpha1
kind: Telemetry
metadata:
  name: dynatrace-telemetry-otel
spec:
  tracing:
  - providers:
    - name: dynatrace-otel
ubuntu@envoy-qiita:~$
ubuntu@envoy-qiita:~$ kubectl apply -f qiita-tracing-provier.yaml -n istio-system
telemetry.telemetry.istio.io/dynatrace-telemetry-otel created
ubuntu@envoy-qiita:~$ kubectl get telemetry -n istio-system
NAME                       AGE
dynatrace-telemetry-otel   10s
ubuntu@envoy-qiita:~$ 
```
Tracerが作成されているか、ここもちゃんと確認しましょう。

e) Bookinfo applicationの再デプロイとEnvoy Traceの表示確認
Bookinfo applicationを一度削除して、再び apply します。Applyし、PodがRunningになったら、istioctl コマンドで envoy proxy のコンフィグを確認しましょう。ここでは例として、producpage pod のsidecar envoy のコンフィグを確認しています。
```
ubuntu@envoy-qiita:~$ kubectl get pods -n bookinfo-app
NAME                                      READY   STATUS    RESTARTS   AGE
bookinfo-gateway-istio-56954d7d95-qmd2h   1/1     Running   0          4h51m
details-v1-77b775f46-57qjq                2/2     Running   0          2m47s
productpage-v1-78dfd4688c-f64fj           2/2     Running   0          2m47s
ratings-v1-7c4c8d6794-9rdnq               2/2     Running   0          2m47s
reviews-v1-849f9bc5d6-rfxmv               2/2     Running   0          2m47s
reviews-v2-5c757d5846-lj267               2/2     Running   0          2m47s
reviews-v3-6d5d98f5c4-jd67g               2/2     Running   0          2m47s
ubuntu@envoy-qiita:~$ 
ubuntu@envoy-qiita:~$ istioctl pc l productpage-v1-78dfd4688c-f64fj -n bookinfo-app -o yaml | grep -i opentelemetry.resource_detectors.dynatrace
              - name: envoy.tracers.opentelemetry.resource_detectors.dynatrace
              - name: envoy.tracers.opentelemetry.resource_detectors.dynatrace
              - name: envoy.tracers.opentelemetry.resource_detectors.dynatrace
              - name: envoy.tracers.opentelemetry.resource_detectors.dynatrace
              - name: envoy.tracers.opentelemetry.resource_detectors.dynatrace
              - name: envoy.tracers.opentelemetry.resource_detectors.dynatrace
              - name: envoy.tracers.opentelemetry.resource_detectors.dynatrace
              - name: envoy.tracers.opentelemetry.resource_detectors.dynatrace
              - name: envoy.tracers.opentelemetry.resource_detectors.dynatrace
ubuntu@envoy-qiita:~$ 
```
このように、設定投入したOpenTelemetyの resource detector の情報が表示されれば、OKです。あとは、port-forwardの設定を再度行ったブラウザから bookinfo application にアクセスしましょう。

Bookinfo applicationにアクセスしたのち、DynatraceのUIに戻り、envoy proxyのトレース情報がDynatrace上に表示されているか、確認します。

* Services App
まずは `Services App`で確認してみます。いいですね、下記のようにistioアイコンのサービスが表示されれば、正しく Envoy ingress/egress trace が OpenTelemetry 経由で Dynatrace に Injest されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778724/7612e1ee-ab81-4233-80dd-716c061af197.png)
* Distributed Tracing App
次に、分散トレーシングアプリで確認します。こちらも良さそうですね。OpenTelemety経由で envoy proxy のトーレスが、JavaやNode.jsのトレースはOneAgentから、それぞれInjestされているのが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778724/b23bad23-90ae-44e3-afbc-d8ae4616ad90.png)
Kubernetes Gatewayを経由して入ってきた root span を見ると、綺麗に分散トレースが表現されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778724/702aaec3-803d-4d71-846e-c7e99025abcf.png)

これで完璧です♪

## OpenTelemetry経由でInjestされる envoy trace のライセンスについて
なお、OpenTelemetry経由でinjectされる envoy trace のライセンスについて、最後まとめておきます。通常、Dynatraceの trace api 経由で取り込む OTel などのトレースデータは、ホストライセンスとは別に管理（チャージ）されます。が、envoy trace については、full stack ライセンスを持つOneAgentでモニタリングされているホストノード（Kubernetes host node）から injest されたデータはその fullstack license と紐付けられ、個別にチャージされない仕組みがあります。これを実現させるためには、忘れずに`MeshConfig をistio に適用する`の手順で `resource_detectors` をきちんとApplyしましょう。この（↓）設定です。
```
        resource_detectors:
          dynatrace: {}
```
この resource_detectors の設定をすることで、OTel traceに、OneAgentがfullstackでモニタリングしているホスト情報、プロセスグループ情報、プロセスグループインスタンス情報などを自動的に enrichment してくれ、そのデータがDynatraceテナントに届いた時に、DDUなどのカスタムメトリクスにチャージされないようになっています。Distributed Tracing Appでも、envoy traceのメタ情報を見ると確かに、enrichment され、fullstack ラインセスと認識されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778724/c9dce684-db25-4076-8fd6-4e09a42285a7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778724/c8ab2cd8-460a-4afb-94bd-111afb29a460.png)
resource_detectors の設定に関するドキュメントは、istio 本家の [document](https://istio.io/latest/docs/reference/config/istio.mesh.v1alpha1/#MeshConfig-ExtensionProvider-ResourceDetectors) にも記載されていますので、ぜひ目を通しておいて下さい。

## まとめ
いかがだったでしょうか？前回のブログの準備編に続き、Istio sample application の bookinfo application の trace 情報を envoy 含めて可視化するを記事にしてみました。ちょうどタイミングよく、Istio 1.26.0 の最新版が先週（May 8th, 2025）に[リリース](https://istio.io/latest/news/releases/1.26.x/announcing-1.26/)されたので、私的にも最新版で動作確認できてよかったです。折角なので、次回は Istio metricsをDynatraceに取り込んでみたいと思います。Isitoのinstall directory配下には prometheus serverのmainfestもありますし。Promethus serverで取得したisito metricsをDynatrace OneAgent で scrap して、Dynatraceに取り込んでみましょう。

まだ、Dynatraceを触ったことがない方、このブログを見てやってみたいと思われた方は、下記フリートライアルにてお試し下さい。↓↓↓

Dynatraceフリートライアル → https://www.dynatrace.com/ja/trial/