#sdk #废弃 #relic #bindings #version #docs #details

newrelic

C SDK 的 Rust 语法绑定。注意:从版本 0.1.0 开始,此软件包与之前的版本完全不兼容,因为它从废弃的 New Relic SDK 转移到新的 New Relic C SDK。这有一些额外的要求:有关详细信息,请参阅 https://docs.newrelic.com/docs/agents/c-sdk/get-started/introduction-c-sdk。

5 个不稳定版本

0.2.2 2020年3月2日
0.2.0 2019年5月31日
0.1.0 2019年5月24日
0.0.2 2016年6月26日
0.0.1 2016年6月26日

#2#relic

28 每月下载次数
用于 少于 10 crates

MIT/Apache

76KB
1K SLoC

New Relic SDK

docs.rs crates.io

围绕 New Relic C SDK 的 Rust 风格包装。

还可以查看 [rocket_newrelic] 软件包,以了解与 Rocket 网络框架的集成示例。


注意:从版本 0.1.0 开始,此软件包与之前的版本完全不兼容,因为它从废弃的 New Relic SDK 转移到新的 New Relic C SDK。这有一些额外的要求:有关详细信息,请参阅 https://docs.newrelic.com/docs/agents/c-sdk/get-started/introduction-c-sdk

特别是,New Relic SDK 不会链接 musl - 有关详细信息,请参阅 newrelic-sys 软件包。

有关 <0.1.0 仓库,请参阅 https://github.com/hjr3/newrelic-rs

用法

将此软件包添加到您的 Cargo.toml

[dependencies]
newrelic = "0.2"

然后您可以按照以下方式对代码进行检测

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

use newrelic::{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.
}

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

此软件包仍需要按照 New Relic C SDK 文档 运行 New Relic 守护程序;请务必先阅读此文档。

功能

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

  • 事务
    • 添加属性
    • 检测错误
    • 忽略事务
    • 重命名事务
    • 覆盖时间
    • 自定义
    • 数据存储
    • 外部
    • 嵌套段
    • 覆盖时间
  • 自定义事件
  • 自定义度量
  • 异步段
  • 分布式跟踪
  • 事务跟踪配置
  • 数据存储段跟踪配置
  • 日志/守护进程配置

故障

目前,使用此库创建事务返回一个 Result<newrelic::Transaction, newrelic::Error>,这使得用户在事务创建失败时可以选择失败或忽略。

然而,当在库中使用段时,为了便于使用,段失败的情况被隐藏起来。也就是说,在以下示例中,段的创建可能会失败(将通过 log 装箱记录),但传递给自定义段闭包的参数仍然属于 newrelic::Segment 类型。这使得处理嵌套段变得更加简单。

如果这种行为不被大多数人接受,未来可能会进行更改。

use newrelic::{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()
    });
}

异步

Segmented 扩展特质增加了在段内运行未来的能力。需要 async 功能。

分布式跟踪

分布式跟踪 可通过 distributed_tracing 功能使用。值得注意的是,此功能需要 libc 装箱。

依赖关系

~4MB
~88K SLoC