Skip to content

Commit 89cb39a

Browse files
authored
feat(meta-service): add metrics for watch stream (#18209)
Add two metrics: - the number of items sent when sending watch stream initialization data(all existent key-values), - and the number of items sent when a key-value changed ``` metasrv_meta_network_watch_initialization_total 2753400 metasrv_meta_network_watch_change_total 2753394 ```
1 parent 364d955 commit 89cb39a

File tree

3 files changed

+51
-0
lines changed

3 files changed

+51
-0
lines changed

src/meta/service/src/api/grpc/grpc_service.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,13 @@ impl MetaService for MetaServiceImpl {
464464

465465
let stream = WatchStream::new(rx, Box::new(on_drop));
466466

467+
let stream = stream.map(move |item| {
468+
if let Ok(ref resp) = item {
469+
network_metrics::incr_watch_sent(resp);
470+
}
471+
item
472+
});
473+
467474
if flush {
468475
let ctx = "watch-Dispatcher";
469476
let snk = new_initialization_sink::<WatchTypes>(tx.clone(), ctx);

src/meta/service/src/metrics/meta_metrics.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -689,6 +689,7 @@ pub mod network_metrics {
689689
use std::sync::LazyLock;
690690
use std::time::Duration;
691691

692+
use databend_common_meta_types::protobuf::WatchResponse;
692693
use prometheus_client::metrics::counter::Counter;
693694
use prometheus_client::metrics::gauge::Gauge;
694695
use prometheus_client::metrics::histogram::Histogram;
@@ -710,6 +711,12 @@ pub mod network_metrics {
710711
req_inflights: Gauge,
711712
req_success: Counter,
712713
req_failed: Counter,
714+
715+
/// Number of items sent during watch stream initialization.
716+
watch_initialization_item_sent: Counter,
717+
718+
/// Number of items sent when data changes in a watch stream.
719+
watch_change_item_sent: Counter,
713720
}
714721

715722
impl NetworkMetrics {
@@ -733,6 +740,9 @@ pub mod network_metrics {
733740
req_inflights: Gauge::default(),
734741
req_success: Counter::default(),
735742
req_failed: Counter::default(),
743+
744+
watch_initialization_item_sent: Counter::default(),
745+
watch_change_item_sent: Counter::default(),
736746
};
737747

738748
let mut registry = load_global_registry();
@@ -760,6 +770,17 @@ pub mod network_metrics {
760770
);
761771
registry.register(key!("req_failed"), "req failed", metrics.req_failed.clone());
762772

773+
registry.register(
774+
key!("watch_initialization"),
775+
"Number of items sent during watch stream initialization",
776+
metrics.watch_initialization_item_sent.clone(),
777+
);
778+
registry.register(
779+
key!("watch_change"),
780+
"Number of items sent when data changes in a watch stream",
781+
metrics.watch_change_item_sent.clone(),
782+
);
783+
763784
metrics
764785
}
765786
}
@@ -790,6 +811,25 @@ pub mod network_metrics {
790811
NETWORK_METRICS.req_failed.inc();
791812
}
792813
}
814+
815+
/// Increment the number of items sent in a watch response.
816+
///
817+
/// It determines the type of item based on the response type.
818+
pub fn incr_watch_sent(resp: &WatchResponse) {
819+
if resp.is_initialization {
820+
incr_watch_sent_initialization_item();
821+
} else {
822+
incr_watch_sent_change_item();
823+
}
824+
}
825+
826+
pub fn incr_watch_sent_initialization_item() {
827+
NETWORK_METRICS.watch_initialization_item_sent.inc();
828+
}
829+
830+
pub fn incr_watch_sent_change_item() {
831+
NETWORK_METRICS.watch_change_item_sent.inc();
832+
}
793833
}
794834

795835
/// RAII metrics counter of in-flight requests count and delay.

src/meta/service/tests/it/api/http/metrics.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,5 +281,9 @@ async fn test_metrics() -> anyhow::Result<()> {
281281
// Raft storage metrics
282282
assert!(metric_keys.contains("metasrv_raft_storage_raft_store_write_failed_total"));
283283

284+
// Watch
285+
assert!(metric_keys.contains("metasrv_meta_network_watch_initialization_total"));
286+
assert!(metric_keys.contains("metasrv_meta_network_watch_change_total"));
287+
284288
Ok(())
285289
}

0 commit comments

Comments
 (0)