Rust监控指标库witchcraft-metrics的使用,提供高性能的指标收集与度量功能
Rust监控指标库witchcraft-metrics的使用
witchcraft-metrics是一个高性能的Rust指标收集与度量库,属于Palantir witchcraft生态系统。
安装方法
安装witchcraft-metrics有两种方式:
- 使用Cargo命令:
cargo add witchcraft-metrics
- 直接在Cargo.toml中添加依赖:
witchcraft-metrics = "1.0.1"
基础用法示例
use witchcraft_metrics::MetricRegistry;
use std::time::Duration;
fn main() {
// 创建指标注册表
let registry = MetricRegistry::new();
// 创建并递增计数器
let counter = registry.counter("example.counter");
counter.inc(); // 增加1
counter.inc_by(5); // 增加指定值
// 记录时间间隔
let timer = registry.timer("example.timer");
timer.update(Duration::from_millis(100));
// 记录数值分布
let histogram = registry.histogram("example.histogram");
histogram.update(42);
// 创建可获取当前值的计量器
let gauge = registry.gauge("example.gauge", || 3.14159);
// 打印所有指标
println!("Metrics: {:?}", registry.get_metrics());
}
完整示例代码
use witchcraft_metrics::{MetricRegistry, MetricFilter};
use std::time::{Duration, Instant};
use std::thread;
fn main() {
// 初始化指标注册表
let registry = MetricRegistry::new();
// 注册HTTP请求计数器
let http_requests = registry.counter("http.requests");
// 注册处理耗时计时器
let processing_time = registry.timer("processing.time");
// 注册队列大小计量器(示例中使用固定值42)
let queue_size = registry.gauge("queue.size", || 42);
// 模拟10次请求处理
for i in 0..10 {
// 记录请求开始
http_requests.inc();
// 模拟处理耗时(100-300ms)
let start = Instant::now();
thread::sleep(Duration::from_millis(100 * (i % 3 + 1)));
// 记录处理耗时
processing_time.update(start.elapsed());
// 每隔一次请求打印队列大小
if i % 2 == 0 {
println!("当前队列大小: {}", queue_size.get());
}
}
// 过滤并打印HTTP相关指标
let http_metrics = registry.get_metrics_filtered(
&MetricFilter::new().with_name_prefix("http")
);
println!("HTTP指标: {:?}", http_metrics);
// 打印所有收集的指标
println!("所有指标:");
for (name, metric) in registry.get_metrics() {
println!("{}: {:?}", name, metric);
}
}
核心功能
- 计数器(Counter): 记录事件发生次数,支持递增操作
- 计时器(Timer): 测量代码执行时间间隔
- 直方图(Histogram): 记录数值分布情况
- 计量器(Gauge): 获取系统当前瞬时值
性能优势
- 极低的性能开销
- 线程安全的并发实现
- 高效的指标存储和查询机制
开源许可
采用Apache-2.0开源许可证
1 回复
Rust监控指标库witchcraft-metrics使用指南
简介
witchcraft-metrics是一个高性能的Rust指标收集与度量库,专为需要监控应用程序性能指标的Rust项目设计。它提供了简单易用的API来记录和跟踪各种指标数据。
主要特性
- 高性能的指标收集
- 支持多种指标类型(计数器、计时器、直方图等)
- 线程安全的实现
- 易于集成到现有应用中
安装
在Cargo.toml中添加依赖:
[dependencies]
witchcraft-metrics = "0.3"
基本使用方法
1. 初始化指标系统
use witchcraft_metrics::{Metrics, MetricType};
let metrics = Metrics::new();
2. 记录计数器指标
// 定义一个计数器
metrics.define_counter("requests.count", "Total number of requests");
// 增加计数器
metrics.increment_counter("requests.count", 1);
3. 记录计时器指标
// 定义一个计时器
metrics.define_timer("request.latency", "Request latency in milliseconds");
// 记录耗时
let start = Instant::now();
// 执行一些操作...
metrics.record_timer("request.latency", start.elapsed().as_millis() as f64);
4. 记录直方图指标
// 定义一个直方图
metrics.define_histogram(
"response.size",
"Distribution of response sizes",
vec![100.0, 500.0, 1000.0, 5000.0],
);
// 记录值到直方图
metrics.record_histogram("response.size", 342.0);
5. 获取指标数据
// 获取所有指标快照
let snapshot = metrics.snapshot();
// 获取特定指标
if let Some(counter) = snapshot.get_counter("requests.count") {
println!("Total requests: {}", counter);
}
高级用法
标签支持
// 定义带标签的指标
metrics.define_counter_with_labels(
"http.requests",
"HTTP requests by method and status",
&["method", "status"],
);
// 记录带标签的指标
metrics.increment_counter_with_labels(
"http.requests",
1,
&[("method", "GET"), ("status", "200")],
);
指标导出
// 导出为Prometheus格式
let prometheus_output = metrics.export_prometheus();
// 导出为JSON格式
let json_output = metrics.export_json();
完整示例
use witchcraft_metrics::Metrics;
use std::time::Instant;
use std::thread;
use std::time::Duration;
fn main() {
let metrics = Metrics::new();
// 定义指标
metrics.define_counter("requests.total", "Total requests");
metrics.define_timer("request.duration", "Request duration in ms");
metrics.define_histogram(
"payload.size",
"Request payload size distribution",
vec![1.0, 10.0, 100.0, 1000.0],
);
// 模拟请求处理
for i in 0..10 {
let start = Instant::now();
// 模拟处理时间
thread::sleep(Duration::from_millis(i * 10));
// 记录指标
metrics.increment_counter("requests.total", 1);
metrics.record_timer("request.duration", start.elapsed().as_millis() as f64);
metrics.record_histogram("payload.size", (i * 15) as f64);
}
// 导出指标
println!("Prometheus format:\n{}", metrics.export_prometheus());
println!("\nJSON format:\n{}", metrics.export_json());
}
性能建议
- 在高频代码路径中,考虑使用
increment_counter_by_ref
避免字符串查找 - 对于极端性能敏感场景,可以使用
with_*
方法链式调用 - 批量更新指标时使用
batch
方法减少锁竞争
witchcraft-metrics为Rust应用提供了强大而灵活的指标收集能力,适合从简单应用到复杂分布式系统的各种监控需求。