mirror of
https://github.com/tokio-rs/axum.git
synced 2024-11-25 08:37:29 +01:00
Start second server on different port for metrics endpoint (#1444)
* Start second server on different port for metrics endpoint * Don't track metrics on metrics server
This commit is contained in:
parent
a7d8954178
commit
ee0b71a4ac
1 changed files with 44 additions and 19 deletions
|
@ -23,6 +23,46 @@ use std::{
|
||||||
};
|
};
|
||||||
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
|
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
|
||||||
|
|
||||||
|
fn metrics_app() -> Router {
|
||||||
|
let recorder_handle = setup_metrics_recorder();
|
||||||
|
Router::new().route("/metrics", get(move || ready(recorder_handle.render())))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main_app() -> Router {
|
||||||
|
Router::new()
|
||||||
|
.route("/fast", get(|| async {}))
|
||||||
|
.route(
|
||||||
|
"/slow",
|
||||||
|
get(|| async {
|
||||||
|
tokio::time::sleep(Duration::from_secs(1)).await;
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
.route_layer(middleware::from_fn(track_metrics))
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn start_main_server() {
|
||||||
|
let app = main_app();
|
||||||
|
|
||||||
|
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
|
||||||
|
tracing::debug!("listening on {}", addr);
|
||||||
|
axum::Server::bind(&addr)
|
||||||
|
.serve(app.into_make_service())
|
||||||
|
.await
|
||||||
|
.unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn start_metrics_server() {
|
||||||
|
let app = metrics_app();
|
||||||
|
|
||||||
|
// NOTE: expose metrics enpoint on a different port
|
||||||
|
let addr = SocketAddr::from(([127, 0, 0, 1], 3001));
|
||||||
|
tracing::debug!("listening on {}", addr);
|
||||||
|
axum::Server::bind(&addr)
|
||||||
|
.serve(app.into_make_service())
|
||||||
|
.await
|
||||||
|
.unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
tracing_subscriber::registry()
|
tracing_subscriber::registry()
|
||||||
|
@ -33,25 +73,10 @@ async fn main() {
|
||||||
.with(tracing_subscriber::fmt::layer())
|
.with(tracing_subscriber::fmt::layer())
|
||||||
.init();
|
.init();
|
||||||
|
|
||||||
let recorder_handle = setup_metrics_recorder();
|
// The `/metrics` endpoint should not be publicly available. If behind a reverse proxy, this
|
||||||
|
// can be achieved by rejecting requests to `/metrics`. In this example, a second server is
|
||||||
let app = Router::new()
|
// started on another port to expose `/metrics`.
|
||||||
.route("/fast", get(|| async {}))
|
let (_main_server, _metrics_server) = tokio::join!(start_main_server(), start_metrics_server());
|
||||||
.route(
|
|
||||||
"/slow",
|
|
||||||
get(|| async {
|
|
||||||
tokio::time::sleep(Duration::from_secs(1)).await;
|
|
||||||
}),
|
|
||||||
)
|
|
||||||
.route("/metrics", get(move || ready(recorder_handle.render())))
|
|
||||||
.route_layer(middleware::from_fn(track_metrics));
|
|
||||||
|
|
||||||
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
|
|
||||||
tracing::debug!("listening on {}", addr);
|
|
||||||
axum::Server::bind(&addr)
|
|
||||||
.serve(app.into_make_service())
|
|
||||||
.await
|
|
||||||
.unwrap();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn setup_metrics_recorder() -> PrometheusHandle {
|
fn setup_metrics_recorder() -> PrometheusHandle {
|
||||||
|
|
Loading…
Reference in a new issue