This crate provides Prometheus style process metrics collector of metrics crate.
This crate supports the following metrics, equal to what official prometheus client of go ([client_golang]) provides.
| Metric name | Help string | Linux | macOS | Windows |
| ---------------------------------- | ------------------------------------------------------ | ----- | ----- | ------- |
| process_cpu_seconds_total
| Total user and system CPU time spent in seconds. | x | x | x |
| process_open_fds
| Number of open file descriptors. | x | x | x |
| process_max_fds
| Maximum number of open file descriptors. | x | x | x |
| process_virtual_memory_bytes
| Virtual memory size in bytes. | x | x | x |
| process_virtual_memory_max_bytes
| Maximum amount of virtual memory available in bytes. | x | x | |
| process_resident_memory_bytes
| Resident memory size in bytes. | x | x | x |
| process_heap_bytes
| Process heap size in bytes. | | | |
| process_start_time_seconds
| Start time of the process since unix epoch in seconds. | x | x | x |
| process_threads
| Number of OS threads in the process. | x | x | |
Use this crate with metrics-exporter-prometheus as an exporter like:
```rust use std::thread; use std::time::{Duration, Instant};
use metricsexporterprometheus::PrometheusBuilder; use metrics_process::Collector;
fn main() { let builder = PrometheusBuilder::new(); builder .install() .expect("failed to install Prometheus recorder");
let collector = Collector::new("");
// Call `describe()` method to register help string.
collector.describe();
loop {
let s = Instant::now();
// Periodically call `collect()` method to update information.
collector.collect();
thread::sleep(Duration::from_millis(750));
}
} ```
Or with axum (or any web application framework you like) to collect metrics whenever
the /metrics
endpoint is invoked like:
```rust use axum::{routing::get, Router, Server}; use metricsexporterprometheus::PrometheusBuilder; use metrics_process::Collector;
async fn main() { let builder = PrometheusBuilder::new(); let handle = builder .install_recorder() .expect("failed to install Prometheus recorder");
let collector = Collector::new("");
// Call `describe()` method to register help string.
collector.describe();
let addr = "127.0.0.1:9000".parse().unwrap();
let app = Router::new().route(
"/metrics",
get(move || {
// Collect information just before handle '/metrics'
collector.collect();
std::future::ready(handle.render())
}),
);
Server::bind(&addr)
.serve(app.into_make_service())
.await
.unwrap();
} ```
The code follows MIT license written in LICENSE. Contributors need to agree that any modifications sent in this repository follow the license.