Prometheus Metrics Client
现招募开发者共同参与基于仓颉语言的 Prometheus 指标采集客户端开发项目。本项目旨在构建一个高性能、低侵入、符合 Prometheus 生态标准的指标上报库,为仓颉语言应用提供原生的可观测性支持。我们期待与追求技术卓越的开发者共同完善仓颉语言在云原生监控领域的生态拼图,让每一行仓颉代码都能被精准洞察。
悬赏内容
招募内容
1. 项目简介与愿景
Prometheus 已成为云原生时代事实上的监控标准,其核心在于通过 Pull 模型或 Push 模型收集带有时间戳和标签(Labels)的多维时间序列数据。目前仓颉语言生态尚缺乏官方级、功能完备的 Prometheus Client 库,导致仓颉应用难以无缝接入现有的监控体系(如 Grafana, Alertmanager)。
本项目的愿景是打造一款“零配置感、高吞吐量、强类型安全”的仓颉版 Prometheus Client。它不仅要完整实现 Prometheus Exposition Format 协议,支持 Counter, Gauge, Histogram, Summary 等核心指标类型,还要深度结合仓颉语言的并发特性(如轻量级线程),确保在高并发场景下指标采集对业务性能的影响降至最低(<1% CPU 开销)。
2. 项目核心功能模块详细说明
表格
模块名称 | 功能描述 | 关键技术点 |
|---|---|---|
核心指标原语 | 实现 Counter, Gauge, Histogram, Summary 四种基础指标类型,支持动态 LabelSet。 | 无锁数据结构、原子操作、仓颉泛型编程 |
注册与收集器 | 提供 DefaultRegisterer 及自定义 Registerer,支持自动收集 Go/Cangjie 运行时指标(如 GC 次数、协程数)。 | 接口抽象、反射机制(可选)、运行时钩子 |
HTTP 暴露服务 | 内置轻量级 HTTP Server 或中间件,监听 | 非阻塞 IO、HTTP 协议解析、内容协商 |
Pushgateway 支持 | 实现 Push 模式,允许短时任务或防火墙后应用主动推送指标至 Pushgateway。 | HTTP Client 复用、批量推送、错误重试 |
直方图与摘要算法 | 高效实现分位数计算(Quantile),支持滑动窗口和时间衰减。 | 稀疏流算法、内存优化、精度控制 |
多进程/多线程安全 | 确保在仓颉高并发模型下,指标更新的线程安全性且无显著锁竞争。 | CAS 操作、分片锁、Thread-Local 存储 |
详细功能规格:
指标命名规范检查:内置正则校验,强制符合 Prometheus 命名最佳实践(如
[a-zA-Z_:][a-zA-Z0-9_:]*)。动态标签管理:支持预定义标签集以减少基数爆炸风险,提供 LabelSet 缓存机制。
格式兼容性:完全兼容 Prometheus 0.0.4 及后续版本的 Exposition Format,支持
Content-Type: text/plain; version=0.0.4和application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily。资源自控:提供指标内存上限配置,防止因 Label 基数过大导致 OOM。
3. 质量认证与交付物要求
3.1 代码与架构质量
接口设计:遵循仓颉语言惯用风格(Idiomatic Cangjie),API 需简洁流畅。
// 期望的接口设计风格 let counter = Metrics.newCounter("http_requests_total", "Total HTTP requests") .label("method", "GET") .label("path", "/api/v1/users") .register() counter.inc()
并发模型:充分利用仓颉的 Actor 模型或轻量级线程,避免全局锁瓶颈。
内存管理:针对高频更新的指标(如 QPS 计数器),需优化内存分配,减少 GC 压力。
3.2 测试与可靠性要求
单元测试覆盖率:核心逻辑覆盖率不低于 90%。
基准测试(Benchmark):必须提供不同并发度(10, 100, 1000 协程)下的性能报告,对比同类语言(Go/Rust)Client 的性能差距,目标延迟控制在纳秒级。
集成测试:搭建真实的 Prometheus + Grafana 环境,验证指标抓取、查询(PromQL)及告警规则的可用性。
边界测试:模拟海量 Label 组合、超大直方图桶数量等极端场景,验证系统稳定性。
3.3 文档与工程化
API 文档:生成完整的仓颉 Doc 文档,包含每个参数、返回值及异常说明。
最佳实践指南:编写《仓颉应用可观测性指南》,涵盖指标设计规范、常见陷阱(如基数爆炸)及调试技巧。
示例工程:提供至少 3 个完整示例(Web 服务监控、定时任务监控、Push 模式演示)。
4. 交付物清单
源代码仓库:包含完整的源码、构建脚本(CJPM 配置)。
二进制包:编译好的库文件,适配主流操作系统(Linux, macOS, Windows)及架构(x86_64, ARM64)。
测试报告:包含单元测试结果、Benchmark 性能分析及内存泄漏检测报告。
文档站点:Markdown 格式的说明书及 API 参考文档。
演示 Demo:可一键运行的 Docker Compose 环境(含仓颉应用、Prometheus、Grafana)。
5. 参与方式与协作模式
本项目将采用开源社区常见的协作模式:
通过 Git 进行版本控制,在 Gitee/Github 上托管代码。
使用 Pull Request 进行代码贡献,每个 PR 必须经过至少一位核心贡献者的代码审查。
代码审查将重点关注设计合理性、实现正确性、测试覆盖率和代码风格。
相关附件
质量认证要求
交付件
NO | 交付件描述 | 备注 |
1 | 三方库源代码 | 源代码 |
2 | 三方库测试方案和用例 | 测试用例和文档 |
3 | 用户手册,API文档,设计文档,license文档 | 资料和文档 |
验收标准
1.功能
三方库必须有明确的功能;
如果参考对标库移值开发,功能与参考三方库保持一致。
2.资料
Readme:包含简介,软件架构,目录结构,下载安装(编译构建),接口说明,使用示例,约束限制,开源协议,参与贡献等内容;
Changelog,三方库版本需包含基本的修改说明。
3.标准遵从性(可选),三方库实现需满足对应协议或行业标准,举例
appquth:支持对OAuth 的PKCE扩展;
icu4j:支持unicode标准库,通用字符集ISO/IEC 10646。
4.性能目标
性能敏感三方库接口运行性能持平对标三方库
5.开源协议遵从,必须包含License文件
放置合适的开源License协议,建议Apache License Version 2.0;
引用或参考开源三方库,需遵从开源协议。
6.网络安全要求
满足基础的网络安全红线及隐私要求,符合安全编码规范。
过程质量要求
指标分类 | 指标名称 | 指标要求 | 度量工具 | 牵引 OR Must |
代码度量 | 平均文件代码行 | ≤300 LOC | CMetricsPlus,CJMetric | Must |
总文件重复率 | C/C++≤4%;相比开源不劣化 | CMetricsPlus,CJMetric | Must | |
源文件重复率 | C/C++≤4%;相比开源不劣化 | CMetricsPlus,CJMetric | Must | |
平均函数或方法代码行* | ≤30 LOC | CMetricsPlus,CJMetric | Must | |
总代码重复率 | C/C++≤10%;相比开源不劣化 | CMetricsPlus,CJMetric | Must | |
源文件代码重复率 | C/C++≤10%;相比开源不劣化 | CMetricsPlus,CJMetric | Must | |
平均圈复杂度 | ≤5;相比开源不劣化 | CMetricsPlus,CJMetric | Must | |
冗余代码 | “0” 【2】; | CMetricsPlus,CJMetric | Must | |
不安全函数 | NA | CMetricsPlus,CJMetric | Must | |
静态检查 | 编译告警 | “0” 【2】 | Compile工具 | 牵引 |
通用静态告警 | “0” 【2】 | Pclint plus,CJLINT | Must | |
开发者测试 | DT用例密度(个/KLOC) | > 40 | 手工 | 牵引 |
DT代码语句覆盖率 | >=85% | Gcov,cjcov | 牵引 | |
DT代码分支覆盖率 | >=50% | Gcov,cjcov | 牵引 | |
未做DT文件数 | 0 | 手工 | 牵引 | |
问题解决率 | 遗留问题DI | 整体<10 | Issue | 牵引 |
遗留致命缺陷数(0) | 0 | Issue | Must | |
累计缺陷解决率 | 85% | Issue | 牵引 | |
软件开发 | 每日构建成功率 | 100% | CI | 牵引 |
测试评估 | 测试缺陷密度(/KLOC) | 5-9 | 人工 | 牵引 |
测试用例密度(个/KLOC) | 20-40 | 人工 | 牵引 | |
初验用例自动化率 | 100% | CIDA | 牵引 | |
HLT自动化用例比率 | 【85%,95%】 | CIDA | 牵引 | |
开源第三方(含构建工具) | 开源片段引用 | 0(除例外备案类) | FOSSBOT+人工 | Must |
可信构建 | 二进制一致性 | 0(含可澄清) | 人工 | Mus |

