7个版本
0.1.6 | 2021年1月9日 |
---|---|
0.1.5 | 2020年12月1日 |
0.1.4 | 2020年11月7日 |
0.1.3 | 2019年9月25日 |
0.1.0 | 2019年5月22日 |
#5 in #honeycomb
每月下载 152次
用于 6 个crate(3个直接使用)
67KB
1K SLoC
libhoney-rust
Rust 用于向Honeycomb发送数据的库。
如果您能尝试它并提供反馈,我将不胜感激。以下是一些我认为它可能还不适合生产使用的理由
-
Honeycomb 使用单例模式库,但我决定在这里不使用它(主要是因为:更难做对,我觉得这是一个Rust的反模式)。如果您认为我应该这么做,请告诉我。
-
我对线程代码并不确信。尽管“它工作”,但它可能并不出色——任何反馈都将非常受重视。
出于这些原因,您可能最好等待1.0.0版本(我将遵循 语义版本控制)。话虽如此,如果您仍然想使用它,感谢您的勇气,并确保为此库提交bug报告!
libhoney
Rust 用于向Honeycomb发送事件,这是一种用于在生产环境中调试软件的服务。
用法和示例
初始化
通过传递您的团队API密钥和它应发送事件的默认数据集名称来初始化库。当您调用库的初始化例程时,它将启动后台线程来处理发送所有事件。在客户端调用 .close() 将终止所有后台线程。
let client = libhoney::init(libhoney::Config{
options: libhoney::client::Options {
api_key: "YOUR_API_KEY".to_string(),
dataset: "honeycomb-rust-example".to_string(),
..libhoney::client::Options::default()
},
transmission_options: libhoney::transmission::Options::default(),
});
client.close();
有关其他配置选项,请参阅 API参考。
构建和发送事件
初始化后,libhoney客户端即可发送事件。事件经过三个阶段
- 创建
event := builder.new_event()
- 添加字段
event.add_field("key", Value::String("val".to_string()))
,event.add(data)
- 传输
event.send(&mut client)
调用 .send() 时,事件将被调度以发送到 Honeycomb。所有库都设置了默认值,以便在错误条件下尽可能使您的应用程序运行顺畅。
在其最简单的形式中,您可以使用 .add_field(k, v)
方法向事件添加单个属性。如果您多次添加相同的键,则仅保留最后添加的值。
更复杂的结构(映射和结构体—可以序列化为 JSON 对象的事物)可以使用 .add(data) 方法添加到事件中。
事件可以与不发送到 Honeycomb 的元数据相关联。此元数据用于在处理响应时识别事件。有关元数据的更多详细信息,请参阅下面的响应部分。
处理响应
发送事件是一个异步操作,默认情况下将避免阻塞。.send() 将将事件入队以尽可能快地发送(因此,返回值不表示事件已成功发送)。使用 .responses() 返回的 Vec 检查事件是否已成功接收 Honeycomb 服务器的处理。
在发送事件之前,您可以选择将元数据附加到该事件。此元数据不会发送到 Honeycomb;相反,它用于帮助您将单个响应与发送的事件匹配起来。在发送事件时,libhoney 将从事件中提取元数据并将其附加到响应对象上供您使用。通过在事件上直接填充 .metadata 属性来添加元数据。
响应有多个字段描述了尝试发送事件的结果
-
metadata
:您附加到对应此响应的事件的元数据 -
status_code
:尝试发送事件时 Honeycomb 返回的 HTTP 状态码。2xx 表示成功。 -
duration
:发送事件的时间.Duration。 -
body
:Honeycomb 的 HTTP 响应体。在失败时,此体包含有关失败的一些更多信息。 -
error
:当事件甚至无法创建 HTTP 尝试时,原因将在此字段中。例如,当由于队列溢出而采样或丢弃时。
如果您不感兴趣,则不需要处理响应—简单地忽略它们是完全可以接受的。未读的响应将被丢弃。
示例
Honeycomb 可以计算各种统计数据,因此发送您关心的数据,让我们为您计算平均值、百分位数、下限/上限、基数等。
简单:发送一个事件
use libhoney::FieldHolder; // Add trait to allow for adding fields
// Call init to get a client
let mut client = init(libhoney::Config {
options: options,
transmission_options: libhoney::transmission::Options::default(),
});
let mut data: HashMap<String, Value> = HashMap::new();
data.insert("duration_ms".to_string(), json!(153.12));
data.insert("method".to_string(), Value::String("get".to_string()));
data.insert("hostname".to_string(), Value::String("appserver15".to_string()));
data.insert("payload_length".to_string(), json!(27));
let mut ev = client.new_event();
ev.add(data);
// In production code, please check return of `.send()`
ev.send(&mut client).err();
依赖项
~8–13MB
~251K SLoC