]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: report basic cluster stats via perfcounters
authorSage Weil <sage@newdream.net>
Thu, 8 Dec 2011 20:53:14 +0000 (12:53 -0800)
committerSage Weil <sage@newdream.net>
Mon, 12 Dec 2011 17:24:27 +0000 (09:24 -0800)
These are basic point-in-time cluster stats.

Signed-off-by: Sage Weil <sage@newdream.net>
src/mon/Monitor.cc
src/mon/Monitor.h
src/mon/OSDMonitor.cc
src/mon/OSDMonitor.h
src/mon/PGMonitor.cc
src/mon/PGMonitor.h

index 2194fa229fbf32fe4e8831b69a0f4088b7a3d7fb..46b646261fd476eb853bbd72da2872727e91cc1e 100644 (file)
@@ -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();
   }
 
index c2a4c910ad5c86047a67f6f83a172f55fb329c21..01218d73f2c85d3cd46c6301b502870b380a52f8 100644 (file)
 
 #include <memory>
 
+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;
index b29473fc7d83c5c025b495141815da04ef90eaae..5a7ec946d2dc2cb3a253ecbdc9db94e28367afb2 100644 (file)
@@ -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;
index 294214885ea3c688c02c8fdb1b3bb0cc499128fd..d7fc941b225f193fc0d6ff8e1d5484de6e02b0e1 100644 (file)
@@ -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);
index 8f61c7c36e8d25220435785fd64766afc70153db..d4f31f1c81821294b0386d8453160912e2a28a26 100644 (file)
@@ -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<int,int>::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;
 }
 
index a9514feff34d1b3f78a2f4b5cce608e39f3d18f2..64982f9e63c44233e03508009d3d689d522749aa 100644 (file)
@@ -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);