首页/新闻资讯/正文详情

EMQX Trace API 配置查看与更新:`/tracing` 接口实现与实战解析

发布时间:2026/9/24 8:15:30 来源:云帆数科 栏目:资讯中心
EMQX Trace API 配置查看与更新:`/tracing` 接口实现与实战解析
EMQX Trace API 配置查看与更新/tracing接口实现与实战解析【免费下载链接】emqxThe most scalable and reliable MQTT broker for AI, IoT, IIoT and connected vehicles项目地址: https://gitcode.com/gh_mirrors/em/emqx导读EMQX 的在线追踪Trace功能允许按客户端 ID、主题、IP 地址或规则 ID 对消息收发过程进行实时记录而全局追踪配置单文件大小上限、最大追踪任务数等则决定了该功能的运行边界。本篇文章围绕changes/ee/feat-15904.en.md所记录的通过 Trace API 查看与更新追踪配置这一能力深入解析 EMQX 管理接口中GET /tracing与PUT /tracing两个端点的实现原理、字段含义、校验规则与多租户权限约束。读完本文你将掌握如何通过 REST API 查询和调整集群级 Trace 配置并理解这些配置如何影响线上追踪任务的创建与日志输出。一、特性背景Trace API 中的配置端点changes/ee/feat-15904.en.md记录了这样一项变更Support viewing and updating of tracing configuration through Trace API.通过 Trace API 支持查看和更新追踪配置。在 EMQX 中trace相关 REST API 由 apps/emqx_management/src/emqx_mgmt_api_trace.erl 这一模块统一承载namespace 为trace采用minirest_api行为实现。该模块声明的全部路由如下方法路径用途GET / POST / DELETE/trace列出、创建、清空全部追踪任务DELETE/trace/:name按名称删除追踪任务PUT/trace/:name/stop停止指定追踪任务GET/trace/:name/download下载追踪日志zip 归档GET/trace/:name/log流式读取追踪日志GET/trace/:name/log_detail查看各节点日志文件大小与修改时间GET / PUT/tracing查看 / 更新全局追踪配置本文主题其中schema(/tracing)与config/2处理器即对应本次变更新增的配置查看与更新能力。追踪任务的创建、启停、日志读取等既有能力则作为上下文帮助我们理解配置项的实际作用。二、查看全局追踪配置GET /tracing2.1 请求与响应GET /api/v5/tracing对应源码中的config(get, #{}) - {200, get_config_root()}其中get_config_root/0的实现为get_config_root() - RawConf emqx:get_raw_config([?CONF_ROOT]), RootConf emqx_config:fill_defaults(#{?CONF_ROOT RawConf}), maps:get(?CONF_ROOT, RootConf).即先从配置中心读取trace根的原始配置?CONF_ROOT定义为trace再通过emqx_config:fill_defaults/1填充缺失字段的默认值最终返回完整配置对象。因此即使集群从未显式配置过 Trace 参数该接口也会返回带默认值的完整配置。以全新部署的 EMQX 为例响应示例{ max_file_size: 128MB, max_traces: 30 }2.2 默认值与字段来源GET /tracing返回的字段与默认值定义在 apps/emqx/src/emqx_schema.erl 的fields(trace)中max_file_size单个 Trace 日志文件的最大大小类型为字节数bytesize()默认128MB合法取值范围为100KB到10GB由mk_validator_bounds({100 * ?KB, 100KB}, {10 * ?GB, 10GB})约束配置优先级标记为IMPORTANCE_LOWmax_traces集群中允许同时存在的 Trace 任务最大数量类型为range(0, 100)默认30payload_encode历史遗留字段默认text自5.0.22起标记为deprecated{deprecated, {since, 5.0.22}}配置优先级为IMPORTANCE_HIDDEN建议改用每个 Trace 任务自身的payload_encode参数。对应的中文/多语言描述位于 rel/i18n/emqx_schema.hocon 与 rel/i18n/emqx_mgmt_api_trace.hocon。三、更新全局追踪配置PUT /tracing3.1 请求与响应PUT /api/v5/tracing Content-Type: application/json { max_file_size: 256MB, max_traces: 50 }对应源码中的config(put, #{body : NewConf})config(put, #{body : NewConf}) - UpdateOpts #{rawconf_with_defaults true, override_to cluster}, case emqx_conf:update([?CONF_ROOT], NewConf, UpdateOpts) of {ok, #{raw_config : _}} - {200, get_config_root()}; {error, Reason} - ?BAD_REQUEST(INVALID_CONFIG, Reason) end.关键实现细节更新操作通过emqx_conf:update([trace], NewConf, ...)写入配置中心override_to cluster表示配置会覆盖并同步到整个集群而非仅当前节点rawconf_with_defaults true确保响应中未显式设置的字段同样以默认值形态返回更新成功后返回200及更新后的完整配置校验失败返回400错误码为INVALID_CONFIG。3.2 常见错误码schema(/tracing)中声明的错误响应包括状态码错误码含义400INVALID_CONFIG提交的配置不合法类型错误、超出取值范围、包含未知字段等403UNAUTHORIZED_ROLE非全局管理员尝试修改配置详见第七节四、配置校验与测试验证emqx_mgmt_api_trace_SUITE中的t_config测试用例见 apps/emqx_management/test/emqx_mgmt_api_trace_SUITE.erl完整覆盖了上述行为可作为接入调试的参照默认值查询GET /tracing返回max_file_size 128MB、max_traces 30空更新PUT /tracing提交{}不会产生任何变更返回的仍是默认配置注意经配置子系统处理max_file_size的值形态会从字符串128MB变为字节数134217728非法更新被拒绝提交未知字段如encoding或非法值如max_file_size 1均返回400 BAD_REQUEST配置即时生效将max_traces更新为0后再调用POST /trace创建追踪任务会得到400 EXCEED_LIMIT错误信息提示 Creating traces is disallowed这也印证了max_traces 0时创建任务被完全禁止的分支逻辑见emqx_mgmt_api_trace.erl中trace(post, ...)对max_limit_reached的处理Limit为0时返回禁止创建否则提示先删除过期任务。因此PUT /tracing更新是即时生效的max_traces会在下一次创建 Trace 时作为硬性上限被强制检查。五、配置与 Trace 任务 API 的联动理解/tracing配置的价值需要结合trace命名空间下的任务管理 API。创建追踪任务的POST /trace请求体字段定义在fields(trace)中字段类型必填说明namestring是任务名须匹配^[A-Za-z][A-Za-z0-9-_]*$且长度 ≤ 256typeenum是过滤类型clientid/topic/ip_address/ruleidtopicstring否主题过滤支持通配符如/dev/#clientidstring否客户端 ID 过滤ip_addressstring否客户端 IP 过滤ruleidstring否规则 ID 过滤start_at/end_atRFC3339 时间否追踪窗口默认从当前时间开始payload_encodeenum否负载编码hex/text/hidden默认textpayload_limitinteger否负载最大记录字节数默认1024formatterenum否日志格式text/json创建时emqx_trace:create/1会执行去重与上限检查apps/emqx/src/emqx_trace/emqx_trace.erl同名任务返回409 ALREADY_EXISTS相同过滤条件返回409 DUPLICATE_CONDITION超过max_traces上限返回400 EXCEED_LIMIT。任务状态由emqx_trace:status/2判定enable false→stopped当前时间早于start_at→waiting当前时间晚于end_at→stopped否则 →running。此外GET /trace/:name/download会将各节点日志聚合成 zip 归档返回application/x-zipGET /trace/:name/log支持按bytes默认 1000上限 64MB、positionbase62 编码游标配合hint为eof/retry的元数据实现增量拉取、node参数流式读取日志详情见 apps/emqx_management/src/emqx_mgmt_api_trace.erl 中stream_trace_log/4相关实现。这些能力共同构成了完整的创建 → 查询 → 消费日志 → 停止/删除工作流。六、权限与多租户约束/tracing配置端点对调用者身份有严格限制。模块中通过filter/2解析请求命名空间resolve_namespace并结合emqx_dashboard_rbac的scopes()返回?SCOPE_MONITORING进行鉴权。关键约束如下只有全局管理员global namespace可以调用PUT /tracing修改配置命名空间多租户用户即使具备监控权限也会收到403 UNAUTHORIZED_ROLE对应错误描述trace_config_global_only命名空间用户在POST /trace时可通过ns查询参数指定归属命名空间但仅允许操作自己命名空间内的资源跨命名空间操作一律拒绝全局管理员则可见全部任务相关逻辑见lookup_trace_in_namespace/2跨命名空间与不存在统一返回404 NOT_FOUND避免泄露其他命名空间的任务存在性测试用例t_namespaced_user_cannot_update_config见 apps/emqx_management/test/emqx_mgmt_api_trace_SUITE.erl验证了普通命名空间用户 PUT 配置失败、全局管理员可成功将max_traces与max_file_size修改为1/64MB并同步到整个集群。七、集群一致性说明GET /tracing返回的是集群级统一配置。当集群由多节点组成时配置的读取与写入均基于 EMQX 的配置子系统emqx_conf与 mria 表?TRACE表由 apps/emqx/src/emqx_trace/emqx_trace.erl 管理而日志文件本身分布在各节点本地磁盘。因此查看各节点日志大小时GET /trace/:name/log_detail会通过emqx_mgmt_trace_proto_v3发起集群 RPC仅向支持 bpapi v3 的节点查询返回每个节点的size与mtime下载日志时GET /trace/:name/download同样按节点聚合后打包为 zip文件名形如节点名-任务名-起始时间.log在滚动升级等节点版本不一致的场景下POST /trace可能返回409 BAD_TYPE提示 Rolling upgrade in progress, create failed这是emqx_bpapi版本协商机制的一部分属预期行为。八、小结与排查建议/tracing端点是运维 EMQX 在线追踪功能的重要入口GET用于确认当前全局配置与默认值PUT用于动态调整max_file_size与max_traces并即时同步到整个集群。实际使用中可遵循以下排查路径创建 Trace 时收到400 EXCEED_LIMIT→ 先GET /tracing检查max_traces是否已被调小或为0再DELETE /trace/:name清理过期任务日志文件异常增大或写入受限 → 检查max_file_size是否接近单文件上限必要时通过PUT /tracing调大不超过10GB多租户环境下配置修改被拒 → 确认调用方为全局管理员账号而非命名空间用户。本文涉及的源码与测试可直接在仓库中进一步研读API 实现、配置 Schema、Trace 核心模块、接口测试套件。【免费下载链接】emqxThe most scalable and reliable MQTT broker for AI, IoT, IIoT and connected vehicles项目地址: https://gitcode.com/gh_mirrors/em/emqx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Java Web会议室管理系统:Servlet+JSP+JDBC实战指南
Java Web会议室管理系统:Servlet+JSP+JDBC实战指南

