#relic #segment #sdk #transaction #bindings #wrapper #newrelic-rust-ffi

bin+lib ackorelic

New Relic C SDK 的 Rust 习惯用法绑定

12 个版本

0.1.11 2020 年 11 月 18 日
0.1.10 2020 年 2 月 24 日
0.1.9 2019 年 9 月 13 日
0.1.8 2019 年 8 月 27 日
0.1.5 2019 年 7 月 22 日

#424调试

MIT/Apache

77KB
1.5K SLoC

New Relic SDK

围绕 New Relic C SDK 的 Rust 习惯用法包装器。

使用方法

将此 crate 添加到您的 Cargo.toml

[dependencies]
ackorelic = "*"

然后您可以像以下这样对代码进行检测

use std::{env, thread, time::Duration};

use ackorelic::{App, NewRelicConfig};

fn main() {
    let license_key =
        env::var("NEW_RELIC_LICENSE_KEY").unwrap_or_else(|_| "example-license-key".to_string());
    let app = App::new("my app", &license_key).expect("Could not create app");

    // Start a web transaction and a segment
    let _transaction = app
        .web_transaction("Transaction name")
        .expect("Could not start transaction");
    thread::sleep(Duration::from_secs(1));

    // Transaction ends automatically.

    // App is destroyed automatically.
}

有关更复杂的示例,包括段(自定义、数据存储和外部)以及进一步配置,请参阅存储库中的示例目录。

此 crate 仍然需要运行 New Relic 守护进程,如 New Relic C SDK 的文档中所述;请务必先阅读此内容。

功能

目前实现了 C SDK 的核心功能。还有一些其他事情仍然是 TODO!

  • 事务
    • 添加属性
    • 注意错误
    • 忽略事务
    • 覆盖计时
    • 自定义
    • 数据存储
    • 外部
    • 嵌套段
    • 覆盖计时
  • 自定义事件
  • 自定义度量
  • 事务跟踪配置
  • 数据存储段跟踪配置
  • 日志/守护进程配置

失败

目前,使用此库创建事务返回一个 Result<newrelic::Transaction, newrelic::Error>,这使得当事务创建失败时,用户必须决定是强制失败还是忽略。

然而,在使用库中的段时,为了用户体验,段的失败会被隐藏。也就是说,在下面的例子中,段的创建可能会失败(这将通过 log 包进行记录),但传递给自定义段闭包的参数仍然是 newrelic::Segment 类型。这使得处理嵌套段变得更加简单。

如果这种表现不被用户接受,未来可能会进行更改。

use ackorelic::{App, NewRelicConfig};

fn main() {
    let app =
        App::new("my app", "my license key").expect("Could not create app");
    let transaction = app
        .web_transaction("Transaction name")
        .expect("Could not start transaction");
    let expensive_value = transaction.custom_segment("Segment name", "Segment category", |seg| {
        do_something_expensive()
    });
}

依赖项

~9.5MB
~208K SLoC