]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
exporter: improving logic for stats_period + cleanups
authorAvan Thakkar <athakkar@redhat.com>
Wed, 25 May 2022 18:55:17 +0000 (00:25 +0530)
committerAvan Thakkar <athakkar@redhat.com>
Mon, 20 Jun 2022 18:24:54 +0000 (23:54 +0530)
Signed-off-by: Avan Thakkar <athakkar@redhat.com>
src/common/options/ceph-exporter.yaml.in
src/exporter/DaemonMetricCollector.cc
src/exporter/DaemonMetricCollector.h
src/exporter/ceph_exporter.cc
src/exporter/http_server.cc
src/exporter/http_server.h

index ac6a6ee9a4c92158f83903a9543e537361f69129..d7c6b8cc7b9e50b06b866b480f3fb5b1a087b667 100644 (file)
@@ -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
index bc922da75f663fceadd08139746fb42fa2f41f56..3283bce7b12a458baf4cde4cf01511c2518e3a88 100644 (file)
@@ -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<double> 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<std::string>("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<int64_t>("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<int64_t>("exporter_prio_limit");
+        int prio_limit = g_conf().get_val<int64_t>("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)});
       }
     }
index 9d138ee81074df15dc8c72255c7df1b10e3a1a01..5ae9e9e650197de0aad9ab965946ad3a2dd2b62d 100644 (file)
@@ -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/";
 
index 2dd0d2fa8f7e600977c448b09ab4f3e4e904f5d9..6eea558e5a084798184a44fb0b04d82c101dfe5b 100644 (file)
 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();
 }
index 2f746401a62603a3fb17a00dd0beeeb3b723578c..248ef352fb87b211a86180f6c2c4563263c020e0 100644 (file)
@@ -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<std::string>("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;
index 4aa2c9b81a773bdfbc0e2f78e9cfddf960210e89..fa502bfa5063460edcc671655b01edf303530fff 100644 (file)
@@ -2,4 +2,4 @@
 
 #include <string>
 
-void http_server_thread_entrypoint(std::string exporter_addrs, std::string exporter_port);
+void http_server_thread_entrypoint(std::string exporter_addrs);