enhance: add monitor metric for retrieve raw data (#40141)

#40078

Signed-off-by: luzhang <luzhang@zilliz.com>
Co-authored-by: luzhang <luzhang@zilliz.com>
This commit is contained in:
zhagnlu 2025-03-02 18:30:01 +08:00 committed by GitHub
parent 944f018375
commit 7a17fb68ec
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 42 additions and 1 deletions

View File

@ -183,6 +183,11 @@ std::map<std::string, std::string> scalarProportionLabels{
{"type", "scalar_proportion"}};
std::map<std::string, std::string> getVectorLatencyLabels{
{"type", "get_vector_latency"}};
std::map<std::string, std::string> retrieveGetTargetEntryLatencyLabels{
{"type", "retrieve_get_target_entry_latency"}};
std::map<std::string, std::string> 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<std::string, std::string> mmapAllocatedSpaceAnonLabel = {
{"type", "anon"}};

View File

@ -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

View File

@ -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<double, std::micro>(
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<proto::segcore::RetrieveResults>();
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<double, std::micro>(
get_target_entry_end - get_target_entry_start)
.count();
monitor::internal_core_retrieve_get_target_entry_latency.Observe(
get_entry_cost / 1000);
return results;
}

View File

@ -189,7 +189,17 @@ ReduceHelper::FillEntryData() {
for (auto search_result : search_results_) {
auto segment = static_cast<milvus::segcore::SegmentInterface*>(
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<double, std::micro>(get_target_entry_end -
get_target_entry_start)
.count();
monitor::internal_core_search_get_target_entry_latency.Observe(
get_entry_cost / 1000);
}
}