From b17e184e83adc88e9f433157780282d77fdb41ee Mon Sep 17 00:00:00 2001 From: Amnon Hanuhov Date: Mon, 10 Aug 2020 15:31:08 +0300 Subject: [PATCH] crimson/admin: Add Seastar metrics hook Signed-off-by: Amnon Hanuhov --- src/crimson/admin/osd_admin.cc | 31 +++++++++++++++++++++++++++++++ src/crimson/admin/osd_admin.h | 2 ++ 2 files changed, 33 insertions(+) diff --git a/src/crimson/admin/osd_admin.cc b/src/crimson/admin/osd_admin.cc index 4848897f290e2..cdb01f9ba43a8 100644 --- a/src/crimson/admin/osd_admin.cc +++ b/src/crimson/admin/osd_admin.cc @@ -9,6 +9,7 @@ #include #include #include +#include #include "common/config.h" #include "crimson/admin/admin_socket.h" @@ -157,4 +158,34 @@ public: }; template std::unique_ptr make_asok_hook(); +/** +* A Seastar admin hook: fetching the values of configured metrics +*/ +class SeastarMetricsHook : public AdminSocketHook { +public: + SeastarMetricsHook() : + AdminSocketHook("perf dump_seastar", + "", + "dump current configured seastar metrics and their values") + {} + seastar::future call(const cmdmap_t& cmdmap, + std::string_view format, + ceph::bufferlist&& input) const final + { + std::unique_ptr f{Formatter::create(format, "json-pretty", "json-pretty")}; + f->open_object_section("perf_dump_seastar"); + for (const auto& mf : seastar::scollectd::get_value_map()) { + for (const auto& m : mf.second) { + if (m.second && m.second->is_enabled()) { + auto& metric_function = m.second->get_function(); + f->dump_float(m.second->get_id().full_name(), metric_function().d()); + } + } + } + f->close_section(); + return seastar::make_ready_future(f.get()); + } +}; +template std::unique_ptr make_asok_hook(); + } // namespace crimson::admin diff --git a/src/crimson/admin/osd_admin.h b/src/crimson/admin/osd_admin.h index cf3c393b11b57..395042ea8cfa5 100644 --- a/src/crimson/admin/osd_admin.h +++ b/src/crimson/admin/osd_admin.h @@ -13,6 +13,8 @@ class FlushPgStatsHook; class OsdStatusHook; class SendBeaconHook; class DumpPGStateHistory; +class SeastarMetricsHook; + template std::unique_ptr make_asok_hook(Args&&... args); -- 2.39.5