gpt4 book ai didi

azure - 如果客户端未发送,如何在 APIM 入站策略中获取/设置 Traceparent header ?

转载 作者:行者123 更新时间:2023-12-03 00:23:19 27 4
gpt4 key购买 nike

我们希望将 Azure APIM 和 Application Insight 中的请求关联起来。对于 API,我们有一个在入站和出站部分使用发送请求的策略。我们正在使用 W3C distributed tracing Azure , specification

现在,如果客户端不发送traceparent header ,则入站中的发送请求不会在应用程序洞察中关联。

如果我们尝试在入站策略中设置traceparent header ,它将在策略的后端部分被覆盖。看起来 APIM 会检查传入的请求,如果没有设置 Traceparent,它将生成它。但我们无法在策略中向传入请求添加 header (只读)。

政策示例

<policies>
<inbound>
<base />
<send-request mode="new" response-variable-name="inboundresponse" timeout="10" ignore-error="true">
<set-url>https://someUrl.com</set-url>
<set-method>GET</set-method>
<set-header name="traceparent" exists-action="skip">
<value>00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01</value>
</set-header>
<set-body></set-body>
</send-request>
<!-- for test set fixed value, but this value is overwritten by Azure APIM in backend
and all 3 requests are not coorrelated -->
<set-header name="traceparent" exists-action="skip">
<value>00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01</value>
</set-header>
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
<!-- traceparent value we get here is not the same that we set -->
<send-request mode="new" response-variable-name="outboundresponse" timeout="10" ignore-error="true">
<set-url>https://someUrl.com</set-url>
<set-method>GET</set-method>
<set-header name="traceparent" exists-action="skip">
<value>00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01</value>
</set-header>
<set-body></set-body>
</send-request>

</outbound>
<on-error>
<base />
</on-error>
</policies>

Trace

最佳答案

您是否尝试过使用这样的 set-header 策略:

<set-header name="traceparent" exists-action="override">
<value>00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01</value>
</set-header>

注意覆盖 exists-action。在我的测试中,traceparent 已按预期设置并发送到后端。

更新

如果您只想在没有可用的关联上下文 header 的情况下设置新的关联上下文 header ,我建议您使用以下语句:

<set-header name="traceparent" exists-action="skip">
<value>@($"00-{context.RequestId.ToString("N")}-0000000000000000-01")</value>
</set-header>

通过 context.RequestId.ToString("N"),您可以获取请求的内部相关 ID,并对其进行格式化(不带破折号)。另外值得一提的是:

您是否已在“设置”选项卡中将关联格式设置为 W3C? enter image description here

关于azure - 如果客户端未发送,如何在 APIM 入站策略中获取/设置 Traceparent header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63868924/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com