Meter 是指标采集入口,负责创建管理 Counter、Histogram、Gauge;MeterListener 是需显式注册启用的监听者,用于订阅过滤导出指标。
什么是 Meter 和 MeterListener?
Meter 是指标采集的入口,负责创建和管理计数器(Counter)、直方图(Histogram)、仪表(Gauge)等指标对象;MeterListener 则是监听者,用于订阅、过滤、采样或导出指标数据——它不自动收集,必须显式启用(meterListener.Register() )才能生效。
如何创建并使用 Counter 记录请求次数
最常用的是整数计数器,适合记录 HTTP 请求、消息处理等离散事件:
Meter meter = new Meter("myapp.http", "1.0");
Counter requestCounter = meter.CreateCounter("http.requests.total");
// 每次请求调用
requestCounter.Add(1, new KeyValuePair("method", "GET"));
requestCounter.Add(1, new KeyValuePair("method", "POST"));
- 标签(
KeyValuePair)必须是只读且不可变的;传入可变字典或匿名对象会抛ArgumentException - 不要在热路径反复新建
Tag实例,建议缓存复用new[] { new KeyValuePair("method", "GET") } -
Add()是线程安全的,但避免在锁内调用——它内部有无锁优化
为什么 MeterListener 没有收到指标?
常见原因是没启用监听或过滤太严。默认情况下 MeterListener 不监听任何 Meter,必须显式注册并设置匹配逻辑: