You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2021/04/23 13:23:43 UTC

[incubator-doris] branch master updated: [Metric] Add metrics of tablet version num distribution (#5665)

This is an automated email from the ASF dual-hosted git repository.

morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git


The following commit(s) were added to refs/heads/master by this push:
     new ad3a0fb  [Metric] Add metrics of tablet version num distribution (#5665)
ad3a0fb is described below

commit ad3a0fb79dc61309a277cf2db8f382ca751bc93e
Author: weizuo93 <68...@users.noreply.github.com>
AuthorDate: Fri Apr 23 21:23:22 2021 +0800

    [Metric] Add metrics of tablet version num distribution (#5665)
    
    Add metrics (P50, P75, P90, P95, P99, etc.) to show the distribution of tablets version count.
    
    ```
    # TYPE doris_be_tablet_version_num_distribution histogram
    doris_be_tablet_version_num_distribution{quantile="0.50"} 9.21429
    doris_be_tablet_version_num_distribution{quantile="0.75"} 11.7949
    doris_be_tablet_version_num_distribution{quantile="0.90"} 13
    doris_be_tablet_version_num_distribution{quantile="0.95"} 13
    doris_be_tablet_version_num_distribution{quantile="0.99"} 13
    doris_be_tablet_version_num_distribution_sum 950
    doris_be_tablet_version_num_distribution_count 100
    ```
---
 be/src/olap/tablet_manager.cpp | 7 ++++++-
 be/src/util/doris_metrics.cpp  | 4 ++++
 be/src/util/doris_metrics.h    | 2 ++
 be/src/util/metrics.cpp        | 6 ++++++
 be/src/util/metrics.h          | 7 +++++++
 5 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/be/src/olap/tablet_manager.cpp b/be/src/olap/tablet_manager.cpp
index cedeabb..c35c5c8 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::map<TTabletId, TTab
     LOG(INFO) << "find expired transactions for " << expire_txn_map.size() << " tablets";
 
     DorisMetrics::instance()->report_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::map<TTabletId, TTab
                     expire_txn_map.erase(find);
                 }
                 t_tablet.tablet_infos.push_back(tablet_info);
+                if (tablet_ptr->tablet_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::map<TTabletId, TTab
             }
         }
     }
+    DorisMetrics::instance()->tablet_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 4d267da..a1d6763 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 cab2873..f5164f7 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 fda8873..816fb3d 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<SpinLock> 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 bffc46c..fca08cf 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<IntCounter>(&METRIC_##metric))
 
@@ -301,6 +305,9 @@ public:
 #define INT_ATOMIC_COUNTER_METRIC_REGISTER(entity, metric) \
     metric = (IntAtomicCounter*)(entity->register_metric<IntAtomicCounter>(&METRIC_##metric))
 
+#define HISTOGRAM_METRIC_REGISTER(entity, metric) \
+    metric = (HistogramMetric*)(entity->register_metric<HistogramMetric>(&METRIC_##metric))
+
 #define METRIC_DEREGISTER(entity, metric) entity->deregister_metric(&METRIC_##metric)
 
 // For 'metrics' in MetricEntity.

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org