设计规范详解:从指标注册表到 Trace、健康检查与诊断 API)
Nacos 可观测性钩子Observability Hooks设计规范详解从指标注册表到 Trace、健康检查与诊断 API【免费下载链接】nacosan easy-to-use dynamic service discovery, configuration and service management platform for building AI cloud native applications.项目地址: https://gitcode.com/GitHub_Trending/na/nacos本指南以 foundation-observability-hooks-spec.md 为骨架系统讲解 Nacos 基础可观测性模型的设计原则与落地实现如何通过NacosMeterRegistryCenter组织指标注册表、如何借助TraceEvent与 Trace 插件桥接实现链路事件分发、如何通过模块健康检查与 Server State 提供就绪能力以及诊断 API 与日志的边界约束。读完本文你将掌握 Nacos 指标、Trace、审计、健康检查、服务端状态与诊断接口的完整分类、源码级实现路径以及在其上扩展新可观测信号时必须遵守的标签基数、数据源权威性与安全边界规则。1. 定位可观测性钩子是什么Observability Hooks 是 Nacos 各领域Config、Naming、AI、Lock、Control 等对外暴露运行时事实facts的统一机制。它的目标读者是运维人员、插件开发者、诊断 API、日志系统和监控系统让它们能够理解服务器健康度、资源活动、请求延迟、队列压力与故障模式。规范开篇就划定了两条最重要的边界可观测性不是控制路径not a control path指标、Trace 事件、审计日志、服务端状态和诊断视图都不得反过来重新定义Config、Naming、AI、安全或插件资源的语义可观测性不是领域事实的唯一来源not a source of domain truth可观测信号只是运行时的“快照与切片”领域正确性仍由各领域 API 自己保证。这一边界在 Foundation Capabilities Spec 中被进一步展开本文是其可观测性部分的扩展。2. 信号类型总览Nacos 当前暴露的可观测信号族如下表信号主要实现语义MetricsNacosMeterRegistryCenter、各模块MetricsMonitor类、Micrometer数值观测如计数器、Gauge、Timer、Summary、队列长度、连接数与异常计数Trace eventsTraceEvent、NotifyCenter、NacosCombinedTraceSubscriber、Trace 插件领域发出的操作事实可选择性地投递给插件订阅者Audit / Trace 日志ConfigTraceService、AiResourceTraceService、模块操作日志面向资源操作与诊断的结构化或行式记录健康与就绪ModuleHealthCheckerHolder、liveness/readiness 端点进程与模块就绪事实供负载均衡与编排系统使用服务端状态ModuleStateHolder、服务端状态 API各模块上报的管理态状态摘要运行时诊断加载器指标、Config 监听器指标、Naming 指标、日志级别 API面向维护者的检查与调整面外部采集适配Spring Boot Actuator / Micrometer 注册表、Prometheus 模块与监控系统、服务发现系统的集成点其中 Prometheus 采集适配对应仓库中的独立模块 prometheus/Actuator 指标导出配置可在 distribution/conf/application.properties 中看到management.endpoints.web.exposure.includeprometheus、Elasticsearch/InfluxDB 导出开关等。3. Metrics 注册表模型NacosMeterRegistryCentercore/src/main/java/com/alibaba/nacos/core/monitor/NacosMeterRegistryCenter.java 是 Nacos 统一的指标注册门面。它在静态初始化块中创建一组命名的CompositeMeterRegistry实例并将 Micrometer 的全局注册表Metrics.globalRegistry挂载到每个组合注册表之下从而让所有指标天然可被外部 Actuator/Prometheus 采集。当前注册组及用途注册组适用范围CORE_STABLE_REGISTRYCore、remote、Raft、连接与服务端执行器指标CONFIG_STABLE_REGISTRYConfig 计数器、Timer、队列长度、订阅者数与异常NAMING_STABLE_REGISTRYNaming 服务、实例、订阅者、发布者、健康检查、推送与队列指标TOPN_CONFIG_CHANGE_REGISTRY动态 TopN Config 变更计数器TOPN_SERVICE_CHANGE_REGISTRY动态 TopN Naming 服务变更计数器CONTROL_DENIED_REGISTRYControl 插件拒绝指标LOCK_STABLE_REGISTRYLock 模块指标从源码可见NacosMeterRegistryCenter.java第 38-68 行这七个常量与初始化注册逻辑一一对应且对外提供counter、gauge、timer、summary、clear五个静态工厂方法模块开发者只需传入注册组名、指标名与标签即可完成埋点无需关心底层组合注册表的生命周期。3.1 注册表使用规则规范对稳定注册表与动态注册表给出了严格区分稳定注册表应使用低基数low-cardinality标签与长生命周期指标名例如module、operation、protocol、result、errorCode、exceptionClass、registry、queue、task、connectionType、memberRole动态 TopN 注册表可以周期性清空并重建不得被当作稳定的时序身份对待指标标签不得包含秘密内容或完整配置负载高基数资源标签必须改用 TopN 或受限的诊断视图而不是稳定指标标签指标可以描述队列长度、重试延迟、请求延迟、异常数、连接数、资源数但不得作为权威数据源产生高吞吐任务或事件路径的模块应当暴露队列、worker、重试、失败或延迟观测。4. 领域指标Core / Config / Naming4.1 Core 指标Core 指标覆盖 Raft 读写与 apply 行为、gRPC 请求耗时、长连接、各模块连接数与 gRPC 服务端执行器状态。其中GrpcServerThreadPoolMonitorcore/src/main/java/com/alibaba/nacos/core/monitor/GrpcServerThreadPoolMonitor.java是一个SchedulingConfigurer组件周期性采样 SDK 与 Cluster 两套 gRPC 执行器的taskCount、completedTaskCount、inQueueTaskCount、activeCount、corePoolSize、maximumPoolSize、poolSize。它受两个配置项控制配置项默认值含义nacos.metric.grpc.server.executor.enabledtrue是否启用 gRPC 服务端执行器指标采集nacos.metric.grpc.server.executor.interval15000毫秒采样周期固定速率任务4.2 Config 指标Config 指标覆盖查询、发布、长轮询、notify 任务、客户端 notify 任务、dump 任务、模糊搜索、配置数、订阅者数、读/写/notify/dump 延迟以及 Config 相关异常计数器并维护 TopN Config 变更计数器。4.3 Naming 指标Naming 指标覆盖服务数、实例数、订阅者数、发布者数、健康检查计数器、推送数、推送失败数、空推送数、推送耗时、事件队列长度、待处理推送任务数与 TopN 服务变更计数器。4.4 其他模块持久化、Control、Lock 等模块也可以定义自己的指标但必须遵守本规范中的共享标签、基数与数据源权威性规则。Control 插件的拒绝指标位于CONTROL_DENIED_REGISTRY相关行为遵循 Control Plugin Spec。5. Trace 与审计操作事实的分发Trace 与审计信号是操作事实operation facts。规范给出 6 条硬性规则Trace 负载应包含资源身份、操作类型、时间戳、结果、可用时的 actor 或来源以及最少量的诊断扩展字段Trace 负载不得包含完整 Config 内容、密钥、令牌或凭据Trace 事件是不可变观测不得驱动主要领域决策Trace 插件订阅者若执行慢 IO必须使用独立执行器隔离Trace 插件失败不得回滚或污染发出该 Trace 的领域操作当持久化或合规期望不同时领域应区分审计级日志与尽力而为的诊断 Trace 事件。从源码实现看事件分发由 core/src/main/java/com/alibaba/nacos/core/trace/NacosCombinedTraceSubscriber.java 完成它在构造时通过TraceEventPublisherFactory注册组合事件并扫描NacosTracePluginManager中所有已加载插件把插件感兴趣的事件类按combinedEvent.isAssignableFrom(each)过滤并缓存收到事件后仅对处于启用状态PluginStateCheckerHolder.isPluginEnabled的插件投递若插件提供了独立executor()则异步执行且onEvent0中捕获所有异常catch (Exception ignored)这正是“插件失败不得回滚领域操作”与“慢 IO 用独立执行器隔离”两条规则的直接代码体现。5.1 各领域的 Trace 落地Config通过 config/src/main/java/com/alibaba/nacos/config/server/service/trace/ConfigTraceService.java 写行式 Trace 日志覆盖持久化、notify、dump、pull 等操作Naming通过本地事件基础设施NotifyCenter与 Trace 插件桥接发出TraceEvent子类AI通过 ai/src/main/java/com/alibaba/nacos/ai/service/trace/AiResourceTraceService.java 写 JSON 化 Trace 日志覆盖版本、评审、发布、标签、可见性与生命周期操作。Trace 插件面由 Trace Plugin Spec 定义本地 Trace 事件分发还必须遵循 Event Dispatch And NotifyCenter Spec。5.2 字段指引Trace 与审计负载应保持一个小而稳定的基础字段集字段类别示例规则信号身份eventType、signalType、module、domain标识发生了什么不编码业务负载资源身份resourceType、namespaceId、groupName、resourceName、version尽可能使用规范资源名操作上下文action、operation、phase、requestId、traceId描述操作及其阶段Actor 与来源user、sourceIp、clientId、connectionId、member仅在可用且安全时包含结果success、errorCode、exceptionClass、reason、latency区分成功、失败与开销扩展labels、metadata、ext保持受限并做净化标签使用红线稳定指标不得把原始dataId、serviceName、instanceIp、clientId、Config 内容、AI 产物主体、令牌或凭据作为标签。高基数事实应使用 TopN 注册表、Trace/审计日志或诊断 API。领域自有示例Config 可含 Config 身份、发布/查询/监听/dump/notify 阶段与结果字段但不得含 Config 内容Naming 可含服务身份、实例操作原因、推送阶段与健康检查阶段但不得含任意实例元数据负载AI 可含 AI 资源身份、版本、状态、评审结果、可见性结果与流水线阶段但不得含产物主体或模型凭据Core 与基础模块可含成员身份、请求类型、Raft 组、任务名、队列名、连接类型与生命周期阶段。6. 健康、就绪与服务端状态**Liveness存活**回答“进程是否在运行”**Readiness就绪**回答“Nacos 是否应接收普通流量”。模块就绪检查通过AbstractModuleHealthChecker注册由ModuleHealthCheckerHolder聚合。其实现位于 core/src/main/java/com/alibaba/nacos/core/cluster/health/ModuleHealthCheckerHolder.javacheckReadiness()遍历所有已注册 checker任一模块未就绪即返回ReadinessResult(false, xxx not in readiness)并在结果中以粗粒度标识出失败的模块名AbstractModuleHealthChecker定义在 core/src/main/java/com/alibaba/nacos/core/cluster/health/AbstractModuleHealthChecker.java。服务端状态Server State由 sys/src/main/java/com/alibaba/nacos/sys/module/ModuleStateHolder.java 与各模块的ModuleStateBuilder实现构建属于管理态状态视图而不是资源模型。规则当部署或 API 规范将其标记为健康探针时liveness 与 readiness 端点可以有意的公开就绪失败应在粗粒度上标识出失败模块模块状态字段对运维人员必须安全可读不得暴露密钥服务端状态与就绪不得替代领域校验或授权检查。7. 诊断 API 与日志诊断 API 属于管理或运维操作面典型示例包括服务端 loader 指标与连接重载操作按客户端 IP 或 Config 身份查询的 Config 客户端缓存与快照指标Naming 指标、开关、订阅者/客户端诊断与日志级别更新模块日志级别更新启用 Prometheus 模块时的 Prometheus 服务发现响应内存、性能、Distro、队列、任务 worker 与响应延迟日志。规则诊断 API 必须归类为Admin API、Console API、内部 API 或显式公开的健康探针之一宽泛的指标与诊断不得通过运行时 Client SDK 面暴露诊断可以跨集群成员聚合但聚合是运维行为必须容忍部分失败或超时日志级别更新属于管理控制必须要求写权限Prometheus 或外部采集适配必须文档化其启用方式、认证方式与负载范围。仓库中对应配置示例见 distribution/conf/application.properties 与其中的nacos.prometheus.metrics.enabled开关。8. 与其他基础能力的协同关系可观测性钩子通常挂在其他基础路径上服务端状态与就绪上报依赖 Server Lifecycle And Environment Configuration Spec请求指标、认证上下文与请求诊断消费 Request Filtering And Runtime Context Spec 中的字段任务引擎按 Task Execution Spec 暴露队列与执行状态事件发布者与 Trace 桥接遵循 Event Dispatch And NotifyCenter Spec集群内部诊断使用 Cluster Membership Spec 的成员路由与 Internal RPC And Cluster Request Spec 的请求语义连接指标与 loader 诊断依赖 Remote Connection Lifecycle SpecControl 插件指标与拒绝行为遵循 Control Plugin Spec。9. 边界规则规范以 6 条边界规则收束整个可观测性模型可观测性不得改变资源所有权、资源身份、持久化语义、一致性行为或授权决策指标与日志可以被延迟、采样、重置、丢弃或不完整可观测成功不等于领域成功除非所属领域 API 明确定义了该关系诊断负载必须避免密钥与完整的非透明 Config 内容高基数指标必须受 TopN、采样或显式诊断 API 约束插件提供的可观测性对核心数据变更必须fail open失败不阻塞除非单独的治理规范明确定义了阻塞策略。10. 相关规范Foundation Capabilities SpecServer Lifecycle And Environment Configuration SpecRequest Filtering And Runtime Context SpecTask Execution SpecEvent Dispatch And NotifyCenter SpecCluster Membership SpecRemote Connection Lifecycle SpecInternal RPC And Cluster Request SpecTrace Plugin SpecControl Plugin SpecConfig Capacity And Ops SpecNaming Ops Spec小结给模块开发者的实践清单埋点先选注册组稳定型指标进*_STABLE_REGISTRY高频变更统计进 TopN 注册组拒绝类进CONTROL_DENIED_REGISTRY标签永远低基数module/operation/protocol/result/errorCode/queue/task/connectionType/memberRole是安全的dataId/serviceName/clientId与配置内容永远不进稳定标签Trace 只发事实、不参与决策通过NotifyCenterTraceEvent发出插件失败天然被吞掉慢 IO 交给插件自有 executor健康检查注册到ModuleHealthCheckerHolder状态摘要实现ModuleStateBuilder并确保字段不泄密诊断 API 先归类Admin/Console/Internal/健康探针日志级别变更必须走写权限校验。遵循上述规则你的模块就能无缝融入 Nacos 的 Actuator、Prometheus、Trace 插件与运维诊断体系同时不会侵蚀领域一致性、授权与资源语义——这正是 foundation-observability-hooks-spec.md 的全部设计意图。【免费下载链接】nacosan easy-to-use dynamic service discovery, configuration and service management platform for building AI cloud native applications.项目地址: https://gitcode.com/GitHub_Trending/na/nacos创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考