1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2018 年 10 月 30 日 |
---|
#5 in #relic
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