6 个版本 (重大更改)
0.5.0 | 2024年3月6日 |
---|---|
0.4.0 | 2022年8月19日 |
0.3.0 | 2021年2月6日 |
0.2.0 | 2020年11月22日 |
0.1.0 | 2020年10月29日 |
#2 在 #task-pool
每月下载 164 次
33KB
626 行
基于 Tokio 的 Cadence 指标接收器
一组 Cadence 指标接收器 实现,使用 Tokio 异步处理指标。
Cadence 提供的 Statsd 客户端不支持异步操作——提交指标实际上可能会阻塞调用者!
在异步上下文中这是不希望的。
这个 crate 中实现的指标接收器通过允许应用程序代码在阻塞的情况下排队指标,并将实际发送任务卸载到单独的异步任务中,来缓解这个问题。
特性
- 使用非阻塞、带缓冲的通道来非阻塞地发出指标
- 批量处理多个指标,直到最大延迟(或批缓冲区填满)
- 在应用程序选择的 Tokio 任务池中异步处理指标
安装
将 cadence
,tokio
和 tokio-cadence
添加到您的 Cargo.toml
[dependencies]
cadence = "1"
tokio = { version = "1", features = ["full"] }
tokio-cadence = "0.5"
使用方法
指标接收器构造函数返回一个元组,包含接收器实例以及一个应用必须完成其工作的未来;例如,在 Tokio 任务池中启动它。
use cadence::prelude::*;
use cadence::{StatsdClient, DEFAULT_PORT};
use tokio_cadence::TokioBatchUdpMetricSink;
use tokio::{spawn, net::UdpSocket};
#[tokio::main]
async fn main() -> cadence::MetricResult<()> {
let host = ("metrics.example.com", DEFAULT_PORT);
let socket = UdpSocket::bind("0.0.0.0:0").await?;
let (sink, process) = TokioBatchUdpMetricSink::from(host, socket)?;
// Spawn the future!
let processing_job = spawn(process);
{
let client = StatsdClient::from_sink("my.metrics", sink);
// Emit metrics!
client.incr("some.counter");
client.time("some.methodCall", 42);
client.gauge("some.thing", 7);
client.meter("some.value", 5);
// the client drops here, and the sink along with it
}
// Wait for the processing job to complete!
processing_job.await.unwrap();
Ok(())
}
请注意,为了确保所有缓冲的指标都已提交,应用程序必须在客户端以及接收器被丢弃之后等待处理作业的完成。
许可证
根据 MIT 许可证 许可。
依赖关系
~3–11MB
~104K SLoC