예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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()]);
        }
예제 #5
0
        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()]);
        }
예제 #7
0
        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()]);
        }
예제 #8
0
        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()]);
        }