internal static List <TelemetryItem> OtelToAzureMonitorMetrics(Batch <Metric> batch, string roleName, string roleInstance, string instrumentationKey) { List <TelemetryItem> telemetryItems = new List <TelemetryItem>(); TelemetryItem telemetryItem; foreach (var metric in batch) { if (metric.MetricType == MetricType.DoubleSum || metric.MetricType == MetricType.DoubleGauge) { foreach (ref var metricPoint in metric.GetMetricPoints()) { string name = "Metric"; string utcTime = TelemetryItem.FormatUtcTimestamp(metricPoint.EndTime.UtcDateTime); telemetryItem = new TelemetryItem(name, utcTime); telemetryItem.Tags[ContextTagKeys.AiInternalSdkVersion.ToString()] = SdkVersionUtils.SdkVersion; telemetryItem.InstrumentationKey = instrumentationKey; telemetryItem.SetResource(roleName, roleInstance); telemetryItem.Data = new MonitorBase { BaseType = "MetricData", BaseData = new MetricsData(version, metric, ref metricPoint) }; telemetryItems.Add(telemetryItem); } } else { // log not supported } } return(telemetryItems); }
internal static List <TelemetryItem> OtelToAzureMonitorLogs(Batch <LogRecord> batchLogRecord, string roleName, string roleInstance, string instrumentationKey) { List <TelemetryItem> telemetryItems = new List <TelemetryItem>(); TelemetryItem telemetryItem; foreach (var logRecord in batchLogRecord) { telemetryItem = new TelemetryItem(logRecord); telemetryItem.InstrumentationKey = instrumentationKey; telemetryItem.SetResource(roleName, roleInstance); if (logRecord.Exception != null) { telemetryItem.Data = new MonitorBase { BaseType = "ExceptionData", BaseData = new TelemetryExceptionData(Version, logRecord), }; } else { telemetryItem.Data = new MonitorBase { BaseType = "MessageData", BaseData = new MessageData(Version, logRecord), }; } telemetryItems.Add(telemetryItem); } return(telemetryItems); }
internal static List <TelemetryItem> OtelToAzureMonitorTrace(Batch <Activity> batchActivity, string roleName, string roleInstance, string instrumentationKey) { List <TelemetryItem> telemetryItems = new List <TelemetryItem>(); TelemetryItem telemetryItem; foreach (var activity in batchActivity) { MonitorBase telemetryData = new MonitorBase(); var monitorTags = TraceHelper.EnumerateActivityTags(activity); telemetryItem = new TelemetryItem(activity, ref monitorTags); telemetryItem.InstrumentationKey = instrumentationKey; telemetryItem.SetResource(roleName, roleInstance); switch (activity.GetTelemetryType()) { case TelemetryType.Request: telemetryData.BaseType = "RequestData"; telemetryData.BaseData = new RequestData(Version, activity, ref monitorTags); break; case TelemetryType.Dependency: telemetryData.BaseType = "RemoteDependencyData"; telemetryData.BaseData = new RemoteDependencyData(Version, activity, ref monitorTags); break; } telemetryItem.Data = telemetryData; telemetryItems.Add(telemetryItem); } return(telemetryItems); }
public void GeneratePartAEnvelope_Activity_WithParentSpanId() { using ActivitySource activitySource = new ActivitySource(ActivitySourceName); using var activity = activitySource.StartActivity( ActivityName, ActivityKind.Client, parentContext: new ActivityContext(ActivityTraceId.CreateRandom(), ActivitySpanId.CreateRandom(), ActivityTraceFlags.Recorded), startTime: DateTime.UtcNow); var resource = CreateTestResource(); var monitorTags = TraceHelper.EnumerateActivityTags(activity); var telemetryItem = new TelemetryItem(activity, ref monitorTags); var resourceParser = new ResourceParser(); resourceParser.UpdateRoleNameAndInstance(resource); telemetryItem.SetResource(resourceParser.RoleName, resourceParser.RoleInstance); Assert.Equal("RemoteDependency", telemetryItem.Name); Assert.Equal(TelemetryItem.FormatUtcTimestamp(activity.StartTimeUtc), telemetryItem.Time); Assert.StartsWith("unknown_service", telemetryItem.Tags[ContextTagKeys.AiCloudRole.ToString()]); Assert.Equal(Dns.GetHostName(), telemetryItem.Tags[ContextTagKeys.AiCloudRoleInstance.ToString()]); Assert.NotNull(telemetryItem.Tags[ContextTagKeys.AiOperationId.ToString()]); Assert.NotNull(telemetryItem.Tags[ContextTagKeys.AiInternalSdkVersion.ToString()]); Assert.Equal(activity.ParentSpanId.ToHexString(), telemetryItem.Tags[ContextTagKeys.AiOperationParentId.ToString()]); }
public void GeneratePartAEnvelope_Activity_WithResource() { using ActivitySource activitySource = new ActivitySource(ActivitySourceName); using var activity = activitySource.StartActivity( ActivityName, ActivityKind.Client, parentContext: default, startTime: DateTime.UtcNow); var resource = CreateTestResource(serviceName: "my-service", serviceInstance: "my-instance"); var monitorTags = TraceHelper.EnumerateActivityTags(activity); var telemetryItem = new TelemetryItem(activity, ref monitorTags); var resourceParser = new ResourceParser(); resourceParser.UpdateRoleNameAndInstance(resource); telemetryItem.SetResource(resourceParser.RoleName, resourceParser.RoleInstance); Assert.Equal("RemoteDependency", telemetryItem.Name); Assert.Equal(TelemetryItem.FormatUtcTimestamp(activity.StartTimeUtc), telemetryItem.Time); Assert.Equal("my-service", telemetryItem.Tags[ContextTagKeys.AiCloudRole.ToString()]); Assert.Equal("my-instance", telemetryItem.Tags[ContextTagKeys.AiCloudRoleInstance.ToString()]); Assert.Equal(activity.TraceId.ToHexString(), telemetryItem.Tags[ContextTagKeys.AiOperationId.ToString()]); Assert.Equal(SdkVersionUtils.SdkVersion, telemetryItem.Tags[ContextTagKeys.AiInternalSdkVersion.ToString()]); Assert.Throws <KeyNotFoundException>(() => telemetryItem.Tags[ContextTagKeys.AiOperationParentId.ToString()]); }
public void ValidateTelemetryItem_DefaultActivity_DefaultResource() { using ActivitySource activitySource = new ActivitySource(ActivitySourceName); using var activity = activitySource.StartActivity( ActivityName, ActivityKind.Client, parentContext: default, startTime: DateTime.UtcNow); var resource = CreateTestResource(); var monitorTags = TraceHelper.EnumerateActivityTags(activity); var telemetryItem = new TelemetryItem(activity, ref monitorTags); var resourceParser = new ResourceParser(); resourceParser.UpdateRoleNameAndInstance(resource); telemetryItem.SetResource(resourceParser.RoleName, resourceParser.RoleInstance); Assert.Equal("RemoteDependency", telemetryItem.Name); Assert.Equal(TelemetryItem.FormatUtcTimestamp(activity.StartTimeUtc), telemetryItem.Time); Assert.StartsWith("unknown_service", telemetryItem.Tags[ContextTagKeys.AiCloudRole.ToString()]); Assert.Equal(Dns.GetHostName(), telemetryItem.Tags[ContextTagKeys.AiCloudRoleInstance.ToString()]); Assert.NotNull(telemetryItem.Tags[ContextTagKeys.AiOperationId.ToString()]); Assert.NotNull(telemetryItem.Tags[ContextTagKeys.AiInternalSdkVersion.ToString()]); Assert.Throws <KeyNotFoundException>(() => telemetryItem.Tags[ContextTagKeys.AiOperationParentId.ToString()]); }
public void RoleInstanceIsNotOverwrittenIfSetViaServiceInstanceId() { using ActivitySource activitySource = new ActivitySource(ActivitySourceName); using var activity = activitySource.StartActivity( ActivityName, ActivityKind.Server, null, startTime: DateTime.UtcNow); var resource = CreateTestResource(null, null, "serviceinstance"); var monitorTags = TraceHelper.EnumerateActivityTags(activity); var telemetryItem = new TelemetryItem(activity, ref monitorTags); var resourceParser = new ResourceParser(); resourceParser.UpdateRoleNameAndInstance(resource); telemetryItem.SetResource(resourceParser.RoleName, resourceParser.RoleInstance); Assert.Equal("serviceinstance", telemetryItem.Tags[ContextTagKeys.AiCloudRoleInstance.ToString()]); }
public void RoleInstanceIsSetToHostNameByDefault() { using ActivitySource activitySource = new ActivitySource(ActivitySourceName); using var activity = activitySource.StartActivity( ActivityName, ActivityKind.Server, null, startTime: DateTime.UtcNow); var resource = CreateTestResource(); var monitorTags = TraceHelper.EnumerateActivityTags(activity); var telemetryItem = new TelemetryItem(activity, ref monitorTags); var resourceParser = new ResourceParser(); resourceParser.UpdateRoleNameAndInstance(resource); telemetryItem.SetResource(resourceParser.RoleName, resourceParser.RoleInstance); Assert.Equal(Dns.GetHostName(), telemetryItem.Tags[ContextTagKeys.AiCloudRoleInstance.ToString()]); }