send_internal_metrics.c 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #include "exporting_engine.h"
  3. /**
  4. * Create a chart for the main exporting thread CPU usage
  5. *
  6. * @param st_rusage the thead CPU usage chart
  7. * @param rd_user a dimension for user CPU usage
  8. * @param rd_system a dimension for system CPU usage
  9. */
  10. void create_main_rusage_chart(RRDSET **st_rusage, RRDDIM **rd_user, RRDDIM **rd_system)
  11. {
  12. if (!global_statistics_enabled)
  13. return;
  14. if (*st_rusage && *rd_user && *rd_system)
  15. return;
  16. *st_rusage = rrdset_create_localhost(
  17. "netdata",
  18. "exporting_main_thread_cpu",
  19. NULL,
  20. "exporting",
  21. "netdata.exporting_cpu_usage",
  22. "Netdata Main Exporting Thread CPU Usage",
  23. "milliseconds/s",
  24. "exporting",
  25. NULL,
  26. 130600,
  27. localhost->rrd_update_every,
  28. RRDSET_TYPE_STACKED);
  29. *rd_user = rrddim_add(*st_rusage, "user", NULL, 1, 1000, RRD_ALGORITHM_INCREMENTAL);
  30. *rd_system = rrddim_add(*st_rusage, "system", NULL, 1, 1000, RRD_ALGORITHM_INCREMENTAL);
  31. }
  32. /**
  33. * Send the main exporting thread CPU usage
  34. *
  35. * @param st_rusage a thead CPU usage chart
  36. * @param rd_user a dimension for user CPU usage
  37. * @param rd_system a dimension for system CPU usage
  38. */
  39. void send_main_rusage(RRDSET *st_rusage, RRDDIM *rd_user, RRDDIM *rd_system)
  40. {
  41. if (!global_statistics_enabled)
  42. return;
  43. struct rusage thread;
  44. getrusage(RUSAGE_THREAD, &thread);
  45. rrddim_set_by_pointer(st_rusage, rd_user, thread.ru_utime.tv_sec * 1000000ULL + thread.ru_utime.tv_usec);
  46. rrddim_set_by_pointer(st_rusage, rd_system, thread.ru_stime.tv_sec * 1000000ULL + thread.ru_stime.tv_usec);
  47. rrdset_done(st_rusage);
  48. }
  49. /**
  50. * Send internal metrics for an instance
  51. *
  52. * Send performance metrics for the operation of exporting engine itself to the Netdata database.
  53. *
  54. * @param instance an instance data structure.
  55. */
  56. void send_internal_metrics(struct instance *instance)
  57. {
  58. if (!global_statistics_enabled)
  59. return;
  60. struct stats *stats = &instance->stats;
  61. // ------------------------------------------------------------------------
  62. // create charts for monitoring the exporting operations
  63. if (!stats->initialized) {
  64. char id[RRD_ID_LENGTH_MAX + 1];
  65. snprintf(id, RRD_ID_LENGTH_MAX, "exporting_%s_metrics", instance->config.name);
  66. netdata_fix_chart_id(id);
  67. stats->st_metrics = rrdset_create_localhost(
  68. "netdata",
  69. id,
  70. NULL,
  71. "exporting",
  72. "netdata.exporting_buffer",
  73. "Netdata Buffered Metrics",
  74. "metrics",
  75. "exporting",
  76. NULL,
  77. 130610,
  78. instance->config.update_every,
  79. RRDSET_TYPE_LINE);
  80. stats->rd_buffered_metrics = rrddim_add(stats->st_metrics, "buffered", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
  81. stats->rd_lost_metrics = rrddim_add(stats->st_metrics, "lost", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
  82. stats->rd_sent_metrics = rrddim_add(stats->st_metrics, "sent", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
  83. // ------------------------------------------------------------------------
  84. snprintf(id, RRD_ID_LENGTH_MAX, "exporting_%s_bytes", instance->config.name);
  85. netdata_fix_chart_id(id);
  86. stats->st_bytes = rrdset_create_localhost(
  87. "netdata",
  88. id,
  89. NULL,
  90. "exporting",
  91. "netdata.exporting_data_size",
  92. "Netdata Exporting Data Size",
  93. "KiB",
  94. "exporting",
  95. NULL,
  96. 130620,
  97. instance->config.update_every,
  98. RRDSET_TYPE_AREA);
  99. stats->rd_buffered_bytes = rrddim_add(stats->st_bytes, "buffered", NULL, 1, 1024, RRD_ALGORITHM_ABSOLUTE);
  100. stats->rd_lost_bytes = rrddim_add(stats->st_bytes, "lost", NULL, 1, 1024, RRD_ALGORITHM_ABSOLUTE);
  101. stats->rd_sent_bytes = rrddim_add(stats->st_bytes, "sent", NULL, 1, 1024, RRD_ALGORITHM_ABSOLUTE);
  102. stats->rd_received_bytes = rrddim_add(stats->st_bytes, "received", NULL, 1, 1024, RRD_ALGORITHM_ABSOLUTE);
  103. // ------------------------------------------------------------------------
  104. snprintf(id, RRD_ID_LENGTH_MAX, "exporting_%s_ops", instance->config.name);
  105. netdata_fix_chart_id(id);
  106. stats->st_ops = rrdset_create_localhost(
  107. "netdata",
  108. id,
  109. NULL,
  110. "exporting",
  111. "netdata.exporting_operations",
  112. "Netdata Exporting Operations",
  113. "operations",
  114. "exporting",
  115. NULL,
  116. 130630,
  117. instance->config.update_every,
  118. RRDSET_TYPE_LINE);
  119. stats->rd_transmission_successes = rrddim_add(stats->st_ops, "write", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
  120. stats->rd_data_lost_events = rrddim_add(stats->st_ops, "discard", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
  121. stats->rd_reconnects = rrddim_add(stats->st_ops, "reconnect", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
  122. stats->rd_transmission_failures = rrddim_add(stats->st_ops, "failure", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
  123. stats->rd_receptions = rrddim_add(stats->st_ops, "read", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
  124. // ------------------------------------------------------------------------
  125. snprintf(id, RRD_ID_LENGTH_MAX, "exporting_%s_thread_cpu", instance->config.name);
  126. netdata_fix_chart_id(id);
  127. stats->st_rusage = rrdset_create_localhost(
  128. "netdata",
  129. id,
  130. NULL,
  131. "exporting",
  132. "netdata.exporting_instance",
  133. "Netdata Exporting Instance Thread CPU Usage",
  134. "milliseconds/s",
  135. "exporting",
  136. NULL,
  137. 130640,
  138. instance->config.update_every,
  139. RRDSET_TYPE_STACKED);
  140. stats->rd_user = rrddim_add(stats->st_rusage, "user", NULL, 1, 1000, RRD_ALGORITHM_INCREMENTAL);
  141. stats->rd_system = rrddim_add(stats->st_rusage, "system", NULL, 1, 1000, RRD_ALGORITHM_INCREMENTAL);
  142. stats->initialized = 1;
  143. }
  144. // ------------------------------------------------------------------------
  145. // update the monitoring charts
  146. rrddim_set_by_pointer(stats->st_metrics, stats->rd_buffered_metrics, stats->buffered_metrics);
  147. rrddim_set_by_pointer(stats->st_metrics, stats->rd_lost_metrics, stats->lost_metrics);
  148. rrddim_set_by_pointer(stats->st_metrics, stats->rd_sent_metrics, stats->sent_metrics);
  149. rrdset_done(stats->st_metrics);
  150. rrddim_set_by_pointer(stats->st_bytes, stats->rd_buffered_bytes, stats->buffered_bytes);
  151. rrddim_set_by_pointer(stats->st_bytes, stats->rd_lost_bytes, stats->lost_bytes);
  152. rrddim_set_by_pointer(stats->st_bytes, stats->rd_sent_bytes, stats->sent_bytes);
  153. rrddim_set_by_pointer(stats->st_bytes, stats->rd_received_bytes, stats->received_bytes);
  154. rrdset_done(stats->st_bytes);
  155. rrddim_set_by_pointer(stats->st_ops, stats->rd_transmission_successes, stats->transmission_successes);
  156. rrddim_set_by_pointer(stats->st_ops, stats->rd_data_lost_events, stats->data_lost_events);
  157. rrddim_set_by_pointer(stats->st_ops, stats->rd_reconnects, stats->reconnects);
  158. rrddim_set_by_pointer(stats->st_ops, stats->rd_transmission_failures, stats->transmission_failures);
  159. rrddim_set_by_pointer(stats->st_ops, stats->rd_receptions, stats->receptions);
  160. rrdset_done(stats->st_ops);
  161. struct rusage thread;
  162. getrusage(RUSAGE_THREAD, &thread);
  163. rrddim_set_by_pointer(stats->st_rusage, stats->rd_user, thread.ru_utime.tv_sec * 1000000ULL + thread.ru_utime.tv_usec);
  164. rrddim_set_by_pointer(stats->st_rusage, stats->rd_system, thread.ru_stime.tv_sec * 1000000ULL + thread.ru_stime.tv_usec);
  165. rrdset_done(stats->st_rusage);
  166. }