#metrics-exporter #metrics #statsd #telemetry #aggregate

metrics-exporter-dogstatsd

一个可以将指标发送到Statsd/Dogstatsd的兼容metrics的导出器

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 调试

Download history 496/week @ 2024-03-09 445/week @ 2024-03-16 266/week @ 2024-03-23 329/week @ 2024-03-30 559/week @ 2024-04-06 586/week @ 2024-04-13 1568/week @ 2024-04-20 785/week @ 2024-04-27 535/week @ 2024-05-04 642/week @ 2024-05-11 438/week @ 2024-05-18 117/week @ 2024-05-25 107/week @ 2024-06-01 70/week @ 2024-06-08 5/week @ 2024-06-15

每月206次下载

MIT 许可证

84KB
1.5K SLoC

metrics-exporter-dogstatsd

metrics-exporter-dogstatsd 是一个兼容 metrics 的导出器,它聚合指标并将它们推送到 statsd/dogstatsd 代理。

这段代码的大部分来自 Prometheus 导出器,在行为上做了一些重要的更改。

与其他像 cadencemetrics-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将聚合的指标推送到网络服务

所有关于指标标签的命名转换均符合DataDog的要求。

使用方法

使用导出器非常简单

// 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