21次发布
0.8.5 | 2022年8月23日 |
---|---|
0.8.4 | 2022年1月19日 |
0.8.3 | 2021年10月18日 |
0.8.2 | 2021年4月26日 |
0.3.0 | 2019年3月14日 |
在 HTTP服务器 中排名 116
每月下载量 19,393
在 17 crates 中使用
26KB
319 行
prometheus_exporter
使用 tiny-http 导出 Prometheus度量值的辅助库。它旨在帮助编写 Prometheus导出器,无需设置和维护 HTTP 网络服务器。如果程序还使用 HTTP 服务器执行其他目的,此包可能不是最佳方式,应直接使用 rust-prometheus。
它使用 rust-prometheus 来收集和渲染 Prometheus度量值,以及 tiny-http 来通过 HTTP 公开度量值。
注意:您必须使用与此包相同的 Prometheus crate 版本。此 crate 当前使用全局注册表中存储的度量值。不同的 Prometheus crate 将注册到不同的全局注册表中。这意味着用于注册新度量值的宏不会将度量值公开给此导出器。
此 crate 重新导出 Prometheus crate,以便更容易保持版本同步(请参阅示例)。目前此 crate 使用 Prometheus 版本 0.13
。
有关如何从旧版 crate 版本迁移的信息,请参阅 MIGRATION。
注意 版本 0.8.0
使用的 tiny_http
版本存在漏洞,请升级到版本 0.8.1
或更高版本。有关更多信息,请参阅问题 #18。
用法
将其添加到您的 Cargo.toml
[dependencies]
prometheus_exporter = "0.8"
使用此 crate 的最基本方式是运行以下命令
prometheus_exporter::start("0.0.0.0:9184".parse().expect(
"failed to parse binding",
))
.expect("failed to start prometheus exporter");
这将启动导出器并将HTTP服务器绑定到 0.0.0.0:9184
。之后,您可以按照自己的意愿更新指标。只要这些指标放入全局Prometheus注册表中,更改后的指标就会被导出。
使用此crate的另一种方法如下
let exporter = prometheus_exporter::start("0.0.0.0:9184".parse().expect(
"failed to parse binding",
))
.expect("failed to start prometheus exporter");
let guard = exporter.wait_request()
这将阻塞当前线程,直到在HTTP服务器上接收到请求。它还返回一个保护器,使HTTP服务器等待直到保护器被释放。这在始终导出一致的指标时非常有用,因为在它们被导出之前,所有指标都可以更新。
基本示例
您需要在您的Cargo.toml中包含以下内容
[dependencies]
prometheus_exporter = "0.8"
env_logger = "0.9"
log = "0.4"
reqwest = { version = "0.11",features = ["blocking"] }
一个非常简单的示例如下(来自examples/simple.rs
)
// Will create an exporter with a single metric that does not change
use env_logger::{
Builder,
Env,
};
use log::info;
use prometheus_exporter::prometheus::register_gauge;
use std::net::SocketAddr;
fn main() {
// Setup logger with default level info so we can see the messages from
// prometheus_exporter.
Builder::from_env(Env::default().default_filter_or("info")).init();
// Parse address used to bind exporter to.
let addr_raw = "0.0.0.0:9184";
let addr: SocketAddr = addr_raw.parse().expect("can not parse listen addr");
// Create metric
let metric = register_gauge!("simple_the_answer", "to everything")
.expect("can not create gauge simple_the_answer");
metric.set(42.0);
// Start exporter
prometheus_exporter::start(addr).expect("can not start exporter");
// Get metrics from exporter
let body = reqwest::blocking::get(&format!("http://{}/metrics", addr_raw))
.expect("can not get metrics from exporter")
.text()
.expect("can not body text from request");
info!("Exporter metrics:\n{}", body);
}
依赖项
~3–9MB
~108K SLoC