重构整体架构: 1. 新增telemetry包实现零依赖的Prometheus指标系统 2. 新增metrics包集中管理业务埋点指标 3. 重构火山v3适配器,拆分client/request/response等模块 4. 替换旧的service/stats统计系统为标准指标埋点 5. 新增/metrics观测端点与完整仪表盘支持 功能更新: - 实现基于IP的限流与并发限制,添加指标埋点 - 重构TTS控制器,支持多格式输出与完整错误分类 - 更新.env.example配置示例,新增多项可选参数 - 替换旧的volcano适配器实现,支持完整的v3 API特性 - 清理冗余代码,移除service/stats与旧adapter实现
49 lines
1.4 KiB
Go
49 lines
1.4 KiB
Go
// Package telemetry 提供进程内可观测能力:Counter / Gauge / Histogram,
|
|
// 以及 Prometheus 文本格式导出。
|
|
//
|
|
// 设计原则:
|
|
// - 零外部依赖,只使用标准库;
|
|
// - label key 在指标注册时锁定,运行期不可新增(避免 cardinality 爆炸);
|
|
// - 所有并发安全由实现保证,调用方无需加锁;
|
|
// - Meter 是高层入口,NoopMeter 用于测试。
|
|
package telemetry
|
|
|
|
import "sort"
|
|
|
|
// Labels 是指标附加的标签集合。Value 在序列化时会按 Prometheus 规范转义。
|
|
type Labels map[string]string
|
|
|
|
// labelKey 计算一组标签的稳定 key,用于在内部 map 中唯一定位 child。
|
|
// 缺失或多余的 label 一律视为空串,以保证 child 数量与 label 名集合一致。
|
|
func labelKey(names []string, labels Labels) string {
|
|
if len(names) == 0 {
|
|
return ""
|
|
}
|
|
parts := make([]string, 0, len(names)*2)
|
|
for _, n := range names {
|
|
parts = append(parts, n, labels[n])
|
|
}
|
|
return joinLabelParts(parts)
|
|
}
|
|
|
|
func joinLabelParts(parts []string) string {
|
|
out := make([]byte, 0, 16*len(parts))
|
|
for i, p := range parts {
|
|
if i > 0 {
|
|
out = append(out, 0)
|
|
}
|
|
out = append(out, p...)
|
|
}
|
|
return string(out)
|
|
}
|
|
|
|
// sortedKeys 返回按字典序排列的 key,用于导出时输出稳定顺序。
|
|
func sortedKeys(m map[string]string) []string {
|
|
keys := make([]string, 0, len(m))
|
|
for k := range m {
|
|
keys = append(keys, k)
|
|
}
|
|
sort.Strings(keys)
|
|
return keys
|
|
}
|