分散型トレーシング(APM)ベストプラクティス¶
前提条件¶
アカウント登録:公式ウェブサイト https://guance.com/ にアクセスしてアカウントを登録し、登録済みのアカウント/パスワードでログインしてください。
Datakit のインストール¶
コマンドの取得¶
[機能] モジュールをクリックし、[DataKit] を選択して、お使いのオペレーティングシステムとシステムタイプに応じて適切なインストールコマンドを選択してください。
インストールの実行¶
Datakit のインストールコマンドをコピーし、監視対象のサーバー上で直接実行します。
- インストールディレクトリ /usr/local/datakit/
- ログディレクトリ /var/log/datakit/
- メイン設定ファイル /usr/local/datakit/conf.d/datakit.conf
- プラグイン設定ディレクトリ /usr/local/datakit/conf.d/
Datakit のインストールが完了すると、Linux ホストの一般的なプラグインがデフォルトで有効になります。DF の「インフラストラクチャー」→「組み込みビュー」で確認できます。
| コレクター名 | 説明 |
|---|---|
| cpu | ホストの CPU 使用状況を収集 |
| disk | ディスク使用状況を収集 |
| diskio | ホストのディスク IO を収集 |
| mem | ホストのメモリ使用状況を収集 |
| swap | Swap メモリ使用状況を収集 |
| system | ホストの OS 負荷を収集 |
| net | ホストのネットワークトラフィックを収集 |
| host_process | ホスト上で常駐(10 分以上稼働)しているプロセスリストを収集 |
| hostobject | ホストの基本情報(OS 情報、ハードウェア情報など)を収集 |
| docker | ホスト上のコンテナオブジェクトとコンテナログを収集 |
[インフラストラクチャー] モジュールをクリックすると、Datakit がインストールされているすべてのホストのリストと基本情報(ホスト名、CPU、メモリなど)が表示されます。
[ホスト名] をクリックすると、そのホストの詳細なシステム情報、統合実行状況(そのホストにインストールされているすべてのプラグイン)、組み込みビュー(ホスト)が表示されます。
[統合実行状況] の任意のプラグイン名をクリックし、[モニタリングビューの表示] を選択すると、そのプラグインの組み込みビューが表示されます。
APM モニタリングシナリオの表示¶
Guance にログインし、該当するプロジェクトのワークスペースに入ります。APM をクリックすると表示されます。
APM の紹介¶
APM は正式名称を Application Performance Management(アプリケーションパフォーマンス管理) といい、インターネットの発展に伴って生まれたモニタリング技術です。登場当初から、インターネットユーザーの高トラフィックによるアプリケーションパフォーマンスのボトルネック問題を解決することを目的としており、開発および運用の観点からアプリケーションのレイヤーごとの呼び出しロジックを可視化し、企業内での迅速な障害特定と MTTR(平均修復時間)の短縮を実現し、ユーザー体験全体を向上させます。本質的に、APM は NPM(パッシブモニタリング)やログなどのデプロイ方法とは大きく異なり、ユースケースも若干異なります。APM のデプロイ方法は多くの場合、インストルメンテーション(バイトコードインジェクションや AOP)であり、ログや NPM はユーザーコードへの介入が不要なことが多いのに対し、APM は主に開発者や運用者がシステム全体の動作状態、健全性、外部 API、データベース呼び出し、さらにはより詳細なコードやメソッド呼び出しのリソース消費や異常を確認するために使用され、アプリケーション側のシステムパフォーマンスと安定性の保証に重点を置いています。NPM の主なユースケースは、ネットワークリンク側の遅延やパケットロス、パケットキャプチャと解析であり、アプリケーション内のコードパフォーマンス分析には関与しません。ログは既知の問題やビジネスログの処理に重点を置き、コード品質の分析には関与しません。
トレーシング関連の用語説明:
| キーワード | 説明 |
|---|---|
| サービス | service_name。Trace モニタリング追加時にカスタマイズ可能 |
| リソース | アプリケーションにおける 1 回の独立したアクセスリクエストのエントリポイント |
| 持続時間 | 応答時間。アプリケーションがリクエストを受信してから応答を返すまでの完全なプロセス |
| ステータス | OK と ERROR の 2 種類。エラーにはエラー率とエラー数が含まれる |
| Span | 単一のメソッド呼び出し操作の全プロセスが Trace リンクを構成し、Trace は複数の Span ユニットで構成される |
Guance は現在、Opentracing プロトコルをサポートするすべての APM 監視ツール(Skywalking、Zipkin、Jaeger、Ddtrace など)をサポートしています。具体的な導入方法も、元のオープンソース監視ツールの導入方法と同じで、元のコードに監視関連ファイルを追加またはインポート(例:Java の場合は Jar パッケージを追加)し、datakit で対応する inputs を有効にすることで、トレースデータを DF プラットフォームに送信できます。また、ログ、メトリクス、インフラストラクチャーデータと関連付けて分析し、統合的な監視・運用・開発を実現し、全体的なトラブルシューティングの効率を向上させることができます。
APM 収集の設定¶
datakit.conf でトレーシング inputs を有効化¶
###########--------Linux環境---------##########
$ cd /usr/local/datakit/conf.d/
###########--------Windows環境-------##########
$ C:\Program Files\datakit\conf.d
## 使用する監視ツールに応じて、異なるconfファイルを有効にする必要があります。1つだけを使用する場合は、対応するconfファイルをコピーして有効にしてください。このドキュメントではddtraceを使用しています。
#############----------skywalking----------###########
$ cd /traceSkywalking
$ cp traceSkywalking.conf.sample traceSkywalking.conf
#############----------skywalking----------###########
#############------------jaeger------------###########
$ cd /traceJaeger
$ cp traceJaeger.conf.sample traceJaeger.conf
#############------------jaeger------------###########
#############------------zipkin------------###########
$ cd /traceZipkin
$ cp traceZipkin.conf.sample traceZipkin.conf
#############------------zipkin------------###########
#############------------ddtrace------------###########
$ cd /ddtrace
$ cp ddtrace.conf.sample ddtrace.conf
#############------------zipkin------------###########
## ファイルのコピー後、vimで編集モードに入り、inputsのコメントを解除します。
## 例:ddtrace tags関連のコメントは必要に応じて有効にし、ビジネスやその他の関連タグを追加できます。
$ vim ddtrace.conf
$ [inputs.ddtrace]
$ path = "/v0.4/traces"
$ # [inputs.ddtrace.tags]
$ # tag1 = "tomcat"
$ # tag2 = "tag2"
$ # tag3 = "tag3"
$ wq!
## datakit を再起動
###########--------Linux環境---------##########
$ datakit --restart
###########--------Windows環境-------##########
## 右クリック → タスクマネージャー → サービス → datakit → 再起動
アプリケーションへの APM 導入手順¶
ddtrace エージェントのダウンロード先
- Python: https://github.com/DataDog/dd-trace-py
- Golang: https://github.com/DataDog/dd-trace-go
- NodeJS: https://github.com/DataDog/dd-trace-js
- PHP: https://github.com/DataDog/dd-trace-php
- Ruby: https://github.com/DataDog/dd-trace-rb
- C#(dotnet): https://github.com/DataDog/dd-trace-dotnet
- C++: https://github.com/DataDog/dd-opentracing-cpp
- Java:https://github.com/DataDog/dd-trace-java
ddtrace 関連の環境変数(起動パラメータ)の説明
Ddd.env:環境タイプをカスタマイズ (オプション)
Ddd.service.name: アプリケーション名をカスタマイズ (必須) この設定を行ってもデータが表示されない場合は、nameを削除して試してください。
Ddd.agent.port:データアップロードポート(デフォルト9529 )(必須)
Ddd.version:アプリケーションバージョン (オプション)
Ddd.trace.sample.rate:サンプリングレートを設定(デフォルトは全サンプリング)(オプション)
Ddd.service.mapping:現在のアプリケーションが呼び出すredis、mysqlなどにエイリアスを追加し、他のアプリケーションが呼び出すredis、mysqlと区別するために使用します (オプション)
Ddd.host:データ転送先IP、デフォルトはlocalhost (オプション)
具体的な設定は Datadog 公式ドキュメント を参照してください。
Java(ddtrace)の導入:¶
- [ddtrace-agent] をダウンロードします。0.80.0 を推奨します。
アプリケーション環境と同じディレクトリに配置します。
(datakit 1.6 以降、ddtrace-java-agent はデフォルトで datakit に組み込まれています。ディレクトリ:/usr/local/datakit/data/)
2. 既存のアプリケーション起動スクリプトに ddtrace.jar の起動パラメータを追加します。以下のフィールドを追加します:-javaagent:/xxx/ddtrace.jar -Ddd.env=xxx -Ddd.service.name=xxx -Ddd.agent.port=xxx。xxx の部分はすべて実際の値に置き換えてください。
Tomcat での導入¶
catalina.sh に ddtrace の起動パラメータを追加した後、tomcat を再起動します。コード内の xxx は絶対パスに置き換える必要があります。
$ cd /xxx/tomcat/bin
$ vim catalina.sh
$ CATALINA_OPTS="$CATALINA_OPTS -javaagent:/xxx/ddtrace.jar -Ddd.env=test -Ddd.service.name=demo001 -Ddd.agent.port=9529"; export CATALINA_OPTS
$ wq!
## tomcat を再起動
$ ./bin/startup.sh
Guance にログインし、該当するプロジェクトのワークスペースに入り、APM をクリックすると、サービス名が mall-admin のアプリケーションデータが表示されます。
マイクロサービスでの導入¶
起動スクリプトに ddtrace の起動パラメータを追加し、アプリケーションを再起動します。コード内の xxx は絶対パスに置き換える必要があります。
## 元の起動スクリプト:
$ nohup java -jar mall-admin.jar &
## ddtrace起動パラメータを追加した後の起動スクリプトは以下の通りです。コマンドを実行してアプリケーションを再起動します:
$ nohup java -javaagent:/xxx/dd-java-agent-0.72.0.jar -Ddd.service.name=mall-admin -Ddd.agent.port=9529 -jar mall-admin.jar &
Guance にログインし、該当するプロジェクトのワークスペースに入り、APM をクリックすると、サービス名が mall-admin のアプリケーションデータが表示されます。
Docker での導入¶
Docker 環境での導入方法は複数あります。ここでは 2 つの方法を紹介します。
1. Dockerfile を変更し、再ビルドします。コード内の xxx は絶対パスに置き換える必要があります
$ vim Dockerfile
##Dockerfileにddtrace-agentのパスを追加します。xxxは絶対パスを指します。
$ ADD dd-java-agent-0.75.0.jar /xxx/
$ ENTRYPOINT ["java","-javaagent:/xxx/dd-java-agent-0.75.0.jar","-Ddd.service.name=mall-admin","-Ddd.version=v1","-Ddd.env=product","-Ddd.agent.port=9529","-Ddd.agent.host=172.16.0.198","-jar", “-Dspring.profiles.active=prod","/mall-admin-1.0-SNAPSHOT.jar"]
$ wq!
## build & run
$ docker build -t mall/mall-admin:v1 . [ “.” は必須です]
## docker run
$ docker run -p 8080:8080 --name mall-admin --link mysql:db --link redis:redis -v /etc/localtime:/etc/localtime -v /mydata/app/admin/logs:/var/logs -d mall/mall-admin:v1
- Dockerfile を変更せず、起動パラメータで元の起動コマンドを上書きします(一部のシナリオでは機能しない場合があります)
## 元の起動コマンド
$ docker run -p 8080:8080 --name mall-admin --link mysql:db --link redis:redis -v /etc/localtime:/etc/localtime -v /mydata/app/admin/logs:/var/logs -d mall/mall-admin:v1
## ddtraceを含む起動コマンド。dockerfile内のjarパッケージの起動コマンドを確認する必要があります。
$ docker run -p 8080:8080 --name mall-admin --link mysql:db --link redis:redis -v /etc/localtime:/etc/localtime -v /mydata/app/admin/logs:/var/logs -d mall/mall-admin:v1 java -javaagent:/wx/dd-java-agent-0.75.0.jar -Ddd.service.name=mall-admin -Ddd.version=v1 -Ddd.env=product -Ddd.agent.port=9529 -Ddd.agent.host=172.16.0.198 -jar -Dspring.profiles.active=prod /mall-admin-1.0-SNAPSHOT.jar
## 注意:java -javaagent を追加した後、起動スクリプトの末尾に -jar your app name.jar を追加する必要があります。
Guance にログインし、該当するプロジェクトのワークスペースに入り、APM をクリックすると、対応する service.name のアプリケーションデータが表示されます。
C#(dotnet-ddtrace)の導入¶
IIS ホスティング環境での導入:¶
備考:[dotnet-agent ダウンロードリンク] 。必要に応じて x86、arm64 などのバージョンのエージェントをダウンロードしてください。
- サーバー環境変数の追加
## このPCを右クリック → プロパティ → システムの詳細設定 → 環境変数
## 新しいシステム変数を作成 → 以下の内容を入力
DD_TRACE_AGENT_URL=http://localhost:9529 (必須)
DD_ENV= 例:test (オプション)
DD_SERVICE= 例:myappname (必須)
DD_VERSION= 例:1.0 (オプション)
DD_TRACE_SERVICE_MAPPING= 例:mysql:main-mysql-db (オプション)
## TRACE_AGENT_URL はデータアップロードのIPとポートです。http://localhost:9529 を設定してください。変更は推奨しません。
## ENV はシステム環境です。pro や test など、必要に応じて設定してください。
## SERVICE は DF プラットフォームに表示されるアプリケーション名です。具体的なサービス名を設定してください。
## VERSION はバージョン番号です。必要に応じて設定してください。
## TRACE_SERVICE_MAPPING は、DF プラットフォーム上で他のビジネスシステムが呼び出すコンポーネントと区別して表示するために、サービス名を変更する設定です。リネームするサービス名のキーと使用する名前のマッピングを受け付けます。形式は [from-key]:[to-name] です。
注意:[from-key] の内容は標準フィールドです(例:mysql、redis、mongodb、oracle)。カスタム変更は行わないでください。
例:TRACE_SERVICE_MAPPING=mysql:main-mysql-db
TRACE_SERVICE_MAPPING=mongodb:offsite-mongodb-service
- ddtrace-agent のインストール
管理者権限で dotnet-agent インストーラを実行し、インストールが完了するまで「次へ」をクリックします。
- PowerShell で以下のコマンドを実行し、IIS を再起動します
Guance プラットフォームにログインし、APM モジュールで対応するサービス名のアプリケーションを確認します。
Python(ddtrace)の導入¶
.NET Core(ddtrace)の導入¶
備考:[dotnet.core-agent ダウンロードリンク] 。.NET Tracer は現在、.NET Core 2.1、3.1、および .NET 5 上のアプリケーションのトレーシングをサポートしています。
- 環境に応じて以下のコマンドを実行し、.net core-agent をインストールします
Debian または Ubuntu
sudo dpkg -i ./datadog-dotnet-apm_<TRACER_VERSION>_amd64.deb && /opt/datadog/createLogPath.sh
CentOS または Fedora
sudo rpm -Uvh datadog-dotnet-apm<TRACER_VERSION>-1.x86_64.rpm && /opt/datadog/createLogPath.sh
Alpine またはその他の musl ベースのディストリビューション
sudo tar -xzf -C /opt/datadog datadog-dotnet-apm<TRACER_VERSION>-musl.tar.gz && sh /opt/datadog/createLogPath.sh
その他のディストリビューション
sudo tar -xzf -C /opt/datadog datadog-dotnet-apm<TRACER_VERSION>-tar.gz && /opt/datadog/createLogPath.sh
- アプリケーション環境変数の追加
アプリケーションに設定されている環境変数に以下の設定を追加します。 ここは参考用です。実際の設定では、service 名を変更する必要があります。
export CORECLR_ENABLE_PROFILING=1
export CORECLR_PROFILER_PATH=/opt/datadog/Datadog.Trace.ClrProfiler.Native.so
export DD_INTEGRATIONS=/opt/datadog/integrations.json
export DD_DOTNET_TRACER_HOME=/opt/datadog
export DD_TRACE_AGENT_URL=http://localhost:9529
export DD_SERVICE=service_test
export CORECLR_PROFILER={846F5F1C-F9AE-4B07-969E-05C26BC060D8}
- アプリケーションを再起動します
Q&A¶
agent と jar パッケージの位置関係¶
ddtrace-agent の起動パラメータは、Java アプリケーションの起動 -jar の前に配置する必要があります。最終的な形式は java -javaagent -jar です。
## 元の起動スクリプト:
$ java -jar mall-admin.jar
## ddtrace 起動パラメータを追加した後の起動スクリプトは以下の通りです。コマンドを実行してアプリケーションを再起動します:
$ java -javaagent:/xxx/dd-java-agent-0.72.0.jar -Ddd.service.name=mall-admin -Ddd.agent.port=9529 -jar mall-admin.jar
tomcat-catalina.sh のパラメータ設定¶
catalina.sh に ddtrace の起動パラメータを追加した後、tomcat を再起動します。コード内の xxx は絶対パスに置き換える必要があります。
CATALINA_OPTS の設定は、必ず catalina.sh 内のアプリケーション起動スクリプトに読み込まれるようにしてください。そうしないと、アプリケーションが正常に起動しても ddtrace-agent が起動しません。
$ cd /xxx/tomcat/bin
$ vim catalina.sh
$ CATALINA_OPTS="$CATALINA_OPTS -javaagent:/xxx/ddtrace.jar -Ddd.env=test -Ddd.service.name=demo001 -Ddd.agent.port=9529"; export CATALINA_OPTS
$ wq!
## tomcat を再起動
$ ./bin/startup.sh
Guance にログインし、該当するプロジェクトのワークスペースに入り、APM をクリックすると、サービス名が mall-admin のアプリケーションデータが表示されます。











