Metrics.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. /*
  2. * Copyright (c)2013-2023 ZeroTier, Inc.
  3. *
  4. * Use of this software is governed by the Business Source License included
  5. * in the LICENSE.TXT file in the project's root directory.
  6. *
  7. * Change Date: 2025-01-01
  8. *
  9. * On the date above, in accordance with the Business Source License, use
  10. * of this software will be governed by version 2.0 of the Apache License.
  11. */
  12. #include <prometheus/simpleapi.h>
  13. namespace prometheus {
  14. namespace simpleapi {
  15. std::shared_ptr<Registry> registry_ptr = std::make_shared<Registry>();
  16. Registry& registry = *registry_ptr;
  17. SaveToFile saver;
  18. }
  19. }
  20. namespace ZeroTier {
  21. namespace Metrics {
  22. // Packet Type Counts
  23. prometheus::simpleapi::counter_family_t packets
  24. { "zt_packet_incoming", "incoming packet type counts"};
  25. // Incoming packets
  26. prometheus::simpleapi::counter_metric_t pkt_nop_in
  27. { packets.Add({{"packet_type", "nop"}, {"direction", "rx"}}) };
  28. prometheus::simpleapi::counter_metric_t pkt_error_in
  29. { packets.Add({{"packet_type", "error"}, {"direction", "rx"}}) };
  30. prometheus::simpleapi::counter_metric_t pkt_ack_in
  31. { packets.Add({{"packet_type", "ack"}, {"direction", "rx"}}) };
  32. prometheus::simpleapi::counter_metric_t pkt_qos_in
  33. { packets.Add({{"packet_type", "qos"}, {"direction", "rx"}}) };
  34. prometheus::simpleapi::counter_metric_t pkt_hello_in
  35. { packets.Add({{"packet_type", "hello"}, {"direction", "rx"}}) };
  36. prometheus::simpleapi::counter_metric_t pkt_ok_in
  37. { packets.Add({{"packet_type", "ok"}, {"direction", "rx"}}) };
  38. prometheus::simpleapi::counter_metric_t pkt_whois_in
  39. { packets.Add({{"packet_type", "whois"}, {"direction", "rx"}}) };
  40. prometheus::simpleapi::counter_metric_t pkt_rendezvous_in
  41. { packets.Add({{"packet_type", "rendezvous"}, {"direction", "rx"}}) };
  42. prometheus::simpleapi::counter_metric_t pkt_frame_in
  43. { packets.Add({{"packet_type", "frame"}, {"direction", "rx"}}) };
  44. prometheus::simpleapi::counter_metric_t pkt_ext_frame_in
  45. { packets.Add({{"packet_type", "ext_frame"}, {"direction", "rx"}}) };
  46. prometheus::simpleapi::counter_metric_t pkt_echo_in
  47. { packets.Add({{"packet_type", "echo"}, {"direction", "rx"}}) };
  48. prometheus::simpleapi::counter_metric_t pkt_multicast_like_in
  49. { packets.Add({{"packet_type", "multicast_like"}, {"direction", "rx"}}) };
  50. prometheus::simpleapi::counter_metric_t pkt_network_credentials_in
  51. { packets.Add({{"packet_type", "network_credentials"}, {"direction", "rx"}}) };
  52. prometheus::simpleapi::counter_metric_t pkt_network_config_request_in
  53. { packets.Add({{"packet_type", "network_config_request"}, {"direction", "rx"}}) };
  54. prometheus::simpleapi::counter_metric_t pkt_network_config_in
  55. { packets.Add({{"packet_type", "network_config"}, {"direction", "rx"}}) };
  56. prometheus::simpleapi::counter_metric_t pkt_multicast_gather_in
  57. { packets.Add({{"packet_type", "multicast_gather"}, {"direction", "rx"}}) };
  58. prometheus::simpleapi::counter_metric_t pkt_multicast_frame_in
  59. { packets.Add({{"packet_type", "multicast_frame"}, {"direction", "rx"}}) };
  60. prometheus::simpleapi::counter_metric_t pkt_push_direct_paths_in
  61. { packets.Add({{"packet_type", "push_direct_paths"}, {"direction", "rx"}}) };
  62. prometheus::simpleapi::counter_metric_t pkt_user_message_in
  63. { packets.Add({{"packet_type", "user_message"}, {"direction", "rx"}}) };
  64. prometheus::simpleapi::counter_metric_t pkt_remote_trace_in
  65. { packets.Add({{"packet_type", "remote_trace"}, {"direction", "rx"}}) };
  66. prometheus::simpleapi::counter_metric_t pkt_path_negotiation_request_in
  67. { packets.Add({{"packet_type", "path_negotiation_request"}, {"direction", "rx"}}) };
  68. // Outgoing packets
  69. prometheus::simpleapi::counter_metric_t pkt_nop_out
  70. { packets.Add({{"packet_type", "nop"}, {"direction", "tx"}}) };
  71. prometheus::simpleapi::counter_metric_t pkt_error_out
  72. { packets.Add({{"packet_type", "error"}, {"direction", "tx"}}) };
  73. prometheus::simpleapi::counter_metric_t pkt_ack_out
  74. { packets.Add({{"packet_type", "ack"}, {"direction", "tx"}}) };
  75. prometheus::simpleapi::counter_metric_t pkt_qos_out
  76. { packets.Add({{"packet_type", "qos"}, {"direction", "tx"}}) };
  77. prometheus::simpleapi::counter_metric_t pkt_hello_out
  78. { packets.Add({{"packet_type", "hello"}, {"direction", "tx"}}) };
  79. prometheus::simpleapi::counter_metric_t pkt_ok_out
  80. { packets.Add({{"packet_type", "ok"}, {"direction", "tx"}}) };
  81. prometheus::simpleapi::counter_metric_t pkt_whois_out
  82. { packets.Add({{"packet_type", "whois"}, {"direction", "tx"}}) };
  83. prometheus::simpleapi::counter_metric_t pkt_rendezvous_out
  84. { packets.Add({{"packet_type", "rendezvous"}, {"direction", "tx"}}) };
  85. prometheus::simpleapi::counter_metric_t pkt_frame_out
  86. { packets.Add({{"packet_type", "frame"}, {"direction", "tx"}}) };
  87. prometheus::simpleapi::counter_metric_t pkt_ext_frame_out
  88. { packets.Add({{"packet_type", "ext_frame"}, {"direction", "tx"}}) };
  89. prometheus::simpleapi::counter_metric_t pkt_echo_out
  90. { packets.Add({{"packet_type", "echo"}, {"direction", "tx"}}) };
  91. prometheus::simpleapi::counter_metric_t pkt_multicast_like_out
  92. { packets.Add({{"packet_type", "multicast_like"}, {"direction", "tx"}}) };
  93. prometheus::simpleapi::counter_metric_t pkt_network_credentials_out
  94. { packets.Add({{"packet_type", "network_credentials"}, {"direction", "tx"}}) };
  95. prometheus::simpleapi::counter_metric_t pkt_network_config_request_out
  96. { packets.Add({{"packet_type", "network_config_request"}, {"direction", "tx"}}) };
  97. prometheus::simpleapi::counter_metric_t pkt_network_config_out
  98. { packets.Add({{"packet_type", "network_config"}, {"direction", "tx"}}) };
  99. prometheus::simpleapi::counter_metric_t pkt_multicast_gather_out
  100. { packets.Add({{"packet_type", "multicast_gather"}, {"direction", "tx"}}) };
  101. prometheus::simpleapi::counter_metric_t pkt_multicast_frame_out
  102. { packets.Add({{"packet_type", "multicast_frame"}, {"direction", "tx"}}) };
  103. prometheus::simpleapi::counter_metric_t pkt_push_direct_paths_out
  104. { packets.Add({{"packet_type", "push_direct_paths"}, {"direction", "tx"}}) };
  105. prometheus::simpleapi::counter_metric_t pkt_user_message_out
  106. { packets.Add({{"packet_type", "user_message"}, {"direction", "tx"}}) };
  107. prometheus::simpleapi::counter_metric_t pkt_remote_trace_out
  108. { packets.Add({{"packet_type", "remote_trace"}, {"direction", "tx"}}) };
  109. prometheus::simpleapi::counter_metric_t pkt_path_negotiation_request_out
  110. { packets.Add({{"packet_type", "path_negotiation_request"}, {"direction", "tx"}}) };
  111. // Packet Error Counts
  112. prometheus::simpleapi::counter_family_t packet_errors
  113. { "zt_packet_incoming_error", "incoming packet errors"};
  114. // Incoming Error Counts
  115. prometheus::simpleapi::counter_metric_t pkt_error_obj_not_found_in
  116. { packet_errors.Add({{"error_type", "obj_not_found"}, {"direction", "rx"}}) };
  117. prometheus::simpleapi::counter_metric_t pkt_error_unsupported_op_in
  118. { packet_errors.Add({{"error_type", "unsupported_operation"}, {"direction", "rx"}}) };
  119. prometheus::simpleapi::counter_metric_t pkt_error_identity_collision_in
  120. { packet_errors.Add({{"error_type", "identity_collision"}, {"direction", "rx"}}) };
  121. prometheus::simpleapi::counter_metric_t pkt_error_need_membership_cert_in
  122. { packet_errors.Add({{"error_type", "need_membership_certificate"}, {"direction", "rx"}}) };
  123. prometheus::simpleapi::counter_metric_t pkt_error_network_access_denied_in
  124. { packet_errors.Add({{"error_type", "network_access_denied"}, {"direction", "rx"}}) };
  125. prometheus::simpleapi::counter_metric_t pkt_error_unwanted_multicast_in
  126. { packet_errors.Add({{"error_type", "unwanted_multicast"}, {"direction", "rx"}}) };
  127. prometheus::simpleapi::counter_metric_t pkt_error_authentication_required_in
  128. { packet_errors.Add({{"error_type", "authentication_required"}, {"direction", "rx"}}) };
  129. prometheus::simpleapi::counter_metric_t pkt_error_internal_server_error_in
  130. { packet_errors.Add({{"error_type", "internal_server_error"}, {"direction", "rx"}}) };
  131. // Outgoing Error Counts
  132. prometheus::simpleapi::counter_metric_t pkt_error_obj_not_found_out
  133. { packet_errors.Add({{"error_type", "obj_not_found"}, {"direction", "tx"}}) };
  134. prometheus::simpleapi::counter_metric_t pkt_error_unsupported_op_out
  135. { packet_errors.Add({{"error_type", "unsupported_operation"}, {"direction", "tx"}}) };
  136. prometheus::simpleapi::counter_metric_t pkt_error_identity_collision_out
  137. { packet_errors.Add({{"error_type", "identity_collision"}, {"direction", "tx"}}) };
  138. prometheus::simpleapi::counter_metric_t pkt_error_need_membership_cert_out
  139. { packet_errors.Add({{"error_type", "need_membership_certificate"}, {"direction", "tx"}}) };
  140. prometheus::simpleapi::counter_metric_t pkt_error_network_access_denied_out
  141. { packet_errors.Add({{"error_type", "network_access_denied"}, {"direction", "tx"}}) };
  142. prometheus::simpleapi::counter_metric_t pkt_error_unwanted_multicast_out
  143. { packet_errors.Add({{"error_type", "unwanted_multicast"}, {"direction", "tx"}}) };
  144. prometheus::simpleapi::counter_metric_t pkt_error_authentication_required_out
  145. { packet_errors.Add({{"error_type", "authentication_required"}, {"direction", "tx"}}) };
  146. prometheus::simpleapi::counter_metric_t pkt_error_internal_server_error_out
  147. { packet_errors.Add({{"error_type", "internal_server_error"}, {"direction", "tx"}}) };
  148. // Data Sent/Received Metrics
  149. prometheus::simpleapi::counter_metric_t udp_send
  150. { "zt_udp_data_sent", "number of bytes ZeroTier has sent via UDP" };
  151. prometheus::simpleapi::counter_metric_t udp_recv
  152. { "zt_udp_data_recv", "number of bytes ZeroTier has received via UDP" };
  153. prometheus::simpleapi::counter_metric_t tcp_send
  154. { "zt_tcp_data_sent", "number of bytes ZeroTier has sent via TCP" };
  155. prometheus::simpleapi::counter_metric_t tcp_recv
  156. { "zt_tcp_data_recv", "number of bytes ZeroTier has received via TCP" };
  157. // General Controller Metrics
  158. prometheus::simpleapi::gauge_metric_t network_count
  159. {"controller_network_count", "number of networks the controller is serving"};
  160. prometheus::simpleapi::gauge_metric_t member_count
  161. {"controller_member_count", "number of network members the controller is serving"};
  162. prometheus::simpleapi::counter_metric_t network_changes
  163. {"controller_network_change_count", "number of times a network configuration is changed"};
  164. prometheus::simpleapi::counter_metric_t member_changes
  165. {"controller_member_change_count", "number of times a network member configuration is changed"};
  166. prometheus::simpleapi::counter_metric_t member_auths
  167. {"controller_member_auth_count", "number of network member auths"};
  168. prometheus::simpleapi::counter_metric_t member_deauths
  169. {"controller_member_deauth_count", "number of network member deauths"};
  170. #ifdef ZT_CONTROLLER_USE_LIBPQ
  171. // Central Controller Metrics
  172. prometheus::simpleapi::counter_metric_t pgsql_mem_notification
  173. { "controller_pgsql_member_notifications_received", "number of member change notifications received via pgsql NOTIFY" };
  174. prometheus::simpleapi::counter_metric_t pgsql_net_notification
  175. { "controller_pgsql_network_notifications_received", "number of network change notifications received via pgsql NOTIFY" };
  176. prometheus::simpleapi::counter_metric_t pgsql_node_checkin
  177. { "controller_pgsql_node_checkin_count", "number of node check-ins (pgsql)" };
  178. prometheus::simpleapi::counter_metric_t redis_mem_notification
  179. { "controller_redis_member_notifications_received", "number of member change notifications received via redis" };
  180. prometheus::simpleapi::counter_metric_t redis_net_notification
  181. { "controller_redis_network_notifications_received", "number of network change notifications received via redis" };
  182. prometheus::simpleapi::counter_metric_t redis_node_checkin
  183. { "controller_redis_node_checkin_count", "number of node check-ins (redis)" };
  184. // Central DB Pool Metrics
  185. prometheus::simpleapi::counter_metric_t conn_counter
  186. { "controller_pgsql_connections_created", "number of pgsql connections created"};
  187. prometheus::simpleapi::counter_metric_t max_pool_size
  188. { "controller_pgsql_max_conn_pool_size", "max connection pool size for postgres"};
  189. prometheus::simpleapi::counter_metric_t min_pool_size
  190. { "controller_pgsql_min_conn_pool_size", "minimum connection pool size for postgres" };
  191. prometheus::simpleapi::gauge_metric_t pool_avail
  192. { "controller_pgsql_available_conns", "number of available postgres connections" };
  193. prometheus::simpleapi::gauge_metric_t pool_in_use
  194. { "controller_pgsql_in_use_conns", "number of postgres database connections in use" };
  195. prometheus::simpleapi::counter_metric_t pool_errors
  196. { "controller_pgsql_connection_errors", "number of connection errors the connection pool has seen" };
  197. #endif
  198. }
  199. }