【Azure APIM】自建网关(self-host gateway)收集请求的Header和Body内容到日志中的办法

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
函数计算FC,每月15万CU 3个月
简介: 在Azure API Management中,通过配置trace策略可完整记录API请求的Header和Body信息。在Inbound和Outbound策略中分别使用context.Request/Response.Headers和Body.As<string>方法捕获数据,并写入Trace日志,便于排查与审计。

问题描述

使用 Azure API Management(APIM)时,需要记录每个 API 请求的 HeaderBody,以便进行问题排查和审计,如何配置才能完整捕获这些信息呢?

 

问题解答

在配置API的时候,启用 trace  策略来收集 inbound / outbound中分别收集请求的Header/Body信息。


具体操作步骤如下:

第一步:进入API的Policy编辑页面,分别修改Inbound和Outbound策略

在Inbound 加入 如下部分内容, 分别获取Request 的Headers 和 Body信息,作为Trace的Message内容

  • context.Request.Body.As<string>(preserveContent: true):用于读取请求体内容,并保留原始内容供后续处理。
  • context.Request.Headers.Select(...):用于拼接所有请求头信息。


<inbound>

       <base />

       <trace source="request-info" severity="information">

           <message>@{              

           var headerOutput = string.Join("\n", context?.Request?.Headers?.Select(h => $"{h.Key}: {string.Join(";", h.Value)}"));

           var body = context?.Request?.Body?.As<string>(preserveContent: true) ?? "No Body";

           return $"\n\nRequest Headers:\n{headerOutput}\n\nRequest Body:\n{body}\n\n";

       }</message>

       </trace>

   </inbound>


在Outbound 加入 如下部分内容, 分别获取Response 的Headers 和 Body信息,作为Trace的Message内容

  • context.Response.Body.As<string>(preserveContent: true):用于读取响应体内容,并保留原始内容供后续处理。
  • context.Response.Headers.Select(...):用于拼接所有响应的头信息。


   <outbound>

       <base />

       <trace source="response-info" severity="information">

           <message>@{              

           var headerOutput = string.Join("\n", context?.Response?.Headers?.Select(h => $"{h.Key}: {string.Join(";", h.Value)}"));

           var body = context?.Response?.Body?.As<string>(preserveContent: true) ?? "No Body";

           return $"\n\nResponse Headers:\n{headerOutput}\n\nResponse Body:\n{body}\n\n";

       }</message>

       </trace>

   </outbound>

 

第二步:以AKS部署部署自建网关为例,查看日志输出效果

 


【end】



参考资料

将 Azure API 管理自承载网关部署到 Azure Kubernetes 服务 : https://docs.azure.cn/zh-cn/api-management/how-to-deploy-self-hosted-gateway-azure-kubernetes-service

Trace : https://docs.azure.cn/zh-cn/api-management/trace-policy

 





当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

相关文章
|
2月前
|
存储 缓存 负载均衡
Gateway 网关坑我! 被这个404 问题折腾了一年?
小富分享了一个困扰团队一年多的 SpringCloud Gateway 路由 404 问题。通过日志追踪和源码分析,发现是网关在 Nacos 配置更新后未能正确清理旧的路由权重缓存,导致负载均衡时仍使用已删除的路由数据。最终通过监听路由刷新事件并手动更新缓存,成功解决了问题。
647 125
Gateway 网关坑我! 被这个404 问题折腾了一年?
|
3月前
|
安全 虚拟化
Omnissa Secure Email Gateway 2.33 - 电子邮件网关
Omnissa Secure Email Gateway 2.33 - 电子邮件网关
81 0
|
负载均衡 Java 应用服务中间件
Gateway服务网关
Gateway服务网关
307 1
Gateway服务网关
|
12月前
|
负载均衡 Java API
项目中用的网关Gateway及SpringCloud
Spring Cloud Gateway 是一个功能强大、灵活易用的API网关解决方案。通过配置路由、过滤器、熔断器和限流等功能,可以有效地管理和保护微服务。本文详细介绍了Spring Cloud Gateway的基本概念、配置方法和实际应用,希望能帮助开发者更好地理解和使用这一工具。通过合理使用Spring Cloud Gateway,可以显著提升微服务架构的健壮性和可维护性。
616 0
|
负载均衡 Java 网络架构
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
761 5
|
Java API 微服务
服务网关Gateway
该博客文章详细介绍了Spring Cloud Gateway的使用方法和概念。文章首先阐述了API网关在微服务架构中的重要性,解释了客户端直接与微服务通信可能带来的问题。接着,文章通过具体的示例代码,展示了如何在Spring Cloud Gateway中添加依赖、编写路由规则,并对路由规则中的基本概念如Route、Predicate和Filter进行了详细解释。最后,文章还提供了路由规则的测试方法。
服务网关Gateway
|
负载均衡 Java 应用服务中间件
Gateway服务网关
本节针对微服务中另一重要组件:网关 进行了实战性演练,网关作为分布式架构中的重要中间件,不仅承担着路由分发(重点关注Path规则配置),同时可根据自身负载均衡策略,对多个注册服务实例进行均衡调用。本节我们借助GateWay实现的网关只是技术实现的方案之一,后续大家可能会接触像:Zuul、Kong等,其实现细节或有差异,但整体目标是一致的。
|
JSON 前端开发 Java
SpringCloud怎么搭建GateWay网关&统一登录模块
本文来分享一下,最近我在自己的项目中实现的认证服务,目前比较简单,就是可以提供一个公共的服务,专门来处理登录请求,然后我还在API网关处实现了登录拦截的效果,因为在一个博客系统中,有一些地址是可以不登录的,比方说首页;也有一些是必须登录的,比如发布文章、评论等。所以,在网关处可以支持自定义一些不需要登录的地址,一些需要登录的地址,也可以在网关处进行校验,如果未登录,可以返回JSON格式的出参,前端可以进行相关处理,比如跳转到登录页面等。
625 4
|
安全 API
【Azure API 管理】APIM Self-Host Gateway 自建本地环境中的网关数量超过10个且它们的出口IP为同一个时出现的429错误
【Azure API 管理】APIM Self-Host Gateway 自建本地环境中的网关数量超过10个且它们的出口IP为同一个时出现的429错误
187 0
|
存储 容器
【Azure 事件中心】为应用程序网关(Application Gateway with WAF) 配置诊断日志,发送到事件中心
【Azure 事件中心】为应用程序网关(Application Gateway with WAF) 配置诊断日志,发送到事件中心
180 0