简介:本资源是一套完整的基于Java Web技术栈开发的会议室管理系统源码,面向Java初学者与Web开发进阶学习者,适用于课程设计、毕业设计及企业级管理类项目参考。系统覆盖前后端全链路实现:前端采用HTML、JSP与jQuery结合Ajax实现动… · 2026/9/23 3:21:31

Java面向对象三大特性:封装、继承、多态详解与面试实战
Java面向对象三大特性:封装、继承、多态详解与面试实战

Java程序员面试被问得最多的基础题里,封装、继承、多态这三个词几乎永远跑不掉。很多人背得很熟,张口就来一句“封装是隐藏实现细节,继承是代码复用,多态是同一消息不同表现”,但一落到具体代码和业务场景里就开始含糊… · 2026/9/23 3:21:31

基于SpringBoot电商平台开题答辩全攻略:高频问题与技术要点解析
基于SpringBoot电商平台开题答辩全攻略:高频问题与技术要点解析

快到开题答辩的时间了,后台私信里一大半都是同一个问题:开题答辩到底会问什么?尤其是选了“基于SpringBoot的电子商务平台”这类题目的同学,总是担心评委老师问到技术细节答不上来。这篇文章就拿“基于SpringBoot的电子商务平台”… · 2026/9/23 3:21:24

