#honeycomb #web-api #api #send-event #web #api-bindings

libhoney-rust

Rust 用于向Honeycomb发送数据的库

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

Download history 42/week @ 2024-03-11 75/week @ 2024-03-18 49/week @ 2024-03-25 122/week @ 2024-04-01 57/week @ 2024-04-08 39/week @ 2024-04-15 45/week @ 2024-04-22 31/week @ 2024-04-29 39/week @ 2024-05-06 42/week @ 2024-05-13 46/week @ 2024-05-20 37/week @ 2024-05-27 32/week @ 2024-06-03 33/week @ 2024-06-10 48/week @ 2024-06-17 36/week @ 2024-06-24

每月下载 152次
用于 6 个crate(3个直接使用)

MIT 协议

67KB
1K SLoC

docs.rs crates.io MIT licensed Build Status

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