#agent #plugin #cycle #plugin-api #sdk #setup #relic

newrelic_plugin

New Relic Rust 插件代理 SDK

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2018 年 10 月 30 日

#5 in #relic

Apache-2.0/MIT

26KB
517 行 代码

New Relic Rust 插件代理 SDK

本项目代表 New Relic 插件 API 的 Rust 绑定。此包可用于构建插件代理。

示例

// Plugin agent setup
let mut agent = Agent::new("<license_key>".into(), "1.0.0".into(), "host".into(), 1234);
let mut c1 = agent.create_component("Test Plugin".into(), "com.test_plugin.plugin_name".into());
agent.create_metric(&mut c1, "Component/Request/Rate/host1[requests/second]".into());
agent.create_metric(&mut c1, "Component/Request/Rate/host2[requests/second]".into());
agent.register_component(c1);

// Poll cycle function. This function is excuted every [poll_cycle] seconds.
fn cycle(agent: &mut Agent){
    agent.report_metric(
        "com.test_plugin.plugin_name".into(),
        "Component/Request/Rate/host1[requests/second]".into(), 
        (1000) as f64, None
    );
    agent.report_metric(
        "com.test_plugin.plugin_name".into(),
        "Component/Request/Rate/host2[requests/second]".into(), 
        (1000) as f64, None
    );
}
// Start the agent
agent.run(cycle);

状态

代理可以选择具有状态,以便能够在周期之间保留指标读取。状态通过 set_state 函数传递给 Agent 实例。状态是泛型类型,这意味着您可以根据此示例创建自定义结构体

struct State{
    prev_file_size: i32
}

// Plugin agent setup
let mut agent = Agent::new("<license_key>".into(), "1.0.0".into(), "host".into(), 1234);
let mut c1 = agent.create_component("Test Plugin".into(), "com.test_plugin.plugin_name".into());
agent.create_metric(&mut c1, "Component/File/Size/host1[bytes]".into());
agent.register_component(c1);

// Poll cycle function. This function is excuted every [poll_cycle] seconds.
fn cycle(agent: &mut Agent){
    let prev_size = agent.get_state().as_ref().unwrap().prev_file_size.clone();
    let new_size = 2000;
    if prev_size != 0{
        agent.report_metric(
            "com.test_plugin.plugin_name".into(),
            "Component/File/Size/host1[bytes]".into(), 
            new_size - prev_size as f64, None
        );  
    }
    agent.set_state(State{prev_file_size: new_size});
}
// Start the agent
agent.run(cycle);

配置

NewRelic 插件从当前工作目录中的 config.yml 文件读取配置。如果没有 config.yml 文件,则使用默认值。可能的配置键和值

配置键 描述 默认
endpoint NewRelic 自定义插件 API 端点 https://platform-api.newrelic.com/platform/v1/metrics
log4rs_file log4rs 配置文件 log4rs.yml
deliver_cycle 指标报告频率 60(秒)
poll_cycle 轮询周期频率 20(秒)

日志记录

NewRelic 插件使用 log4rs。代理内部记录的所有事件都发送到名为 "agent" 的记录器。您可以在 log4rs 配置文件中添加更多记录器以记录插件代码中的消息。

示例 log4rs.yml 文件

refresh_rate: 60 seconds

appenders:
  agent:
    kind: file
    path: "log/agent.log"
    encoder:
      pattern: "{d} - {l} - {f} - {m}{n}"
  plugin:
    kind: file
    path: "log/plugin.log"
    encoder:
      pattern: "{d} - {l} - {f} - {m}{n}"

loggers:
  agent:
    level: error
    appenders:
      - agent
  plugin:
    level: info
    appenders:
      - plugin

依赖关系

~11–20MB
~307K SLoC