These are basic point-in-time cluster stats.
Signed-off-by: Sage Weil <sage@newdream.net>
l_mon_last,
};
-enum {
- l_cluster_first = 555000,
- l_cluster_last,
-};
-
void Monitor::init()
{
lock.Lock();
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();
}
#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;
#include "crush/CrushWrapper.h"
-#include "common/strtol.h"
#include "messages/MOSDFailure.h"
#include "messages/MOSDMap.h"
#include "messages/MOSDBoot.h"
#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"
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;
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);
#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
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()
send_pg_creates();
+ update_logger();
+
return true;
}
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);