- 重要な情報
- はじめに
- 用語集
- エージェント
- インテグレーション
- OpenTelemetry
- 開発者
- API
- CoScreen
- アプリ内
- インフラストラクチャー
- アプリケーションパフォーマンス
- 継続的インテグレーション
- ログ管理
- セキュリティ
- UX モニタリング
- 管理
カスタムスパンタグをスパンに追加して、Datadog 内の可観測性をカスタマイズします。スパンタグは受信トレースに適用されるため、観測された動作を、マーチャントの階層、チェックアウト金額、ユーザー ID などのコードレベルの情報と関連付けることができます。
C++ トレースは「共通タグ」を使用します。このタグは、Datadog 固有のタグまたは OpenTracing タグの両方から取得でき、以下を介して含めることができます。
#include <opentracing/ext/tags.h>
#include <datadog/tags.h>
統合サービスタグ付けには Datadog タグが必要であることに注意してください。
Span::SetTag
を呼び出して、スパンにタグを直接追加します。例:
auto tracer = ...
auto span = tracer->StartSpan("オペレーション名");
span->SetTag("キーは文字列でなければなりません", "値は変数タイプです");
span->SetTag("キーは文字列でなければなりません", 1234);
値は変数タイプであり、複雑なオブジェクトにすることができます。値は JSON としてシリアル化されますが、文字列値はそのままシリアル化されます(余分な引用符はありません)。
すべてのスパンにタグを設定するには、DD_TAGS
環境変数をカンマで区切られた key:value
ペアのリストとして設定します。
スパンをエラーに関連付けるには、スパンに 1 つ以上のエラー関連タグを設定します。たとえば、以下のようになります。
span->SetTag(opentracing::ext::error, true);
あるいは
span->SetTag("error", true);
error.msg
、error.stack
、error.type
タグを組み合わせて、エラーに関するより詳細な情報を設定します。エラータグの詳細については、エラー追跡を参照してください。
エラータグを組み合わせて追加した例:
// このスパンを標準ライブラリの "bad file descriptor "エラーと関連付けて
// ください。
span->SetTag("error.msg", "[EBADF] invalid file");
span->SetTag("error.type", "errno");
error.msg
、error.stack
または error.type
タグのいずれかを追加すると、error
に値 true
を設定します。
スパンのエラーを解除するには、error
タグに値 false
を設定します。このとき、それまで設定されていた error.msg
、error.stack
、error.type
タグはすべて削除されます。
// このスパンに関連するすべてのエラー情報をクリアします。
span->SetTag("error", false);
コードの手動インスツルメンテーションをするには、セットアップ例のとおりトレーサーをインストールし、トレーサーオブジェクトを使用しスパンを作成します。
{
// 現在のリクエストのルートスパンを作成します。
auto root_span = tracer->StartSpan("get_ingredients");
// ルートスパンのリソース名を設定します。
root_span->SetTag(datadog::tags::resource_name, "bologna_sandwich");
// ルートスパンを親とする子スパンを作成します。
auto child_span = tracer->StartSpan(
"cache_lookup",
{opentracing::ChildOf(&root_span->context())});
// 子スパンのリソース名を設定します。
child_span->SetTag(datadog::tags::resource_name, "ingredients.bologna_sandwich");
// スパンは、明示的な時間で終了させることも ...
child_span->Finish();
} // ... デストラクタが起動されたときに暗黙的に終了させることもできます。
// 例えば、root_span はここで終了します。
分散型トレーシングはトレーサーの Inject
そして Extract
メソッドを使用することで実現でき、一般的な Reader
や Writer
タイプを受け入れます。スパンの均一なデリバリーのため、優先度付きサンプリング(デフォルトで有効)は有効でなければなりません。
// Allows writing propagation headers to a simple map<string, string>.
// Copied from https://github.com/opentracing/opentracing-cpp/blob/master/mocktracer/test/propagation_test.cpp
struct HTTPHeadersCarrier : HTTPHeadersReader, HTTPHeadersWriter {
HTTPHeadersCarrier(std::unordered_map<std::string, std::string>& text_map_)
: text_map(text_map_) {}
expected<void> Set(string_view key, string_view value) const override {
text_map[key] = value;
return {};
}
expected<void> ForeachKey(
std::function<expected<void>(string_view key, string_view value)> f)
const override {
for (const auto& key_value : text_map) {
auto result = f(key_value.first, key_value.second);
if (!result) return result;
}
return {};
}
std::unordered_map<std::string, std::string>& text_map;
};
void example() {
auto tracer = ...
std::unordered_map<std::string, std::string> headers;
HTTPHeadersCarrier carrier(headers);
auto span = tracer->StartSpan("operation_name");
tracer->Inject(span->context(), carrier);
// `headers` now populated with the headers needed to propagate the span.
}
トレーシングクライアントと Datadog Agent の両方で、コンフィギュレーションを追加することで、B3 ヘッダーを使用したコンテキスト伝播や、ヘルスチェックなどの計算されたメトリクスでこれらのトレースがカウントされないように、特定のリソースがトレースを Datadog に送信しないように除外することができます。
Datadog APM トレーサーは、分散型トレーシングの B3 ヘッダーの抽出と挿入をサポートしています。
分散したヘッダーの挿入と抽出は、挿入/抽出スタイルを構成することで制御されます。現在、次の 2 つのスタイルがサポートされています:
Datadog
B3
挿入スタイルは次を使って構成できます:
DD_PROPAGATION_STYLE_INJECT="Datadog B3"
環境変数の値は、挿入が有効になっているヘッダースタイルのカンマ (またはスペース) 区切りリストです。デフォルトでは、Datadog 挿入スタイルのみが有効になっています。
抽出スタイルは次を使って構成できます:
DD_PROPAGATION_STYLE_EXTRACT="Datadog B3"
環境変数の値は、抽出が有効になっているヘッダースタイルのカンマ (またはスペース) 区切りリストです。デフォルトでは、Datadog 抽出スタイルのみが有効になっています。
複数の抽出スタイルが有効になっている場合、抽出試行はスタイルの構成順で実行され、最初に成功した抽出値が使われます。
トレースはそれぞれのリソース名に基づいて除外可能で、これによりヘルスチェックなどの外形監視トラフィックが Datadog にレポートされるトレースから削除されます。この設定およびその他のセキュリティ/微調整に関するコンフィギュレーションについてはセキュリティページを参照してください。
お役に立つドキュメント、リンクや記事:
お役に立つドキュメント、リンクや記事: