diff --git a/src/frontend/src/instance.rs b/src/frontend/src/instance.rs index a9cfc31cad..6c68a62dfc 100644 --- a/src/frontend/src/instance.rs +++ b/src/frontend/src/instance.rs @@ -580,6 +580,7 @@ impl PrometheusHandler for Instance { query: &PromQuery, query_ctx: QueryContextRef, ) -> server_error::Result { + let _timer = timer!(metrics::METRIC_HANDLE_PROMQL_ELAPSED); let interceptor = self .plugins .get::>(); diff --git a/src/frontend/src/metrics.rs b/src/frontend/src/metrics.rs index 31c5de4a64..cbfcab962c 100644 --- a/src/frontend/src/metrics.rs +++ b/src/frontend/src/metrics.rs @@ -13,6 +13,7 @@ // limitations under the License. pub(crate) const METRIC_HANDLE_SQL_ELAPSED: &str = "frontend.handle_sql_elapsed"; +pub(crate) const METRIC_HANDLE_PROMQL_ELAPSED: &str = "frontend.handle_promql_elapsed"; pub(crate) const METRIC_EXEC_PLAN_ELAPSED: &str = "frontend.exec_plan_elapsed"; pub(crate) const METRIC_HANDLE_SCRIPTS_ELAPSED: &str = "frontend.handle_scripts_elapsed"; pub(crate) const METRIC_RUN_SCRIPT_ELAPSED: &str = "frontend.run_script_elapsed"; diff --git a/src/servers/src/metrics.rs b/src/servers/src/metrics.rs index cbeaaa9ab8..8e206059d8 100644 --- a/src/servers/src/metrics.rs +++ b/src/servers/src/metrics.rs @@ -46,6 +46,16 @@ pub(crate) const METRIC_HTTP_PROM_STORE_READ_ELAPSED: &str = "servers.http_prome pub(crate) const METRIC_HTTP_OPENTELEMETRY_ELAPSED: &str = "servers.http_otlp_elapsed"; pub(crate) const METRIC_TCP_OPENTSDB_LINE_WRITE_ELAPSED: &str = "servers.opentsdb_line_write_elapsed"; +pub(crate) const METRIC_HTTP_PROMQL_INSTANT_QUERY_ELAPSED: &str = + "servers.http_promql_instant_query_elapsed"; +pub(crate) const METRIC_HTTP_PROMQL_RANGE_QUERY_ELAPSED: &str = + "servers.http_promql_range_query_elapsed"; +pub(crate) const METRIC_HTTP_PROMQL_LABEL_QUERY_ELAPSED: &str = + "servers.http_promql_label_query_elapsed"; +pub(crate) const METRIC_HTTP_PROMQL_SERIES_QUERY_ELAPSED: &str = + "servers.http_promql_series_query_elapsed"; +pub(crate) const METRIC_HTTP_PROMQL_LABEL_VALUE_QUERY_ELAPSED: &str = + "servers.http_promql_label_value_query_elapsed"; pub(crate) const METRIC_MYSQL_CONNECTIONS: &str = "servers.mysql_connection_count"; pub(crate) const METRIC_MYSQL_QUERY_TIMER: &str = "servers.mysql_query_elapsed"; diff --git a/src/servers/src/prometheus.rs b/src/servers/src/prometheus.rs index 293a702a96..9c65a243ca 100644 --- a/src/servers/src/prometheus.rs +++ b/src/servers/src/prometheus.rs @@ -26,7 +26,7 @@ use common_error::ext::ErrorExt; use common_error::status_code::StatusCode; use common_query::Output; use common_recordbatch::RecordBatches; -use common_telemetry::info; +use common_telemetry::{info, timer}; use common_time::util::{current_time_rfc3339, yesterday_rfc3339}; use datatypes::prelude::ConcreteDataType; use datatypes::scalars::ScalarVector; @@ -91,7 +91,7 @@ impl PrometheusServer { } pub fn make_app(&self) -> Router { - // TODO(ruihang): implement format_query, series, values, query_examplars and targets methods + // TODO(ruihang): implement format_query, series, values, query_exemplars and targets methods let router = Router::new() .route("/query", routing::post(instant_query).get(instant_query)) @@ -428,6 +428,7 @@ pub async fn instant_query( Query(params): Query, Form(form_params): Form, ) -> Json { + let _timer = timer!(crate::metrics::METRIC_HTTP_PROMQL_INSTANT_QUERY_ELAPSED); // Extract time from query string, or use current server time if not specified. let time = params .time @@ -471,6 +472,7 @@ pub async fn range_query( Query(params): Query, Form(form_params): Form, ) -> Json { + let _timer = timer!(crate::metrics::METRIC_HTTP_PROMQL_RANGE_QUERY_ELAPSED); let prom_query = PromQuery { query: params.query.or(form_params.query).unwrap_or_default(), start: params.start.or(form_params.start).unwrap_or_default(), @@ -543,6 +545,7 @@ pub async fn labels_query( Query(params): Query, Form(form_params): Form, ) -> Json { + let _timer = timer!(crate::metrics::METRIC_HTTP_PROMQL_LABEL_QUERY_ELAPSED); let mut queries = params.matches.0; if queries.is_empty() { queries = form_params.matches.0; @@ -779,6 +782,7 @@ pub async fn label_values_query( Path(label_name): Path, Query(params): Query, ) -> Json { + let _timer = timer!(crate::metrics::METRIC_HTTP_PROMQL_LABEL_VALUE_QUERY_ELAPSED); let queries = params.matches.0; if queries.is_empty() { return PrometheusJsonResponse::error("Invalid argument", "match[] parameter is required"); @@ -891,6 +895,7 @@ pub async fn series_query( Query(params): Query, Form(form_params): Form, ) -> Json { + let _timer = timer!(crate::metrics::METRIC_HTTP_PROMQL_SERIES_QUERY_ELAPSED); let mut queries: Vec = params.matches.0; if queries.is_empty() { queries = form_params.matches.0;