16 个不稳定版本 (5 个破坏性更新)
0.6.0 | 2023年3月28日 |
---|---|
0.5.0 | 2022年11月7日 |
0.4.3 | 2022年5月24日 |
0.4.2 | 2021年8月6日 |
0.1.2 | 2020年3月1日 |
#598 在 数据库接口
519 每月下载量
用于 zbusdg
32KB
580 行
Telegraf-rust
Telegraf-rust 是一个轻量级的客户端库,用于使用 Telegraf 进行通用指标编写。Telegraf 是 InfluxData 提供的一个微服务,用于简化分布式服务的指标报告 - 请参阅他们的 文档 了解更多信息。
此库不提供查询或其他 InfluxDB 客户端库功能。这意味着它应该轻量级且简单,以便服务报告指标。
Telegraf-rust 支持所有套接字连接类型,如 UDS (Unix 域套接字)
- TCP (
tcp://
) - UDP (
udp://
) - UDS 流 (
unix://
) - UDS 数据报 (
unixgram://
)
安装
将其添加到您的 Cargo.toml 中
[dependencies]
telegraf = "*"
使用方法
使用此库假定您已在 Telegraf 配置文件中设置了一个套接字监听器。一个示例 TCP 连接如下所示
[[inputs.socket_listener]]
service_address = "tcp://127.0.0.1:8094"
所有使用都将从通过 Client
创建套接字连接开始。这支持多种连接协议 - 您使用哪种协议将取决于您的 Telegraf input.socket_listener
配置如何设置。
一旦设置了一个客户端,就有多种不同的方法来写入点
使用 derive 宏定义表示指标的 struct
use telegraf::*;
let mut client = Client::new("tcp://127.0.0.1:8094").unwrap();
#[derive(Metric)]
struct MyMetric {
field1: i32,
#[telegraf(tag)]
tag1: String,
}
let point = MyMetric { field1: 1, tag1: "tag" };
client.write(&point);
默认情况下,度量名称将与 struct 相同。您可以通过 derive 属性来覆盖此设置
use telegraf::*;
#[derive(Metric)]
#[measurement = "custom_name"]
struct MyMetric {
field1: i32,
}
与任何 Telegraf 点一样,标签是可选的,但至少需要一个字段。
时间戳是可选的,可以通过 timestamp
属性设置
use telegraf::*;
#[derive(Metric)]
struct MyMetric {
#[telegraf(timestamp)]
ts: u64,
field1: i32,
}
使用 point
宏进行 ad-hoc 指标
use telegraf::*;
let mut client = Client::new("tcp://127.0.0.1:8094").unwrap();
let p = point!("measurement", ("tag1", "tag1Val"), ("field1", "val") ("field2", 10); 100);
client.write_point(&p);
宏的语法格式如下
(<measurement>, [(<tagName>, <tagVal>)], [(<fieldName>, <fieldVal>)]; <timestamp>)
测量名称、标签集和字段集由逗号分隔。标签和字段元组由空格分隔。时间戳由分号分隔。标签集和时间戳是可选的。
手动 Point
初始化
use telegraf::{Client, Point};
let c = Client::new("tcp://127.0.0.1:8094").unwrap();
let p = Point::new(
String::from("measurement"),
vec![
(String::from("tag1"), String::from("tag1value"))
],
vec![
(String::from("field1"), Box::new(10)),
(String::from("field2"), Box::new(20.5)),
(String::from("field3"), Box::new("anything!"))
],
Some(100),
);
c.write_point(p)
字段数据
任何将成为字段值的属性都必须实现该库提供的 IntoFieldData
特性。
pub trait IntoFieldData {
fn field_data(&self) -> FieldData;
}
提供了许多常用数据类型的开箱即用实现,但对于其他数据类型,可以手动实现。
时间戳
时间戳是可选的。如果不存在,Telegraf 守护进程将使用当前时间设置时间戳。时间戳以纳秒精度指定 Unix 时间,因此 u64
必须为字段类型实现 From<T>
特性,如果实现尚未存在
use telegraf::*;
#[derive(Copy, Clone)]
struct MyType {
// ...
}
impl From<MyType> for u64 {
fn from(my_type: MyType) -> Self {
todo!()
}
}
#[derive(Metric)]
struct MyMetric {
#[telegraf(timestamp)]
ts: MyType,
field1: i32,
}
有关时间戳的更多信息,请参阅此处。
依赖关系
~3MB
~83K SLoC