当前位置: 首页 > news >正文

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

问题描述

使用 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部署部署自建网关为例,查看日志输出效果

image

 

【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

 

http://www.hskmm.com/?act=detail&tid=29411

相关文章:

  • [JAVA]JDK多版本设置
  • Google Veo3生成跳舞视频
  • 【PolarCTF】stackof
  • 新生赛 F,H,J 题解
  • pycharm跑python项目易出错的困难
  • 双端队列的0-1BFS
  • Python psycopg2 类库使用学习总结
  • [GenAI] RAG架构演进
  • 24NOIP游记——彼时彼刻
  • 嵌入式-C++面经1
  • 合并区间 - MKT
  • 如何防止员工向第三方 AI 泄露数据?滤海 AI DLP 全方位技术防护方案解析
  • 20232322 2025-2026-1 《网络与系统攻防技术》实验一实验报告
  • 实验1 现代c++编程初体验
  • 冬天快乐
  • P2441M 见过的 tricks
  • 企业大数据战略定位
  • OpenAI加码个性化消费AI技术布局
  • 线性回归 C++ 实现
  • 内存分区
  • Spring Data JPA学习笔记
  • P1112 波浪数 题解
  • 20232411 2025-2026-1 《网络与系统攻防技术》实验一实验报告
  • 使用 Pascal 实现英文数字验证码识别系统
  • PWN手的成长之路-15-jarvisoj_level2_x64
  • 2025.10.12——1绿
  • 价值博弈场的工程实现:构建数字文明的价值免疫系统——声明Ai生成
  • 基于 Rust 的英文数字验证码识别系统设计与实现
  • 2025年两联供室内机厂家最新权威推荐榜:技术实力与市场口碑
  • 2025武汉商铺装修防水厂家最新权威推荐榜:专业施工与品质保