From: Sage Weil Date: Thu, 8 Dec 2011 20:53:14 +0000 (-0800) Subject: mon: report basic cluster stats via perfcounters X-Git-Tag: v0.40~187^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ac31d526d2e48f5edd980d224f8f6c3a27584b51;p=ceph.git mon: report basic cluster stats via perfcounters These are basic point-in-time cluster stats. Signed-off-by: Sage Weil --- diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index 2194fa229fbf..46b646261fd4 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -176,11 +176,6 @@ enum { l_mon_last, }; -enum { - l_cluster_first = 555000, - l_cluster_last, -}; - void Monitor::init() { lock.Lock(); @@ -200,7 +195,22 @@ void Monitor::init() assert(!cluster_logger); { PerfCountersBuilder pcb(g_ceph_context, "cluster", l_cluster_first, l_cluster_last); - // ... + pcb.add_u64(l_cluster_num_osd, "num_osd"); + pcb.add_u64(l_cluster_num_osd_up, "num_osd_up"); + pcb.add_u64(l_cluster_num_osd_in, "num_osd_in"); + pcb.add_u64(l_cluster_osd_epoch, "osd_epoch"); + pcb.add_u64(l_cluster_osd_kb, "osd_kb"); + pcb.add_u64(l_cluster_osd_kb_used, "osd_kb_used"); + pcb.add_u64(l_cluster_osd_kb_avail, "osd_kb_avail"); + pcb.add_u64(l_cluster_num_pool, "num_pool"); + pcb.add_u64(l_cluster_num_pg, "num_pg"); + pcb.add_u64(l_cluster_num_pg_active_clean, "num_pg_active_clean"); + pcb.add_u64(l_cluster_num_pg_active, "num_pg_active"); + pcb.add_u64(l_cluster_num_pg_peering, "num_pg_peering"); + pcb.add_u64(l_cluster_num_object, "num_object"); + pcb.add_u64(l_cluster_num_object_degraded, "num_object_degraded"); + pcb.add_u64(l_cluster_num_object_unfound, "num_object_unfound"); + pcb.add_u64(l_cluster_num_kb, "num_kb"); cluster_logger = pcb.create_perf_counters(); } diff --git a/src/mon/Monitor.h b/src/mon/Monitor.h index c2a4c910ad5c..01218d73f2c8 100644 --- a/src/mon/Monitor.h +++ b/src/mon/Monitor.h @@ -44,6 +44,27 @@ #include +enum { + l_cluster_first = 555000, + l_cluster_num_osd, + l_cluster_num_osd_up, + l_cluster_num_osd_in, + l_cluster_osd_epoch, + l_cluster_osd_kb, + l_cluster_osd_kb_used, + l_cluster_osd_kb_avail, + l_cluster_num_pool, + l_cluster_num_pg, + l_cluster_num_pg_active_clean, + l_cluster_num_pg_active, + l_cluster_num_pg_peering, + l_cluster_num_object, + l_cluster_num_object_degraded, + l_cluster_num_object_unfound, + l_cluster_num_kb, + l_cluster_last, +}; + class MonitorStore; class PaxosService; diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index b29473fc7d83..5a7ec946d2dc 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -21,7 +21,6 @@ #include "crush/CrushWrapper.h" -#include "common/strtol.h" #include "messages/MOSDFailure.h" #include "messages/MOSDMap.h" #include "messages/MOSDBoot.h" @@ -35,6 +34,8 @@ #include "common/Timer.h" #include "common/ceph_argparse.h" +#include "common/perf_counters.h" +#include "common/strtol.h" #include "common/config.h" #include "common/errno.h" @@ -144,10 +145,26 @@ bool OSDMonitor::update_from_paxos() check_subs(); share_map_with_random_osd(); + update_logger(); return true; } +void OSDMonitor::on_active() +{ + update_logger(); +} + +void OSDMonitor::update_logger() +{ + dout(10) << "update_logger" << dendl; + + mon->cluster_logger->set(l_cluster_num_osd, osdmap.get_num_osds()); + mon->cluster_logger->set(l_cluster_num_osd_up, osdmap.get_num_up_osds()); + mon->cluster_logger->set(l_cluster_num_osd_in, osdmap.get_num_in_osds()); + mon->cluster_logger->set(l_cluster_osd_epoch, osdmap.get_epoch()); +} + void OSDMonitor::remove_redundant_pg_temp() { dout(10) << "remove_redundant_pg_temp" << dendl; diff --git a/src/mon/OSDMonitor.h b/src/mon/OSDMonitor.h index 294214885ea3..d7fc941b225f 100644 --- a/src/mon/OSDMonitor.h +++ b/src/mon/OSDMonitor.h @@ -56,9 +56,12 @@ private: bool update_from_paxos(); void create_pending(); // prepare a new pending void encode_pending(bufferlist &bl); + void on_active(); void share_map_with_random_osd(); + void update_logger(); + void handle_query(PaxosServiceMessage *m); bool preprocess_query(PaxosServiceMessage *m); // true if processed. bool prepare_update(PaxosServiceMessage *m); diff --git a/src/mon/PGMonitor.cc b/src/mon/PGMonitor.cc index 8f61c7c36e8d..d4f31f1c8182 100644 --- a/src/mon/PGMonitor.cc +++ b/src/mon/PGMonitor.cc @@ -33,6 +33,7 @@ #include "common/Timer.h" #include "common/Formatter.h" #include "common/ceph_argparse.h" +#include "common/perf_counters.h" #include "osd/osd_types.h" #include "osd/PG.h" // yuck @@ -95,6 +96,41 @@ void PGMonitor::on_active() if (mon->is_leader()) { check_osd_map(mon->osdmon()->osdmap.epoch); } + + update_logger(); +} + +void PGMonitor::update_logger() +{ + dout(10) << "update_logger" << dendl; + + mon->cluster_logger->set(l_cluster_osd_kb, pg_map.osd_sum.kb); + mon->cluster_logger->set(l_cluster_osd_kb_used, pg_map.osd_sum.kb_used); + mon->cluster_logger->set(l_cluster_osd_kb_avail, pg_map.osd_sum.kb_avail); + + mon->cluster_logger->set(l_cluster_num_pool, pg_map.pg_pool_sum.size()); + mon->cluster_logger->set(l_cluster_num_pg, pg_map.pg_stat.size()); + + unsigned active = 0, active_clean = 0, peering = 0; + for (hash_map::iterator p = pg_map.num_pg_by_state.begin(); + p != pg_map.num_pg_by_state.end(); + ++p) { + if (p->second & PG_STATE_ACTIVE) { + active++; + if (p->second & PG_STATE_CLEAN) + active_clean++; + } + if (p->second & PG_STATE_PEERING) + peering++; + } + 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, pg_map.pg_sum.stats.sum.num_objects); + mon->cluster_logger->set(l_cluster_num_object_degraded, pg_map.pg_sum.stats.sum.num_objects_degraded); + mon->cluster_logger->set(l_cluster_num_object_unfound, pg_map.pg_sum.stats.sum.num_objects_unfound); + mon->cluster_logger->set(l_cluster_num_kb, pg_map.pg_sum.stats.sum.num_kb); } void PGMonitor::tick() @@ -185,6 +221,8 @@ bool PGMonitor::update_from_paxos() send_pg_creates(); + update_logger(); + return true; } diff --git a/src/mon/PGMonitor.h b/src/mon/PGMonitor.h index a9514feff34d..64982f9e63c4 100644 --- a/src/mon/PGMonitor.h +++ b/src/mon/PGMonitor.h @@ -52,6 +52,8 @@ private: void create_pending(); // prepare a new pending void encode_pending(bufferlist &bl); // propose pending update to peers + void update_logger(); + bool preprocess_query(PaxosServiceMessage *m); // true if processed. bool prepare_update(PaxosServiceMessage *m);