深入解析 BAML compute 基准负载 divide-guard-1m:除零守卫、整数除法与 speedtest 基准框架
深入解析 BAML compute 基准负载 divide-guard-1m:除零守卫、整数除法与 speedtest 基准框架

编程语言AI Agent编译器CLI人工智能 【免费下载链接】baml The programming language for agents 项目地址: https://gitcode.com/gh_mirrors/ba/baml 点击查看 免费下载 导读 divide-guard-1m 是 BAML 开源仓库中 speedtest 基准套件(位于 baml_langu… · 2026/9/25 3:55:37

DiceBear Avataaars 预设(Presets)实战指南:11 套现成配置、代码生成与 Playground 调参
DiceBear Avataaars 预设(Presets)实战指南:11 套现成配置、代码生成与 Playground 调参

UI组件后端 【免费下载链接】dicebear DiceBear is an avatar library for designers and developers. 🌍 项目地址: https://gitcode.com/gh_mirrors/di/dicebear 点击查看 免费下载 DiceBear 官方文档为每个主流样式都准备了「预设(Preset… · 2026/9/25 3:55:37

Apereo CAS Surrogate 认证之 JSON 账户存储配置实战指南
Apereo CAS Surrogate 认证之 JSON 账户存储配置实战指南

后端认证鉴权单点登录 【免费下载链接】cas Apereo CAS - Identity & Single Sign On for all earthlings and beyond. 项目地址: https://gitcode.com/gh_mirrors/ca/cas 点击查看 免费下载 Surrogate 认证(又称模拟/代管认证,即“Web … · 2026/9/25 3:55:37

