From 108ac5ee78b31ce0b90970b25eea0e7f91bb97aa Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Mon, 10 Jul 2017 13:13:56 -0700 Subject: [PATCH] mon: maintain the "cluster" PerfCounters when using ceph-mgr instead of PGMonitor Fixes: http://tracker.ceph.com/issues/20562 Signed-off-by: Greg Farnum --- src/mon/MgrStatMonitor.cc | 47 +++++++++++++++++++++++++++++++++++++++ src/mon/MgrStatMonitor.h | 1 + 2 files changed, 48 insertions(+) diff --git a/src/mon/MgrStatMonitor.cc b/src/mon/MgrStatMonitor.cc index ab0d4623b87..5a81b931276 100644 --- a/src/mon/MgrStatMonitor.cc +++ b/src/mon/MgrStatMonitor.cc @@ -94,6 +94,52 @@ void MgrStatMonitor::update_from_paxos(bool *need_bootstrap) << " service_map e" << service_map.epoch << dendl; } check_subs(); + update_logger(); +} + +void MgrStatMonitor::update_logger() +{ + dout(20) << __func__ << dendl; + if (mon->osdmon()->osdmap.require_osd_release < CEPH_RELEASE_LUMINOUS) { + dout(20) << "yielding cluster perfcounter updates to pgmon" << dendl; + return; + } + + mon->cluster_logger->set(l_cluster_osd_bytes, digest.osd_sum.kb * 1024ull); + mon->cluster_logger->set(l_cluster_osd_bytes_used, + digest.osd_sum.kb_used * 1024ull); + mon->cluster_logger->set(l_cluster_osd_bytes_avail, + digest.osd_sum.kb_avail * 1024ull); + + mon->cluster_logger->set(l_cluster_num_pool, digest.pg_pool_sum.size()); + uint64_t num_pg = 0; + for (auto i : digest.num_pg_by_pool) { + num_pg += i.second; + } + mon->cluster_logger->set(l_cluster_num_pg, num_pg); + + unsigned active = 0, active_clean = 0, peering = 0; + for (auto p = digest.num_pg_by_state.begin(); + p != digest.num_pg_by_state.end(); + ++p) { + if (p->first & PG_STATE_ACTIVE) { + active += p->second; + if (p->first & PG_STATE_CLEAN) + active_clean += p->second; + } + if (p->first & PG_STATE_PEERING) + peering += p->second; + } + mon->cluster_logger->set(l_cluster_num_pg_active_clean, active_clean); + mon->cluster_logger->set(l_cluster_num_pg_active, active); + mon->cluster_logger->set(l_cluster_num_pg_peering, peering); + + mon->cluster_logger->set(l_cluster_num_object, digest.pg_sum.stats.sum.num_objects); + mon->cluster_logger->set(l_cluster_num_object_degraded, digest.pg_sum.stats.sum.num_objects_degraded); + mon->cluster_logger->set(l_cluster_num_object_misplaced, digest.pg_sum.stats.sum.num_objects_misplaced); + mon->cluster_logger->set(l_cluster_num_object_unfound, digest.pg_sum.stats.sum.num_objects_unfound); + mon->cluster_logger->set(l_cluster_num_bytes, digest.pg_sum.stats.sum.num_bytes); + } void MgrStatMonitor::create_pending() @@ -136,6 +182,7 @@ version_t MgrStatMonitor::get_trim_to() void MgrStatMonitor::on_active() { + update_logger(); } void MgrStatMonitor::get_health(list >& summary, diff --git a/src/mon/MgrStatMonitor.h b/src/mon/MgrStatMonitor.h index bd96ec8376e..ee58e293012 100644 --- a/src/mon/MgrStatMonitor.h +++ b/src/mon/MgrStatMonitor.h @@ -65,6 +65,7 @@ public: return digest.get_last_osd_stat_seq(osd); } + void update_logger(); void print_summary(Formatter *f, std::ostream *ss) const; -- 2.39.5