8个版本 (重大更新)
0.8.0 | 2023年5月31日 |
---|---|
0.7.0 | 2023年1月21日 |
0.6.0 | 2022年8月9日 |
0.5.0 | 2022年8月8日 |
0.1.0 | 2022年7月21日 |
#795 in 调试
每月206次下载
84KB
1.5K SLoC
metrics-exporter-dogstatsd
metrics-exporter-dogstatsd 是一个兼容 metrics
的导出器,它聚合指标并将它们推送到 statsd/dogstatsd 代理。
这段代码的大部分来自 Prometheus 导出器,在行为上做了一些重要的更改。
与其他像 cadence 或 metrics-exporter-statsd 这样的 statsd 指标系统相比,这个crate完全异步地通过Tokio与statsd代理通信数据。此crate还预先聚合所有指标,并在一个时间间隔内将它们与代理通信,以限制网络流量和系统调用。
此crate充分利用了原子操作和 metrics
crate 的性能。
lib.rs
:
一个将指标发送到 statsd/datadog 的兼容 metrics
的导出器
基本功能
metrics-exporter-dogstatsd
是一个兼容 metrics
的导出器,可以通过UDP将指标推送到本地或远程运行的 statsd 或 datadog 代理。
高级功能
- 通过UDP支持推送网关
- 能够以聚合摘要或聚合直方图的形式推送直方图,具有可配置的分位数/桶
- 能够按指标控制桶配置
- 可配置的全局标签(应用于所有指标,如果有指标自己的标签则会被覆盖)
行为
此导出器为了完成任务做出了一些明确的权衡
- 聚合直方图或摘要以一系列仪表的形式导出
- 导出器的每个时间间隔都会重置任何渲染的指标
- 所有指标首先在本地上聚合,然后推送到端点
- 目前不支持采样
- 目前不支持在指标定义中使用容器ID
- 使用tokio异步框架通过UDP将聚合的指标推送到网络服务
使用方法
使用导出器非常简单
// First, create a builder.
//
// The builder can configure many aspects of the exporter, setting global tags,
// adjusting how histograms will be reported, changing how long metrics
// can be idle before being removed, and more.
let builder = StatsdBuilder::new();
// Normally, most users will want to "install" the exporter which sets it as the
// global recorder for all `metrics` calls, and installs a simple asynchronous
// task which pushes to the configured push gateway on the given interval.
//
// If you're already inside a Tokio runtime, this will spawn a task for the
// exporter on that runtime, and otherwise, a new background thread will be
// spawned which a Tokio single-threaded runtime is launched on to, where we then
// finally launch the exporter:
builder.install().expect("failed to install recorder/exporter");
// Maybe you have a more complicated setup and want to be handed back the recorder
// object and a future that can run the push gateway so you can install/spawn it
// in a specific way.. also not a problem!
//
// As this is a more advanced method, it _must_ be called from within an existing
// Tokio runtime when the exporter is running in HTTP listener/scrape endpoint mode.
let (recorder, exporter) = builder.build().expect("failed to build recorder/exporter");
// Finally, maybe you literally only want to build the recorder and nothing else,
// and we've got you covered there, too:
let recorder = builder.build_recorder().expect("failed to build recorder");
依赖关系
~6–19MB
~204K SLoC