3个不稳定版本

0.2.0 2023年3月28日
0.1.1 2022年5月24日
0.1.0 2021年8月5日

#4#telegraf

Download history 288/week @ 2024-04-09 111/week @ 2024-04-16 444/week @ 2024-04-23 211/week @ 2024-04-30 124/week @ 2024-05-07 254/week @ 2024-05-14 51/week @ 2024-05-21 343/week @ 2024-05-28 101/week @ 2024-06-04 194/week @ 2024-06-11 110/week @ 2024-06-18 86/week @ 2024-06-25 120/week @ 2024-07-02 445/week @ 2024-07-09 170/week @ 2024-07-16 172/week @ 2024-07-23

919 每月下载量
用于 2 个crate(通过 telegraf

MIT 协议

8KB
168

Telegraf-rust

Telegraf crate Telegraf crate downloads Telegraf documentation

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 配置决定。

一旦设置好客户端,就有多种不同的方式来写入点

使用推导宏定义表示指标的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相同。您可以通过推导属性来覆盖此设置

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 宏来进行临时的度量。

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,
}

关于时间戳的更多信息可以在 这里 找到。

依赖关系

~1.5MB
~36K SLoC