te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>c# - How can I set the operation ID for the incoming request based on the value of a custom HTTP header using Azure Monitor Open
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

c# - How can I set the operation ID for the incoming request based on the value of a custom HTTP header using Azure Monitor Open

programmeradmin3浏览0评论

I want to set the trace ID (operation ID) of the request to an ASP.NET Core application based on a custom HTTP header (correlation-id).

According to the docs, this should be possible using ITelemetryInitializer in the Application Insights SDK:

I'm looking for similar functionality for the Azure.Monitor.OpenTelemetry.AspNetCore package.

All of our upstream services are currently using our custom correlation-id header, so I would like to use this header for the operation ID instead of rewriting each of those client applications to use traceparent OTEL header:

How can I set the operation ID for the incoming request based on the value of a custom HTTP header?

It's not possible to set the trace ID using options:

    builder.Services.Configure<AspNetCoreTraceInstrumentationOptions>(options =>
    {
        options.RecordException = true;
        options.Filter = (httpContext) =>
        {
            // only collect telemetry about HTTP GET requests
            return HttpMethods.IsGet(httpContext.Request.Method);
        };
    });

I want to set the trace ID (operation ID) of the request to an ASP.NET Core application based on a custom HTTP header (correlation-id).

According to the docs, this should be possible using ITelemetryInitializer in the Application Insights SDK:

https://learn.microsoft/en-us/azure/azure-monitor/app/api-filtering-sampling?tabs=dotnet%2Cjavascriptwebsdkloaderscript

I'm looking for similar functionality for the Azure.Monitor.OpenTelemetry.AspNetCore package.

All of our upstream services are currently using our custom correlation-id header, so I would like to use this header for the operation ID instead of rewriting each of those client applications to use traceparent OTEL header:

https://learn.microsoft/en-us/azure/azure-monitor/app/distributed-trace-data#correlation-headers-using-w3c-tracecontext

How can I set the operation ID for the incoming request based on the value of a custom HTTP header?

It's not possible to set the trace ID using options:

    builder.Services.Configure<AspNetCoreTraceInstrumentationOptions>(options =>
    {
        options.RecordException = true;
        options.Filter = (httpContext) =>
        {
            // only collect telemetry about HTTP GET requests
            return HttpMethods.IsGet(httpContext.Request.Method);
        };
    });
Share Improve this question edited Feb 17 at 17:54 Shuzheng asked Feb 17 at 14:09 ShuzhengShuzheng 14k29 gold badges115 silver badges227 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 1

OpenTelemetry follows the W3C trace context specification, and therefore doesn't really have a mechanism for you to change the trace ID.

The TraceId (set within the initial Activity created by the ASP.NET Core runtime) is set using the DistributedContextPropagator that's part of ASP.NET Core, not OpenTelemetry. While you can override this, it's not advisable.

Here's a post about how you can override the propagator https://martinjt.me/2023/07/07/trace-propagation-and-public-api-endpoints-in-net-part-1-disable-all/

I would highly advise against going against the W3C standards for context propagation though, it will likely cause lots of issues in downstream applications.

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论