このページは日本語には対応しておりません。随時翻訳に取り組んでいます。
翻訳に関してご質問やご意見ございましたら、お気軽にご連絡ください

概要

Error Tracking は、デフォルトの戦略を使って、類似のエラーを問題としてインテリジェントにグループ化します。_カスタムフィンガープリンティング_を使えば、グループ化の決定を完全に制御し、エラースパンに対するグループ化の動作をカスタマイズすることができます。

エラーの error.fingerprint を提供することで、グループ化をカスタマイズできます。フィンガープリントは、エラーソースに応じて属性またはタグ で提供されます (詳細はセットアップを参照)。error.fingerprint の値には特定の形式や要件はありませんが、内容は文字列でなければなりません。

error.fingerprint が指定されている場合、グループ化の動作は次のルールに従います。

  • カスタムグループ化がデフォルトの戦略よりも優先されます。
  • カスタムグループ化はエラーのサブセットにのみ適用可能で、デフォルトの戦略と共存できます。
  • error.fingerprint の内容は、修正なしでそのまま使用されます。
  • 同じサービスで発生し、同じ error.fingerprint 属性を持つエラーは、同じ問題としてグループ化されます。
  • service 属性が異なるエラーは、別の問題としてグループ化されます。

セットアップ

APM

カスタムグループ化に必要なのは、1 つのエラースパンと、文字列で指定された 1 つの error.fingerprint スパンタグのみです。

まだ Datadog で APM トレースを収集していない場合は、APM ドキュメントを参照して APM をセットアップします。

すでに APM スパンを送信している場合は、エラースパンに新しい error.fingerprint タグを追加します。

Python での例を次に示します。

with tracer.trace("throws.an.error") as span:
  span.set_tag('error.fingerprint', 'my-custom-grouping-material')
  raise Exception("Something went wrong")

例外発生時点でアクティブなスパンが存在する場合は、例外情報が捕捉され、スパンにアタッチされます。 この場合、エラー追跡でこれらのエラースパンを単一の問題としてグループ化するために my-custom-grouping-material が使用されます。

Log Management

カスタムグループ化に必要なのは、1 つのエラーログと、文字列で指定された 1 つの error.fingerprint 属性のみです。

まだ Datadog でログを収集していない場合は、ログ管理のドキュメントを参照してログをセットアップします。

source タグ (言語の指定) が適切に構成されていることを確認します。

すでに JSON 形式でログを記録している場合は、エラーログに新しい error.fingerprint 属性を追加してください。

Python で JSON 形式のロガーを作成する例を示します。

import logging
import json_log_formatter

formatter = json_log_formatter.JSONFormatter()

json_handler = logging.FileHandler(filename='/var/log/my-log.json')
json_handler.setFormatter(formatter)

logger = logging.getLogger('my_json')
logger.addHandler(json_handler)
logger.setLevel(logging.INFO)

logger.error('Error processing request', extra={'error.fingerprint': 'my-custom-grouping-material'})

この場合、my-custom-grouping-material を使用して、エラー追跡でこれらのエラーログを 1 つの問題にグループ化します。

モバイルの例

Datadog のモバイル SDK では、ログの呼び出しに事前定義済みの属性を追加することで、エラーをログに記録する際にカスタムのエラーフィンガープリントを追加することができます。

カスタムグループ化を使用するには、Datadog iOS SDK 2.8.1 以上が必要です。

let errorFingerprint = "my-custom-grouping-material"
logger.error(
  "My error message",
  error: error,
  attributes: [
    Logs.Attributes.errorFingerprint: errorFingerprint
  ]
)

カスタムグループ化を使用するには、Datadog Android SDK 2.7.0 以上が必要です。

val errorFingerprint = "my-custom-grouping-material"
val attributes = mapOf(LogAttributes.ERROR_FINGERPRINT to errorFingerprint)
logger.e("My error message", error, attributes)

カスタムグループ化を使用するには、Datadog Flutter SDK 2.4.0 以上が必要です。

final errorFingerprint = "my-custom-grouping-material";
logger.error(
  'My error message',
  errorStackTrace: st,
  attributes {
    DatadogAttributes.errorFingerprint: "my-custom-grouping-material",
  }
);

または、ログマッパーでフィンガープリントを追加または調整することもできます。

カスタムグループ化を使用するには、Datadog iOS SDK 2.8.1 以上が必要です。

let logsConfiguration = Logs.Configuration(
  eventMapper: { log in
      var log = log
      log.error?.fingerprint = "my-custom-grouping-material"
      return log
  }
)
Logs.enable(
  with: logsConfiguration
)