pylibcudf 的 ORC 读写 API 完全指南:从 read_orc 到分块写入
pylibcudf 的 ORC 读写 API 完全指南:从 read_orc 到分块写入

数据分析数据工程机器学习 【免费下载链接】cudf cuDF - GPU DataFrame Library 项目地址: https://gitcode.com/gh_mirrors/cu/cudf 点击查看 免费下载 本篇技术指南以 cuDF 仓库中 pylibcudf 的 ORC(Optimized Row Columnar)格式 I/O 模块… · 2026/9/25 3:55:37

学生时间管理APP全栈开发实战:课程表、番茄钟与数据闭环设计
学生时间管理APP全栈开发实战:课程表、番茄钟与数据闭环设计

带过三年毕设项目,被问得最多的一个选题就是“学生时间管理APP”。很多同学第一反应是这个题目太老——课程表、待办事项、番茄钟,网上一抓一大把模板,还能做出什么花来?这话只对了一半。时间管理工具确实不稀奇,但面向… · 2026/9/25 3:55:31

Cobalt Strike 4.0 zip解压与部署实战:从伪加密识别到teamserver启动
Cobalt Strike 4.0 zip解压与部署实战:从伪加密识别到teamserver启动

简介:面向网络安全渗透测试与红队演练场景,这是一套 Cobalt Strike 4.0 资源包,适合具备一定基础的安全测试人员、企业蓝队成员及高校安全方向学习者。Cobalt Strike 是由 Raphael Mudge 开发的商业红队平台,4.0 版本在前代基础上… · 2026/9/25 3:55:25

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码