カスタム テレメトリ シグナルを追加する
監視とテレメトリ機能が有効になっていると、テレメトリは Azure Application Insights に送信されます。 一部のテレメトリは初期設定で送信されます。 ただし、独自のカスタム テレメトリ シグナルを追加するための拡張機能を提供することもできます。 これらの信号は、カスタム プロセスに関するより多くの情報を提供できます。
テレメトリ ロガー
カスタム テレメトリをログするための主要なエントリ ポイントは、SysApplicationInsightsTelemetryLogger
クラスを使います。 このクラスは、Azure Application Insights テレメトリ クライアントをカプセル化し、イベント、ページ ビュー、追跡、例外、またはメトリックを追跡するために必要な操作へのアクセスを提供します。
ロガーは、静的コンストラクターパターンを使用して、ユーザー セッションごとに 1 つのシングルトン インスタンスを確保します。 カプセル化された Azure Application Insights テレメトリ クライアントはさらにキャッシュされ、Application Object Server (AOS) インスタンスごとに 1 つのテレメトリ クライアントしか作成されないようにします。
テレメトリ データ コントラクトのタイプ
現在、Microsoft Dynamics 365 Finance および Microsoft Dynamics 365 Supply Chain Management は、次のタイプのデータ コントラクトをサポートします。
タイプ | X++ クラス | Application Insights データ型 |
---|---|---|
イベント | SysApplicationInsightsEventTelemetry | Microsoft.ApplicationInsights.DataContracts.EventTelemetry |
PageView | SysApplicationInsightsPageViewTelemetry | Microsoft.ApplicationInsights.DataContracts.PageViewTelemetry |
例外 | SysApplicationInsightsExceptionTelemetry | Microsoft.ApplicationInsights.DataContracts.ExceptionTelemetry |
追跡 | SysApplicationInsightsTraceTelemetry | Microsoft.ApplicationInsights.DataContracts.TraceTelemetry |
イベント
Azure Application Insights にカスタム イベントをログするには、SysApplicationInsightsEventTelemetry
クラスのインスタンスを作成して必要なペイロードを渡すことができます。 その後、SysApplicationInsightsTelemetryLogger
クラスの trackEvent
メソッドを使用して、イベントを送信します。
次の例では、SysUserLog
テーブルでレコードが作成された際にイベントを送信する方法を示します。
[PostHandlerFor(tableStr(SysUserLog), tableMethodStr(SysUserLog, insert))]
internal static void logUserLogOn(XppPrePostArgs _args)
{
if( SysIntParameters::Find().CaptureUserSessions
&& SysApplicationInsightsTelemetryHelper::useSysApplicationInsightsTelemetryLogger())
{
SysUserLog sysUserLog = _args.getThis();
UserInfo userInfo;
select firstonly RecId, ObjectId
from userInfo
where userInfo.id == sysUserLog.UserId;
SysApplicationInsightsEventTelemetry eventTelemetry = SysApplicationInsightsEventTelemetry::newFromEventIdName('Admin001', 'UserLogOn');
eventTelemetry.addProperty(SysApplicationInsightsUserIdProperty::newFromValue(sysUserLog.UserId));
eventTelemetry.addProperty(SysApplicationInsightsUserObjectIdProperty::newFromValue(guid2Str(userInfo.ObjectId)));
eventTelemetry.addProperty(SysApplicationInsightsUserLogBuildNumberProperty::newFromValue(sysUserLog.BuildNum));
eventTelemetry.addProperty(SysApplicationInsightsUserLogSessionIdProperty::newFromValue(int2Str(sysUserLog.SessionId)));
eventTelemetry.addProperty(SysApplicationInsightsUserLogBuildNumberProperty::newFromValue(sysUserLog.BuildNum));
eventTelemetry.addProperty(SysApplicationInsightsComputerNameProperty::newFromValue(sysUserLog.Computername));
SysApplicationInsightsTelemetryLogger::instance().trackEvent(eventTelemetry);
}
}
ページ ビュー
既定で、Finance and Supply Chain Management は、アプリケーションで開かれたすべてのフォームをログする pageView
エントリを使用しています。
[SubscribesTo(classStr(FormRun), staticDelegateStr(FormRun, onFormRunCompleted))]
public static void FormRun_onFormRunCompleted(FormRun _formInstance)
{
if( SysIntParameters::Find().CaptureFormRun
&& _formInstance.args()
&& _formInstance.args().menuItemName()
&& SysApplicationInsightsTelemetryHelper::useSysApplicationInsightsTelemetryLogger())
{
SysApplicationInsightsPageViewTelemetry pageTelemetry = SysApplicationInsightsPageViewTelemetry::newFromPageIdName(_formInstance.instanceId(), _formInstance.args().menuItemName(), _formInstance.lifecycleHelper().GetFormLoadingDuration());
SysApplicationInsightsTelemetryLogger::instance().trackPageView(pageTelemetry);
}
}
例外
次の例は、SysApplicationInsightsExceptionTelemetry
契約を使用して SysApplicationInsightsTelemetryLogger
クラスの trackException
メソッドを呼び出すことで、Azure Application Insights の例外を追跡する方法を示しています。
SysApplicationInsightsExceptionTelemetry exceptionTelemetry = SysApplicationInsightsExceptionTelemetry::newFromExceptionMessage(Args.getArg('txt'));
exceptionTelemetry.addProperty(SysApplicationInsightsClassNameProperty::newFromValue(classStr(Global)));
exceptionTelemetry.addProperty(SysApplicationInsightsMethodNameProperty::newFromValue(staticmethodStr(Global, Error)));
exceptionTelemetry.addProperty(SysApplicationInsightsCallStackProperty::newFromCurrentCallStack());
SysApplicationInsightsTelemetryLogger::instance().trackException(exceptionTelemetry);
メモ
前の例は SysApplicationInsightsGlobalTelemetry
クラスのもので、情報ログに表示されるすべてのエラーは自動的に Azure Application Insights に送信されます。
トレース
次の例は、SysApplicationInsightsTraceTelemetry
契約を使用して SysApplicationInsightsTelemetryLogger
クラスの trackTrace
メソッドを呼び出すことで、Azure Application Insights の例外を追跡する方法を示しています。
SysApplicationInsightsTraceTelemetry traceTelemetry = SysApplicationInsightsTraceTelemetry::newFromMessageAndSeverity('My custom trace message', Microsoft.ApplicationInsights.DataContracts.SeverityLevel::Information);
SysApplicationInsightsTelemetryLogger::instance().trackTrace(traceTelemetry);
メトリック
メトリックとの対話は、前の例と異なります。 メトリックの場合は、特定のデータ契約を使用する必要はありません。 代わりに、trackMetric
メソッドを使用して、SysApplicationInsightsTelemetryLogger
クラスと直接対話できます。 ロガーは、最初に Azure Application Insights から既存のメトリック インスタンスを取得し、値を更新します。
trackMetricWithDimensions
を使用して、分析コードとして使用するプロパティを追加できます。 その後、これらの分析コードに基づいて値をスライスできます。
パフォーマンス上の理由から、メトリックはローカルの事前集計を使用します。 この方法により、1 分の間に特定のメトリックに対する更新が Azure Application Insights に送信されます。 ローカルの事前集計の使用は、特定のメトリックに対する多くの更新が発生するバッチ処理シナリオで有益です。
メトリックの完全な概要は、Azure Monitor メトリックの概要で確認できます。