From 7a17fb68ec16e2f84331c0dc00925ec3c8a21609 Mon Sep 17 00:00:00 2001 From: zhagnlu <1542303831@qq.com> Date: Sun, 2 Mar 2025 18:30:01 +0800 Subject: [PATCH] enhance: add monitor metric for retrieve raw data (#40141) #40078 Signed-off-by: luzhang Co-authored-by: luzhang --- .../core/src/monitor/prometheus_client.cpp | 12 +++++++++++- internal/core/src/monitor/prometheus_client.h | 2 ++ .../core/src/segcore/SegmentInterface.cpp | 19 +++++++++++++++++++ internal/core/src/segcore/reduce/Reduce.cpp | 10 ++++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/internal/core/src/monitor/prometheus_client.cpp b/internal/core/src/monitor/prometheus_client.cpp index 8ca4cb183d..dca0ab677e 100644 --- a/internal/core/src/monitor/prometheus_client.cpp +++ b/internal/core/src/monitor/prometheus_client.cpp @@ -183,6 +183,11 @@ std::map scalarProportionLabels{ {"type", "scalar_proportion"}}; std::map getVectorLatencyLabels{ {"type", "get_vector_latency"}}; +std::map retrieveGetTargetEntryLatencyLabels{ + {"type", "retrieve_get_target_entry_latency"}}; +std::map searchGetTargetEntryLatencyLabels{ + {"type", "search_get_target_entry_latency"}}; + DEFINE_PROMETHEUS_HISTOGRAM_FAMILY(internal_core_search_latency, "[cpp]latency(us) of search on segment") DEFINE_PROMETHEUS_HISTOGRAM(internal_core_search_latency_scalar, @@ -205,7 +210,12 @@ DEFINE_PROMETHEUS_HISTOGRAM_WITH_BUCKETS( DEFINE_PROMETHEUS_HISTOGRAM(internal_core_get_vector_latency, internal_core_search_latency, getVectorLatencyLabels) - +DEFINE_PROMETHEUS_HISTOGRAM(internal_core_retrieve_get_target_entry_latency, + internal_core_search_latency, + retrieveGetTargetEntryLatencyLabels) +DEFINE_PROMETHEUS_HISTOGRAM(internal_core_search_get_target_entry_latency, + internal_core_search_latency, + searchGetTargetEntryLatencyLabels) // mmap metrics std::map mmapAllocatedSpaceAnonLabel = { {"type", "anon"}}; diff --git a/internal/core/src/monitor/prometheus_client.h b/internal/core/src/monitor/prometheus_client.h index 3884dd74e0..5eaefee356 100644 --- a/internal/core/src/monitor/prometheus_client.h +++ b/internal/core/src/monitor/prometheus_client.h @@ -139,5 +139,7 @@ DECLARE_PROMETHEUS_HISTOGRAM(internal_core_search_latency_groupby); DECLARE_PROMETHEUS_HISTOGRAM(internal_core_search_latency_iterative_filter); DECLARE_PROMETHEUS_HISTOGRAM(internal_core_search_latency_scalar_proportion); DECLARE_PROMETHEUS_HISTOGRAM(internal_core_get_vector_latency); +DECLARE_PROMETHEUS_HISTOGRAM(internal_core_retrieve_get_target_entry_latency); +DECLARE_PROMETHEUS_HISTOGRAM(internal_core_search_get_target_entry_latency); } // namespace milvus::monitor diff --git a/internal/core/src/segcore/SegmentInterface.cpp b/internal/core/src/segcore/SegmentInterface.cpp index f9c9ab6157..c7ea1350ac 100644 --- a/internal/core/src/segcore/SegmentInterface.cpp +++ b/internal/core/src/segcore/SegmentInterface.cpp @@ -125,6 +125,9 @@ SegmentInternalInterface::Retrieve(tracer::TraceContext* trace_ctx, results->mutable_offset()->Add(retrieve_results.result_offsets_.begin(), retrieve_results.result_offsets_.end()); + + std::chrono::high_resolution_clock::time_point get_target_entry_start = + std::chrono::high_resolution_clock::now(); FillTargetEntry(trace_ctx, plan, results, @@ -132,6 +135,13 @@ SegmentInternalInterface::Retrieve(tracer::TraceContext* trace_ctx, retrieve_results.result_offsets_.size(), ignore_non_pk, true); + std::chrono::high_resolution_clock::time_point get_target_entry_end = + std::chrono::high_resolution_clock::now(); + double get_entry_cost = std::chrono::duration( + get_target_entry_end - get_target_entry_start) + .count(); + monitor::internal_core_retrieve_get_target_entry_latency.Observe( + get_entry_cost / 1000); return results; } @@ -242,7 +252,16 @@ SegmentInternalInterface::Retrieve(tracer::TraceContext* trace_ctx, std::shared_lock lck(mutex_); tracer::AutoSpan span("RetrieveByOffsets", tracer::GetRootSpan()); auto results = std::make_unique(); + std::chrono::high_resolution_clock::time_point get_target_entry_start = + std::chrono::high_resolution_clock::now(); FillTargetEntry(trace_ctx, Plan, results, offsets, size, false, false); + std::chrono::high_resolution_clock::time_point get_target_entry_end = + std::chrono::high_resolution_clock::now(); + double get_entry_cost = std::chrono::duration( + get_target_entry_end - get_target_entry_start) + .count(); + monitor::internal_core_retrieve_get_target_entry_latency.Observe( + get_entry_cost / 1000); return results; } diff --git a/internal/core/src/segcore/reduce/Reduce.cpp b/internal/core/src/segcore/reduce/Reduce.cpp index fb5f4c88ce..6bdc8cc130 100644 --- a/internal/core/src/segcore/reduce/Reduce.cpp +++ b/internal/core/src/segcore/reduce/Reduce.cpp @@ -189,7 +189,17 @@ ReduceHelper::FillEntryData() { for (auto search_result : search_results_) { auto segment = static_cast( search_result->segment_); + std::chrono::high_resolution_clock::time_point get_target_entry_start = + std::chrono::high_resolution_clock::now(); segment->FillTargetEntry(plan_, *search_result); + std::chrono::high_resolution_clock::time_point get_target_entry_end = + std::chrono::high_resolution_clock::now(); + double get_entry_cost = + std::chrono::duration(get_target_entry_end - + get_target_entry_start) + .count(); + monitor::internal_core_search_get_target_entry_latency.Observe( + get_entry_cost / 1000); } }