- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试拥有一个 azure 功能(.net core 6 隔离),我希望在其中连接到应用程序洞察和用户 W3C Traceparent 作为我的关联方法。
我已经安装了 System.Diagnostics.DiagnosticSource (7.0.1)、Microsoft.Azure.Functions.Worker.ApplicationInsights (1.0.0-preview) 并将所需的代码添加到我的 program.cs
.ConfigureFunctionsWorkerDefaults(builder =>
{
builder.AddApplicationInsights()
.AddApplicationInsightsLogger();
})
虽然我看到 Activity.Id 确实包含一个 TraceParent 格式字符串,但如果我发送一个 TraceParent header ,该事件不会获取它,因此,我在应用程序见解中看不到它。此外,响应不会发回traceparent header ...
然后,我被迫创建一个中间件来尝试此操作,我认真地想知道这是否是实现目标的正确方法,因为记住这仅适用于 http 触发器(更喜欢适用于所有人的东西)
public class TraceparentMiddleware : IFunctionsWorkerMiddleware
{
private const string TraceParentPattern = "^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$";
public async Task Invoke(FunctionContext context, FunctionExecutionDelegate next)
{
try
{
if (await TrySetActivityId(context))
await next(context);
else
{
var req = await context.GetHttpRequestDataAsync();
var res = req!.CreateResponse(HttpStatusCode.BadRequest);
await res.WriteStringAsync("Invalid traceparent format.");
context.GetInvocationResult().Value = res;
}
SetTraceparentHeader(context);
}
catch
{
SetTraceparentHeader(context);
throw; //because I don't know where the app insights code to log the exceptions happens.
}
}
private static async Task<bool> TrySetActivityId(FunctionContext context)
{
var request = await context.GetHttpRequestDataAsync();
if (request?.Headers?.TryGetValues("traceparent", out var values) ?? false && !string.IsNullOrWhiteSpace(values?.FirstOrDefault()))
{
var regex = new Regex(TraceParentPattern, RegexOptions.IgnoreCase);
if (regex.IsMatch(values.FirstOrDefault()))
Activity.Current.GetType()
.GetField("_id", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)
.SetValue(Activity.Current, values.FirstOrDefault());
else
return false;
}
return true;
}
private void SetTraceparentHeader(FunctionContext context)
{
var response = context.GetHttpResponseData();
if (!response?.Headers?.Contains("traceparent") ?? false)
response.Headers.Add("traceparent", Activity.Current.Id);
}
}
如您所见...我什至被迫使用反射来设置 Activity.Current.Id,这是我想避免的。
最佳答案
您还可以通过 HttpRequestData.FunctionContext.TraceContext 访问 TraceParent。
看看这是否适合您。
var traceParent = request.FunctionContext.TraceContext.TraceParent
watch 中的traceparent示例。
关于c# - Azure Function .net core 6 隔离-traceparent (W3C) 关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75734136/
我们希望将 Azure APIM 和 Application Insight 中的请求关联起来。对于 API,我们有一个在入站和出站部分使用发送请求的策略。我们正在使用 W3C distributed
我们希望将 Azure APIM 和 Application Insight 中的请求关联起来。对于 API,我们有一个在入站和出站部分使用发送请求的策略。我们正在使用 W3C distributed
有没有办法检查 traceparent 的正确性在转发到后端服务之前使用 Azure API 管理策略的 http header ? 最佳答案 我能找到的最好方法是使用正则表达式创建 API 管理策略
有没有办法检查 traceparent 的正确性在转发到后端服务之前使用 Azure API 管理策略的 http header ? 最佳答案 我能找到的最好方法是使用正则表达式创建 API 管理策略
我正在尝试拥有一个 azure 功能(.net core 6 隔离),我希望在其中连接到应用程序洞察和用户 W3C Traceparent 作为我的关联方法。 我已经安装了 System.Diagno
我正在尝试拥有一个 azure 功能(.net core 6 隔离),我希望在其中连接到应用程序洞察和用户 W3C Traceparent 作为我的关联方法。 我已经安装了 System.Diagno
我是一名优秀的程序员,十分优秀!