我只是利用默认的Application日志记录请求遥测,而不需要任何自定义代码。请求遥测如下所示:
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。最简单的方法是什么?我只想用现有的请求遥测,不想创建新的事件。
发布于 2019-12-19 01:43:35
要添加自定义维度,可以使用ITelemetryInitializer。
下面是一个.NET核心web项目的示例:
1.向项目中添加名为MyTelemetryInitializer的类,代码如下所示:
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方法中,使用以下代码:
public void ConfigureServices(IServiceCollection services)
{
//your other code
//register the class MyTelemetryInitializer.
services.AddSingleton<ITelemetryInitializer, MyTelemetryInitializer>();
}测试结果:

如果您正在使用其他编程语言,请遵循官方文档,并使用适当的ITelemetryInitializer.方法
发布于 2019-12-19 07:08:59
如果您对按摩数据感兴趣(即根据遥测项本身提供的内容进行修改),那么Ivan的答案是正确的。
如果您想在现有的请求中添加一些内容,那么您需要做一些事情:
1)在请求中使用Activity.Tags属性包
Activity.Current?.AddTag("TagName", "TagValue");2)拥有遥测初始化器,它将标记作为自定义维度(在下一个版本中,我们可以将其添加为默认的初始化程序,并且不再需要此步骤)。
/// <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)启动注册
services.AddSingleton<ITelemetryInitializer, ActivityTagsTelemetryInitializer>();发布于 2022-03-03 14:17:42
您不需要创建您自己的TelemetryInitializer,但是可以在可以引用httpContext的任何地方这样做:
var requestTelemetry = httpContext.Features.Get<RequestTelemetry>();
if (requestTelemetry != null)
{
requestTelemetry.Properties["YourCustomDimension"] = someValue;
}以这种方式添加的属性将添加到Application中的requests表中。
要为可以使用的dependencies表和traces表添加
System.Diagnostics.Activity.Current.AddBaggage("YourCustomDimension" someValue);要在编写日志条目时添加到traces,只需将对象传递给日志消息中带有占位符的LogXXX方法。
_logger.LogWarning("hello {YourCustomDimension}", someValue);someValue将被序列化为json,因此如果您愿意,它可以是一个复杂的对象。
https://stackoverflow.com/questions/59401912
复制相似问题