From 4e17eee903914bf89633810ed0b38ad8c0c2e975 Mon Sep 17 00:00:00 2001 From: Avan Thakkar Date: Thu, 26 May 2022 00:25:17 +0530 Subject: [PATCH] exporter: improving logic for stats_period + cleanups Signed-off-by: Avan Thakkar --- src/common/options/ceph-exporter.yaml.in | 2 +- src/exporter/DaemonMetricCollector.cc | 19 ++++++++++++------- src/exporter/DaemonMetricCollector.h | 2 +- src/exporter/ceph_exporter.cc | 15 +++++++-------- src/exporter/http_server.cc | 4 ++-- src/exporter/http_server.h | 2 +- 6 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/common/options/ceph-exporter.yaml.in b/src/common/options/ceph-exporter.yaml.in index ac6a6ee9a4c92..d7c6b8cc7b9e5 100644 --- a/src/common/options/ceph-exporter.yaml.in +++ b/src/common/options/ceph-exporter.yaml.in @@ -36,4 +36,4 @@ options: desc: Time to wait before sending requests again to exporter server (seconds) default: 5 services: - - ceph-exporter \ No newline at end of file + - ceph-exporter diff --git a/src/exporter/DaemonMetricCollector.cc b/src/exporter/DaemonMetricCollector.cc index bc922da75f663..3283bce7b12a4 100644 --- a/src/exporter/DaemonMetricCollector.cc +++ b/src/exporter/DaemonMetricCollector.cc @@ -19,19 +19,20 @@ using json_array = boost::json::array; void DaemonMetricCollector::request_loop(boost::asio::steady_timer &timer) { timer.async_wait([&](const boost::system::error_code &e) { std::cerr << e << std::endl; + const auto start = std::chrono::system_clock::now(); update_sockets(); dump_asok_metrics(); - timer.expires_from_now(std::chrono::seconds(stats_period)); + const std::chrono::duration end = std::chrono::system_clock::now() - start; + timer.expires_from_now(std::chrono::seconds(std::max(stats_period, (int)std::round(end.count())))); request_loop(timer); }); } -void DaemonMetricCollector::set_sock_dir(std::string sock_dir) { - SOCKETDIR = sock_dir; +void DaemonMetricCollector::set_sock_dir() { + SOCKETDIR = g_conf().get_val("sock_dir"); } void DaemonMetricCollector::main() { - // TODO: let's do 5 for now and expose this to change in the future stats_period = g_conf().get_val("exporter_stats_period");; boost::asio::io_service io; boost::asio::steady_timer timer{io, std::chrono::seconds(stats_period)}; @@ -93,9 +94,10 @@ void DaemonMetricCollector::dump_asok_metrics() { for (auto &perf_counter : perf_group_object) { std::string perf_name = perf_counter.key().to_string(); json_object perf_info = perf_counter.value().as_object(); - int plimit = g_conf().get_val("exporter_prio_limit"); + int prio_limit = g_conf().get_val("exporter_prio_limit"); + // std::cout << prio_limit << std::endl; if (perf_info["priority"].as_int64() < - plimit) { + prio_limit) { continue; } std::string name = "ceph_" + perf_group + "_" + perf_name; @@ -187,6 +189,7 @@ void DaemonMetricCollector::dump_asok_metric(std::stringstream &ss, } } void DaemonMetricCollector::update_sockets() { + // std:: cout << SOCKETDIR << std::endl; clients.clear(); for (const auto &entry : std::filesystem::directory_iterator(SOCKETDIR)) { @@ -195,8 +198,10 @@ void DaemonMetricCollector::update_sockets() { std::string daemon_name = daemon_socket_name.substr(0, daemon_socket_name.size() - 5); if (clients.find(daemon_name) == clients.end() && - !(daemon_name.find("mgr") != std::string::npos)) { + !(daemon_name.find("mgr") != std::string::npos) && + !(daemon_name.find("client") != std::string::npos)) { AdminSocketClient sock(entry.path().string()); + std::cout << entry.path().string() << std::endl; clients.insert({daemon_name, std::move(sock)}); } } diff --git a/src/exporter/DaemonMetricCollector.h b/src/exporter/DaemonMetricCollector.h index 9d138ee81074d..5ae9e9e650197 100644 --- a/src/exporter/DaemonMetricCollector.h +++ b/src/exporter/DaemonMetricCollector.h @@ -15,7 +15,7 @@ class DaemonMetricCollector { public: void main(); - void set_sock_dir(std::string sock_path); + void set_sock_dir(); std::string get_metrics(); std::string SOCKETDIR = "/var/run/ceph/"; diff --git a/src/exporter/ceph_exporter.cc b/src/exporter/ceph_exporter.cc index 2dd0d2fa8f7e6..6eea558e5a084 100644 --- a/src/exporter/ceph_exporter.cc +++ b/src/exporter/ceph_exporter.cc @@ -15,10 +15,10 @@ static void usage() { std::cout << "usage: ceph-exporter [options]\n" << "options:\n" - " --sock-dir: The path to ceph daemons socket files dir\n" - " --addrs: Host ip address where exporter is deployed\n" - " --port: Port to deploy exporter on. Default is 9926\n" - " --prio-limit: Only perf counters greater than or equal to exporter_prio_limit are fetched\n" + " --sock-dir: The path to ceph daemons socket files dir\n" + " --addrs: Host ip address where exporter is deployed\n" + " --port: Port to deploy exporter on. Default is 9926\n" + " --prio-limit: Only perf counters greater than or equal to exporter_prio_limit are fetched\n" " --stats-period: Time to wait before sending requests again to exporter server (seconds)" << std::endl; generic_server_usage(); @@ -38,7 +38,7 @@ int main(int argc, char **argv) { auto cct = global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_DAEMON, 0); - std::string val, sock_dir, exporter_addrs, exporter_port, exporter_prio_limit; + std::string val, sock_dir, exporter_addrs, exporter_prio_limit; for (auto i = args.begin(); i != args.end();) { if (ceph_argparse_double_dash(args, i)) { break; @@ -49,7 +49,6 @@ int main(int argc, char **argv) { exporter_addrs = val; cct->_conf.set_val("exporter_addrs", val); } else if (ceph_argparse_witharg(args, i, &val, "--port", (char *)NULL)) { - exporter_port = val; cct->_conf.set_val("exporter_port", val); } else if (ceph_argparse_witharg(args, i, &val, "--prio-limit", (char *)NULL)) { exporter_prio_limit = val; @@ -63,9 +62,9 @@ int main(int argc, char **argv) { } common_init_finish(g_ceph_context); - boost::thread server_thread(http_server_thread_entrypoint, exporter_addrs, exporter_port); + boost::thread server_thread(http_server_thread_entrypoint, exporter_addrs); DaemonMetricCollector &collector = collector_instance(); - collector.set_sock_dir(sock_dir); + collector.set_sock_dir(); collector.main(); server_thread.join(); } diff --git a/src/exporter/http_server.cc b/src/exporter/http_server.cc index 2f746401a6260..248ef352fb87b 100644 --- a/src/exporter/http_server.cc +++ b/src/exporter/http_server.cc @@ -136,7 +136,7 @@ void http_server(tcp::acceptor &acceptor, tcp::socket &socket) { }); } -void http_server_thread_entrypoint(std::string exporter_addrs, std::string exporter_port) { +void http_server_thread_entrypoint(std::string exporter_addrs) { try { exporter_addrs = !exporter_addrs.empty() ? exporter_addrs : g_conf().get_val("exporter_addrs"); auto const address = net::ip::make_address(exporter_addrs); @@ -147,7 +147,7 @@ void http_server_thread_entrypoint(std::string exporter_addrs, std::string expor tcp::acceptor acceptor{ioc, {address, port}}; tcp::socket socket{ioc}; http_server(acceptor, socket); - std::cout << "Http server running on " << std::quoted(exporter_addrs + ":" + exporter_port) << std::endl; + std::cout << "Http server running on " << exporter_addrs + ":" << port << std::endl; ioc.run(); } catch (std::exception const &e) { std::cerr << "Error: " << e.what() << std::endl; diff --git a/src/exporter/http_server.h b/src/exporter/http_server.h index 4aa2c9b81a773..fa502bfa50634 100644 --- a/src/exporter/http_server.h +++ b/src/exporter/http_server.h @@ -2,4 +2,4 @@ #include -void http_server_thread_entrypoint(std::string exporter_addrs, std::string exporter_port); +void http_server_thread_entrypoint(std::string exporter_addrs); -- 2.39.5