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