カスタムグループ化を使用するには、Datadog Android SDK 2.7.0 以上が必要です。

val mapper = object : EventMapper<LogEvent> {
    override fun map(event: LogEvent): LogEvent {
        event.fingerprint = "my-custom-grouping-material"
        return event
    }
}
val logsConfiguration = LogsConfiguration.Builder()
    .setEventMapper(mapper)
    .build()
Logs.enable(logsConfiguration)

カスタムグループ化を使用するには、Datadog Flutter SDK 2.4.0 以上が必要です。

LogEvent? mapLogEvent(LogEvent event) {
  event.error?.fingerprint = "my-custom-grouping-material";
  return event;
}

final loggingConfiguration = DatadogLoggingConfiguration(
  eventMapper: mapLogEvent,
);

final configuration = DatadogConfiguration(
    // ...
    loggingConfiguration: loggingConfiguration,
);

RUM

まだ Datadog でブラウザ RUM イベントを収集していない場合は、RUM ブラウザモニタリングのセットアップドキュメントまたはRUM モバイルおよび TV モニタリングのセットアップドキュメントを参照してください。

カスタマイズグループ化を使用するには、Datadog ブラウザ SDK v4.42.0 以降ブラウザ RUM エラー、および追加文字列属性が必要です。

すでにブラウザエラーを収集している場合は、以下のどちらかで属性を追加することが可能です。

  • エラーオブジェクトに dd_fingerprint 属性を追加する。
import { datadogRum } from '@datadog/browser-rum';
// カスタムエラーをコンテキスト付きで送信する
const error = new Error('Something went wrong');
error.dd_fingerprint = 'my-custom-grouping-fingerprint'
datadogRum.addError(error);
  • または、beforeSend コールバックに error.fingerprint 属性を付けて使用する。
DD_RUM.init({
  ...
  beforeSend: () => {
    if (event.type === 'error') {
      event.error.fingerprint = 'my-custom-grouping-fingerprint'
    }
  },
})

どちらの場合も、my-custom-grouping-material を使用して、エラー追跡でブラウザ RUM エラーを 1 つの問題にグループ化します。

カスタムグループ化を使用するには、Datadog iOS SDK 2.8.1 以上が必要です。

手動でエラーを報告する際にカスタムのフィンガープリントを追加するには、addError を呼び出す際に事前定義済みの属性を追加します。

RUMMonitor.shared().addError(
  message: "My error message",
  source: .source,
  attributes: [
    RUM.Attributes.errorFingerprint: "my-custom-grouping-fingerprint"
  ]
)

または、errorEventMapper を使用することもできます。

var config = RUM.Configuration(applicationID: "rum-application-id")
config.errorEventMapper = { errorEvent in
  var errorEvent = errorEvent
  errorEvent.error.fingerprint = "my-custom-grouping-fingerprint"
  return errorEvent
}
RUM.enable(with: config)

カスタムグループ化を使用するには、Datadog Android SDK 2.7.0 以上が必要です。

手動でエラーを報告する際にカスタムのフィンガープリントを追加するには、addError を呼び出す際に事前定義済みの属性を追加します。

GlobalRumMonitor.get().addError(
  "My error message",
  RumErrorSource.SOURCE,
  exception,
  mapOf(
    RumAttributes.ERROR_CUSTOM_FINGERPRINT to "my-custom-grouping-fingerprint"
  )
)

または、errorEventMapper を使用することもできます。

val rumConfiguration = RumConfiguration.Builder("rum-application-id")
  .setErrorEventMapper(object : EventMapper<ErrorEvent> {
    override fun map(event: ErrorEvent): ErrorEvent {
        event.error.fingerprint = "my-custom-grouping-fingerprint"
        return event
    }
  }).build()
RUM.enable(rumConfiguration)

カスタムグループ化を使用するには、Datadog Flutter SDK 2.4.0 以上が必要です。

手動でエラーを報告する際にカスタムのフィンガープリントを追加するには、addError を呼び出す際に事前定義済みの属性を追加します。

final rum = DatadogSdk.instance.rum;
rum?.addErrorInfo("My error message",
  RumErrorSource.source,
  attributes: {
    DatadogAttributes.errorFingerprint: 'my-custom-grouping-fingerprint',
  },
);

または、errorEventMapper を使用することもできます。

RumErrorEvent? mapRumErrorEvent(RumErrorEvent event) {
  event.error.fingerprint = "my-custom-grouping-fingerprint";
  return event;
}

final rumConfiguration = DatadogRumConfiguration(
  // ...
  errorEventMapper: mapRumErrorEvent,
);

final configuration = DatadogConfiguration(
    // ...
    rumConfiguration: rumConfiguration,
);