首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向应用程序服务的默认请求遥测添加自定义维度的最简单方法是什么?

向应用程序服务的默认请求遥测添加自定义维度的最简单方法是什么?
EN

Stack Overflow用户
提问于 2019-12-19 00:43:37
回答 3查看 1.1K关注 0票数 2

我只是利用默认的Application日志记录请求遥测,而不需要任何自定义代码。请求遥测如下所示:

代码语言:javascript
复制
timestamp [UTC]     2019-12-19T00:22:10.2563938Z
id                  |a758472d124b6e4688a33b2ad9755f33.b3979544_
name                GET MyMethod [type]
url                 https://xxxx
success             True
resultCode          200
duration            153.2676
performanceBucket   <250ms
itemType            request
customDimensions 
    AppId                           xxxx-xxxx-xxxx-xxxx-xxxxxx
    AspNetCoreEnvironment:          west us
   _MS.ProcessedByMetricExtractors (Name:'Requests', Ver:'1.1')

现在,我想在请求遥测中向customDimensions添加一个新属性,例如,correlationId。最简单的方法是什么?我只想用现有的请求遥测,不想创建新的事件。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-19 01:43:35

要添加自定义维度,可以使用ITelemetryInitializer

下面是一个.NET核心web项目的示例:

1.向项目中添加名为MyTelemetryInitializer的类,代码如下所示:

代码语言:javascript
复制
public class MyTelemetryInitializer : ITelemetryInitializer
{
    public void Initialize(ITelemetry telemetry)
    {
        var requestTelemetry = telemetry as RequestTelemetry;

        //if it's not a request, just return.
        if (requestTelemetry == null) return;

        if (!requestTelemetry.Properties.ContainsKey("correlationId"))
        {
            requestTelemetry.Properties.Add("correlationId", "id_123456");
        }
    }

 }

2.在Startup.cs -> ConfigureServices方法中,使用以下代码:

代码语言:javascript
复制
    public void ConfigureServices(IServiceCollection services)
    {
       //your other code           

        //register the class MyTelemetryInitializer.
        services.AddSingleton<ITelemetryInitializer, MyTelemetryInitializer>();
    }

测试结果:

如果您正在使用其他编程语言,请遵循官方文档,并使用适当的ITelemetryInitializer.方法

票数 0
EN

Stack Overflow用户

发布于 2019-12-19 07:08:59

如果您对按摩数据感兴趣(即根据遥测项本身提供的内容进行修改),那么Ivan的答案是正确的。

如果您想在现有的请求中添加一些内容,那么您需要做一些事情:

1)在请求中使用Activity.Tags属性包

代码语言:javascript
复制
Activity.Current?.AddTag("TagName", "TagValue");

2)拥有遥测初始化器,它将标记作为自定义维度(在下一个版本中,我们可以将其添加为默认的初始化程序,并且不再需要此步骤)。

代码语言:javascript
复制
/// <summary>
/// Helper class to workaround AI SDK not collecting activity tags by default.
/// This initializer allows the business logic to have no AI references.
/// </summary>
public class ActivityTagsTelemetryInitializer : ITelemetryInitializer
{
    public void Initialize(ITelemetry telemetry)
    {
        var activity = Activity.Current;
        var requestTelemetry = telemetry as ISupportProperties;

        if (requestTelemetry == null || activity == null) return;

        foreach (var tag in activity.Tags)
        {
            requestTelemetry.Properties[tag.Key] = tag.Value;
        }
    }
}

3)启动注册

代码语言:javascript
复制
services.AddSingleton<ITelemetryInitializer, ActivityTagsTelemetryInitializer>();
票数 1
EN

Stack Overflow用户

发布于 2022-03-03 14:17:42

您不需要创建您自己的TelemetryInitializer,但是可以在可以引用httpContext的任何地方这样做:

代码语言:javascript
复制
var requestTelemetry = httpContext.Features.Get<RequestTelemetry>();
if (requestTelemetry != null)
{
    requestTelemetry.Properties["YourCustomDimension"] = someValue;
}

以这种方式添加的属性将添加到Application中的requests表中。

要为可以使用的dependencies表和traces表添加

代码语言:javascript
复制
System.Diagnostics.Activity.Current.AddBaggage("YourCustomDimension" someValue);

要在编写日志条目时添加到traces,只需将对象传递给日志消息中带有占位符的LogXXX方法。

代码语言:javascript
复制
_logger.LogWarning("hello {YourCustomDimension}", someValue);

someValue将被序列化为json,因此如果您愿意,它可以是一个复杂的对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59401912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档