diff --git a/be/src/olap/tablet_manager.cpp b/be/src/olap/tablet_manager.cpp index cedeabb0fa..c35c5c88cd 100644 --- a/be/src/olap/tablet_manager.cpp +++ b/be/src/olap/tablet_manager.cpp @@ -47,6 +47,7 @@ #include "olap/utils.h" #include "util/doris_metrics.h" #include "util/file_utils.h" +#include "util/histogram.h" #include "util/path_util.h" #include "util/pretty_printer.h" #include "util/scoped_cleanup.h" @@ -964,7 +965,7 @@ OLAPStatus TabletManager::build_all_report_tablets_info(std::mapreport_all_tablets_requests_total->increment(1); - + HistogramStat tablet_version_num_hist; for (const auto& tablets_shard : _tablets_shards) { ReadLock rlock(tablets_shard.lock.get()); for (const auto& item : tablets_shard.tablet_map) { @@ -986,6 +987,9 @@ OLAPStatus TabletManager::build_all_report_tablets_info(std::maptablet_id() == tablet_id) { + tablet_version_num_hist.add(tablet_ptr->version_count()); + } } if (!t_tablet.tablet_infos.empty()) { @@ -993,6 +997,7 @@ OLAPStatus TabletManager::build_all_report_tablets_info(std::maptablet_version_num_distribution->set_histogram(tablet_version_num_hist); LOG(INFO) << "success to build all report tablets info. tablet_count=" << tablets_info->size(); return OLAP_SUCCESS; } diff --git a/be/src/util/doris_metrics.cpp b/be/src/util/doris_metrics.cpp index 4d267dafdc..a1d6763489 100644 --- a/be/src/util/doris_metrics.cpp +++ b/be/src/util/doris_metrics.cpp @@ -143,6 +143,8 @@ DEFINE_GAUGE_METRIC_PROTOTYPE_2ARG(tablet_base_max_compaction_score, MetricUnit: DEFINE_GAUGE_METRIC_PROTOTYPE_2ARG(compaction_used_permits, MetricUnit::NOUNIT); DEFINE_GAUGE_METRIC_PROTOTYPE_2ARG(compaction_waitting_permits, MetricUnit::NOUNIT); +DEFINE_HISTOGRAM_METRIC_PROTOTYPE_2ARG(tablet_version_num_distribution, MetricUnit::NOUNIT); + DEFINE_GAUGE_CORE_METRIC_PROTOTYPE_2ARG(push_request_write_bytes_per_second, MetricUnit::BYTES); DEFINE_GAUGE_CORE_METRIC_PROTOTYPE_2ARG(query_scan_bytes_per_second, MetricUnit::BYTES); DEFINE_GAUGE_CORE_METRIC_PROTOTYPE_2ARG(max_disk_io_util_percent, MetricUnit::PERCENT); @@ -250,6 +252,8 @@ DorisMetrics::DorisMetrics() : _metric_registry(_s_registry_name) { INT_GAUGE_METRIC_REGISTER(_server_metric_entity, compaction_used_permits); INT_GAUGE_METRIC_REGISTER(_server_metric_entity, compaction_waitting_permits); + HISTOGRAM_METRIC_REGISTER(_server_metric_entity, tablet_version_num_distribution); + INT_GAUGE_METRIC_REGISTER(_server_metric_entity, push_request_write_bytes_per_second); INT_GAUGE_METRIC_REGISTER(_server_metric_entity, query_scan_bytes_per_second); INT_GAUGE_METRIC_REGISTER(_server_metric_entity, max_disk_io_util_percent); diff --git a/be/src/util/doris_metrics.h b/be/src/util/doris_metrics.h index cab2873e8f..f5164f7867 100644 --- a/be/src/util/doris_metrics.h +++ b/be/src/util/doris_metrics.h @@ -140,6 +140,8 @@ public: // permits required by the compaction task which is waitting for permits IntGauge* compaction_waitting_permits; + HistogramMetric* tablet_version_num_distribution; + // The following metrics will be calculated // by metric calculator IntGauge* push_request_write_bytes_per_second; diff --git a/be/src/util/metrics.cpp b/be/src/util/metrics.cpp index fda8873bdf..816fb3d077 100644 --- a/be/src/util/metrics.cpp +++ b/be/src/util/metrics.cpp @@ -138,6 +138,12 @@ void HistogramMetric::merge(const HistogramMetric& other) { _stats.merge(other._stats); } +void HistogramMetric::set_histogram(const HistogramStat& stats) { + std::lock_guard l(_lock); + _stats.clear(); + _stats.merge(stats); +} + double HistogramMetric::median() const { return _stats.median(); } diff --git a/be/src/util/metrics.h b/be/src/util/metrics.h index bffc46caca..fca08cfd87 100644 --- a/be/src/util/metrics.h +++ b/be/src/util/metrics.h @@ -177,6 +177,7 @@ public: bool is_empty() const; void add(const uint64_t& value); void merge(const HistogramMetric& other); + void set_histogram(const HistogramStat& stats); uint64_t min() const { return _stats.min(); } uint64_t max() const { return _stats.max(); } @@ -286,6 +287,9 @@ public: #define DEFINE_GAUGE_METRIC_PROTOTYPE_5ARG(name, unit, desc, group, labels) \ DEFINE_METRIC_PROTOTYPE(name, MetricType::GAUGE, unit, desc, #group, labels, false) +#define DEFINE_HISTOGRAM_METRIC_PROTOTYPE_2ARG(name, unit) \ + DEFINE_METRIC_PROTOTYPE(name, MetricType::HISTOGRAM, unit, "", "", Labels(), false) + #define INT_COUNTER_METRIC_REGISTER(entity, metric) \ metric = (IntCounter*)(entity->register_metric(&METRIC_##metric)) @@ -301,6 +305,9 @@ public: #define INT_ATOMIC_COUNTER_METRIC_REGISTER(entity, metric) \ metric = (IntAtomicCounter*)(entity->register_metric(&METRIC_##metric)) +#define HISTOGRAM_METRIC_REGISTER(entity, metric) \ + metric = (HistogramMetric*)(entity->register_metric(&METRIC_##metric)) + #define METRIC_DEREGISTER(entity, metric) entity->deregister_metric(&METRIC_##metric) // For 'metrics' in MetricEntity.