update netdata global stats and enable them by default (#18001)
Ilya Mashchenko committed
Jun 25, 2024 at 10:21 UTC
52c2307ed4224291183199a6802bc783b1c6ca50
2 files changed
+217
-275
src/daemon/global_statistics.c
+213
-259
@@ -5,17 +5,18 @@
5
#define GLOBAL_STATS_RESET_WEB_USEC_MAX 0x01
6
7
#define WORKER_JOB_GLOBAL 0
8
-#define WORKER_JOB_REGISTRY 1
9
-#define WORKER_JOB_WORKERS 2
10
-#define WORKER_JOB_DBENGINE 3
11
-#define WORKER_JOB_HEARTBEAT 4
12
-#define WORKER_JOB_STRINGS 5
13
-#define WORKER_JOB_DICTIONARIES 6
14
-#define WORKER_JOB_MALLOC_TRACE 7
15
-#define WORKER_JOB_SQLITE3 8
16
-
17
-#if WORKER_UTILIZATION_MAX_JOB_TYPES < 9
18
-#error WORKER_UTILIZATION_MAX_JOB_TYPES has to be at least 9
8
+#define WORKER_JOB_GLOBAL_EXT 1
9
+#define WORKER_JOB_REGISTRY 2
10
+#define WORKER_JOB_WORKERS 3
11
+#define WORKER_JOB_DBENGINE 4
12
+#define WORKER_JOB_HEARTBEAT 5
13
+#define WORKER_JOB_STRINGS 6
14
+#define WORKER_JOB_DICTIONARIES 7
15
+#define WORKER_JOB_MALLOC_TRACE 8
16
+#define WORKER_JOB_SQLITE3 9
17
+
18
+#if WORKER_UTILIZATION_MAX_JOB_TYPES < 10
19
+#error WORKER_UTILIZATION_MAX_JOB_TYPES has to be at least 10
20
#endif
21
22
bool global_statistics_enabled = true;
@@ -249,13 +250,9 @@ static inline void global_statistics_copy(struct global_statistics *gs, uint8_t
250
((stats).memory.dict + (stats).memory.values + (stats).memory.index)
251
252
static void global_statistics_charts(void) {
252
- static unsigned long long old_web_requests = 0,
253
- old_web_usec = 0,
254
- old_content_size = 0,
255
- old_compressed_content_size = 0;
253
+ static unsigned long long old_web_requests = 0, old_web_usec = 0;
254
257
- static collected_number compression_ratio = -1,
258
- average_response_time = -1;
255
+ static collected_number average_response_time = -1;
256
257
static time_t netdata_boottime_time = 0;
258
if (!netdata_boottime_time)
@@ -265,7 +262,6 @@ static void global_statistics_charts(void) {
262
struct global_statistics gs;
263
struct rusage me;
264
268
- struct replication_query_statistics replication = replication_get_query_statistics();
265
global_statistics_copy(&gs, GLOBAL_STATS_RESET_WEB_USEC_MAX);
266
getrusage(RUSAGE_SELF, &me);
267
@@ -301,167 +297,6 @@ static void global_statistics_charts(void) {
297
rrdset_done(st_cpu);
298
}
299
304
- // ----------------------------------------------------------------
305
-
306
- {
307
- static RRDSET *st_memory = NULL;
308
- static RRDDIM *rd_database = NULL;
309
- static RRDDIM *rd_collectors = NULL;
310
- static RRDDIM *rd_hosts = NULL;
311
- static RRDDIM *rd_rrd = NULL;
312
- static RRDDIM *rd_contexts = NULL;
313
- static RRDDIM *rd_health = NULL;
314
- static RRDDIM *rd_functions = NULL;
315
- static RRDDIM *rd_labels = NULL;
316
- static RRDDIM *rd_strings = NULL;
317
- static RRDDIM *rd_streaming = NULL;
318
- static RRDDIM *rd_replication = NULL;
319
- static RRDDIM *rd_buffers = NULL;
320
- static RRDDIM *rd_workers = NULL;
321
- static RRDDIM *rd_aral = NULL;
322
- static RRDDIM *rd_judy = NULL;
323
- static RRDDIM *rd_other = NULL;
324
-
325
- if (unlikely(!st_memory)) {
326
- st_memory = rrdset_create_localhost(
327
- "netdata",
328
- "memory",
329
- NULL,
330
- "netdata",
331
- NULL,
332
- "Netdata Memory",
333
- "bytes",
334
- "netdata",
335
- "stats",
336
- 130100,
337
- localhost->rrd_update_every,
338
- RRDSET_TYPE_STACKED);
339
-
340
- rd_database = rrddim_add(st_memory, "db", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
341
- rd_collectors = rrddim_add(st_memory, "collectors", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
342
- rd_hosts = rrddim_add(st_memory, "hosts", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
343
- rd_rrd = rrddim_add(st_memory, "rrdset rrddim", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
344
- rd_contexts = rrddim_add(st_memory, "contexts", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
345
- rd_health = rrddim_add(st_memory, "health", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
346
- rd_functions = rrddim_add(st_memory, "functions", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
347
- rd_labels = rrddim_add(st_memory, "labels", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
348
- rd_strings = rrddim_add(st_memory, "strings", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
349
- rd_streaming = rrddim_add(st_memory, "streaming", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
350
- rd_replication = rrddim_add(st_memory, "replication", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
351
- rd_buffers = rrddim_add(st_memory, "buffers", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
352
- rd_workers = rrddim_add(st_memory, "workers", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
353
- rd_aral = rrddim_add(st_memory, "aral", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
354
- rd_judy = rrddim_add(st_memory, "judy", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
355
- rd_other = rrddim_add(st_memory, "other", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
356
- }
357
-
358
- size_t buffers =
359
- netdata_buffers_statistics.query_targets_size +
360
- netdata_buffers_statistics.rrdset_done_rda_size +
361
- netdata_buffers_statistics.buffers_aclk +
362
- netdata_buffers_statistics.buffers_api +
363
- netdata_buffers_statistics.buffers_functions +
364
- netdata_buffers_statistics.buffers_sqlite +
365
- netdata_buffers_statistics.buffers_exporters +
366
- netdata_buffers_statistics.buffers_health +
367
- netdata_buffers_statistics.buffers_streaming +
368
- netdata_buffers_statistics.cbuffers_streaming +
369
- netdata_buffers_statistics.buffers_web +
370
- replication_allocated_buffers() +
371
- aral_by_size_overhead() +
372
- judy_aral_overhead();
373
-
374
- size_t strings = 0;
375
- string_statistics(NULL, NULL, NULL, NULL, NULL, &strings, NULL, NULL);
376
-
377
- rrddim_set_by_pointer(st_memory, rd_database, (collected_number)dbengine_total_memory + (collected_number)rrddim_db_memory_size);
378
- rrddim_set_by_pointer(st_memory, rd_collectors, (collected_number)dictionary_stats_memory_total(dictionary_stats_category_collectors));
379
- rrddim_set_by_pointer(st_memory, rd_hosts, (collected_number)dictionary_stats_memory_total(dictionary_stats_category_rrdhost) + (collected_number)netdata_buffers_statistics.rrdhost_allocations_size);
380
- rrddim_set_by_pointer(st_memory, rd_rrd, (collected_number)dictionary_stats_memory_total(dictionary_stats_category_rrdset_rrddim));
381
- rrddim_set_by_pointer(st_memory, rd_contexts, (collected_number)dictionary_stats_memory_total(dictionary_stats_category_rrdcontext));
382
- rrddim_set_by_pointer(st_memory, rd_health, (collected_number)dictionary_stats_memory_total(dictionary_stats_category_rrdhealth));
383
- rrddim_set_by_pointer(st_memory, rd_functions, (collected_number)dictionary_stats_memory_total(dictionary_stats_category_functions));
384
- rrddim_set_by_pointer(st_memory, rd_labels, (collected_number)dictionary_stats_memory_total(dictionary_stats_category_rrdlabels));
385
- rrddim_set_by_pointer(st_memory, rd_strings, (collected_number)strings);
386
- rrddim_set_by_pointer(st_memory, rd_streaming, (collected_number)netdata_buffers_statistics.rrdhost_senders + (collected_number)netdata_buffers_statistics.rrdhost_receivers);
387
- rrddim_set_by_pointer(st_memory, rd_replication, (collected_number)dictionary_stats_memory_total(dictionary_stats_category_replication) + (collected_number)replication_allocated_memory());
388
- rrddim_set_by_pointer(st_memory, rd_buffers, (collected_number)buffers);
389
- rrddim_set_by_pointer(st_memory, rd_workers, (collected_number) workers_allocated_memory());
390
- rrddim_set_by_pointer(st_memory, rd_aral, (collected_number) aral_by_size_structures());
391
- rrddim_set_by_pointer(st_memory, rd_judy, (collected_number) judy_aral_structures());
392
- rrddim_set_by_pointer(st_memory, rd_other, (collected_number)dictionary_stats_memory_total(dictionary_stats_category_other));
393
-
394
- rrdset_done(st_memory);
395
- }
396
-
397
- {
398
- static RRDSET *st_memory_buffers = NULL;
399
- static RRDDIM *rd_queries = NULL;
400
- static RRDDIM *rd_collectors = NULL;
401
- static RRDDIM *rd_buffers_aclk = NULL;
402
- static RRDDIM *rd_buffers_api = NULL;
403
- static RRDDIM *rd_buffers_functions = NULL;
404
- static RRDDIM *rd_buffers_sqlite = NULL;
405
- static RRDDIM *rd_buffers_exporters = NULL;
406
- static RRDDIM *rd_buffers_health = NULL;
407
- static RRDDIM *rd_buffers_streaming = NULL;
408
- static RRDDIM *rd_cbuffers_streaming = NULL;
409
- static RRDDIM *rd_buffers_replication = NULL;
410
- static RRDDIM *rd_buffers_web = NULL;
411
- static RRDDIM *rd_buffers_aral = NULL;
412
- static RRDDIM *rd_buffers_judy = NULL;
413
-
414
- if (unlikely(!st_memory_buffers)) {
415
- st_memory_buffers = rrdset_create_localhost(
416
- "netdata",
417
- "memory_buffers",
418
- NULL,
419
- "netdata",
420
- NULL,
421
- "Netdata Memory Buffers",
422
- "bytes",
423
- "netdata",
424
- "stats",
425
- 130101,
426
- localhost->rrd_update_every,
427
- RRDSET_TYPE_STACKED);
428
-
429
- rd_queries = rrddim_add(st_memory_buffers, "queries", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
430
- rd_collectors = rrddim_add(st_memory_buffers, "collection", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
431
- rd_buffers_aclk = rrddim_add(st_memory_buffers, "aclk", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
432
- rd_buffers_api = rrddim_add(st_memory_buffers, "api", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
433
- rd_buffers_functions = rrddim_add(st_memory_buffers, "functions", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
434
- rd_buffers_sqlite = rrddim_add(st_memory_buffers, "sqlite", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
435
- rd_buffers_exporters = rrddim_add(st_memory_buffers, "exporters", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
436
- rd_buffers_health = rrddim_add(st_memory_buffers, "health", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
437
- rd_buffers_streaming = rrddim_add(st_memory_buffers, "streaming", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
438
- rd_cbuffers_streaming = rrddim_add(st_memory_buffers, "streaming cbuf", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
439
- rd_buffers_replication = rrddim_add(st_memory_buffers, "replication", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
440
- rd_buffers_web = rrddim_add(st_memory_buffers, "web", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
441
- rd_buffers_aral = rrddim_add(st_memory_buffers, "aral", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
442
- rd_buffers_judy = rrddim_add(st_memory_buffers, "judy", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
443
- }
444
-
445
- rrddim_set_by_pointer(st_memory_buffers, rd_queries, (collected_number)netdata_buffers_statistics.query_targets_size + (collected_number) onewayalloc_allocated_memory());
446
- rrddim_set_by_pointer(st_memory_buffers, rd_collectors, (collected_number)netdata_buffers_statistics.rrdset_done_rda_size);
447
- rrddim_set_by_pointer(st_memory_buffers, rd_buffers_aclk, (collected_number)netdata_buffers_statistics.buffers_aclk);
448
- rrddim_set_by_pointer(st_memory_buffers, rd_buffers_api, (collected_number)netdata_buffers_statistics.buffers_api);
449
- rrddim_set_by_pointer(st_memory_buffers, rd_buffers_functions, (collected_number)netdata_buffers_statistics.buffers_functions);
450
- rrddim_set_by_pointer(st_memory_buffers, rd_buffers_sqlite, (collected_number)netdata_buffers_statistics.buffers_sqlite);
451
- rrddim_set_by_pointer(st_memory_buffers, rd_buffers_exporters, (collected_number)netdata_buffers_statistics.buffers_exporters);
452
- rrddim_set_by_pointer(st_memory_buffers, rd_buffers_health, (collected_number)netdata_buffers_statistics.buffers_health);
453
- rrddim_set_by_pointer(st_memory_buffers, rd_buffers_streaming, (collected_number)netdata_buffers_statistics.buffers_streaming);
454
- rrddim_set_by_pointer(st_memory_buffers, rd_cbuffers_streaming, (collected_number)netdata_buffers_statistics.cbuffers_streaming);
455
- rrddim_set_by_pointer(st_memory_buffers, rd_buffers_replication, (collected_number)replication_allocated_buffers());
456
- rrddim_set_by_pointer(st_memory_buffers, rd_buffers_web, (collected_number)netdata_buffers_statistics.buffers_web);
457
- rrddim_set_by_pointer(st_memory_buffers, rd_buffers_aral, (collected_number)aral_by_size_overhead());
458
- rrddim_set_by_pointer(st_memory_buffers, rd_buffers_judy, (collected_number)judy_aral_overhead());
459
-
460
- rrdset_done(st_memory_buffers);
461
- }
462
-
463
- // ----------------------------------------------------------------
464
-
300
{
301
static RRDSET *st_uptime = NULL;
302
static RRDDIM *rd_uptime = NULL;
@@ -624,9 +459,174 @@ static void global_statistics_charts(void) {
459
460
rrddim_set_by_pointer(st_duration, rd_max, ((gs.web_usec_max)?(collected_number)gs.web_usec_max:average_response_time));
461
rrdset_done(st_duration);
462
+ }
463
+}
464
+
465
+static void global_statistics_extended_charts(void) {
466
+ static unsigned long long old_content_size = 0, old_compressed_content_size = 0;
467
+ static collected_number compression_ratio = -1;
468
+
469
+ struct global_statistics gs;
470
+ struct replication_query_statistics replication = replication_get_query_statistics();
471
+ global_statistics_copy(&gs, GLOBAL_STATS_RESET_WEB_USEC_MAX);
472
+
473
+ {
474
+ static RRDSET *st_memory = NULL;
475
+ static RRDDIM *rd_database = NULL;
476
+ static RRDDIM *rd_collectors = NULL;
477
+ static RRDDIM *rd_hosts = NULL;
478
+ static RRDDIM *rd_rrd = NULL;
479
+ static RRDDIM *rd_contexts = NULL;
480
+ static RRDDIM *rd_health = NULL;
481
+ static RRDDIM *rd_functions = NULL;
482
+ static RRDDIM *rd_labels = NULL;
483
+ static RRDDIM *rd_strings = NULL;
484
+ static RRDDIM *rd_streaming = NULL;
485
+ static RRDDIM *rd_replication = NULL;
486
+ static RRDDIM *rd_buffers = NULL;
487
+ static RRDDIM *rd_workers = NULL;
488
+ static RRDDIM *rd_aral = NULL;
489
+ static RRDDIM *rd_judy = NULL;
490
+ static RRDDIM *rd_other = NULL;
491
+
492
+ if (unlikely(!st_memory)) {
493
+ st_memory = rrdset_create_localhost(
494
+ "netdata",
495
+ "memory",
496
+ NULL,
497
+ "netdata",
498
+ NULL,
499
+ "Netdata Memory",
500
+ "bytes",
501
+ "netdata",
502
+ "stats",
503
+ 130100,
504
+ localhost->rrd_update_every,
505
+ RRDSET_TYPE_STACKED);
506
+
507
+ rd_database = rrddim_add(st_memory, "db", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
508
+ rd_collectors = rrddim_add(st_memory, "collectors", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
509
+ rd_hosts = rrddim_add(st_memory, "hosts", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
510
+ rd_rrd = rrddim_add(st_memory, "rrdset rrddim", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
511
+ rd_contexts = rrddim_add(st_memory, "contexts", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
512
+ rd_health = rrddim_add(st_memory, "health", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
513
+ rd_functions = rrddim_add(st_memory, "functions", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
514
+ rd_labels = rrddim_add(st_memory, "labels", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
515
+ rd_strings = rrddim_add(st_memory, "strings", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
516
+ rd_streaming = rrddim_add(st_memory, "streaming", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
517
+ rd_replication = rrddim_add(st_memory, "replication", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
518
+ rd_buffers = rrddim_add(st_memory, "buffers", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
519
+ rd_workers = rrddim_add(st_memory, "workers", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
520
+ rd_aral = rrddim_add(st_memory, "aral", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
521
+ rd_judy = rrddim_add(st_memory, "judy", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
522
+ rd_other = rrddim_add(st_memory, "other", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
523
+ }
524
+
525
+ size_t buffers =
526
+ netdata_buffers_statistics.query_targets_size +
527
+ netdata_buffers_statistics.rrdset_done_rda_size +
528
+ netdata_buffers_statistics.buffers_aclk +
529
+ netdata_buffers_statistics.buffers_api +
530
+ netdata_buffers_statistics.buffers_functions +
531
+ netdata_buffers_statistics.buffers_sqlite +
532
+ netdata_buffers_statistics.buffers_exporters +
533
+ netdata_buffers_statistics.buffers_health +
534
+ netdata_buffers_statistics.buffers_streaming +
535
+ netdata_buffers_statistics.cbuffers_streaming +
536
+ netdata_buffers_statistics.buffers_web +
537
+ replication_allocated_buffers() +
538
+ aral_by_size_overhead() +
539
+ judy_aral_overhead();
540
+
541
+ size_t strings = 0;
542
+ string_statistics(NULL, NULL, NULL, NULL, NULL, &strings, NULL, NULL);
543
+
544
+ rrddim_set_by_pointer(st_memory, rd_database, (collected_number)dbengine_total_memory + (collected_number)rrddim_db_memory_size);
545
+ rrddim_set_by_pointer(st_memory, rd_collectors, (collected_number)dictionary_stats_memory_total(dictionary_stats_category_collectors));
546
+ rrddim_set_by_pointer(st_memory, rd_hosts, (collected_number)dictionary_stats_memory_total(dictionary_stats_category_rrdhost) + (collected_number)netdata_buffers_statistics.rrdhost_allocations_size);
547
+ rrddim_set_by_pointer(st_memory, rd_rrd, (collected_number)dictionary_stats_memory_total(dictionary_stats_category_rrdset_rrddim));
548
+ rrddim_set_by_pointer(st_memory, rd_contexts, (collected_number)dictionary_stats_memory_total(dictionary_stats_category_rrdcontext));
549
+ rrddim_set_by_pointer(st_memory, rd_health, (collected_number)dictionary_stats_memory_total(dictionary_stats_category_rrdhealth));
550
+ rrddim_set_by_pointer(st_memory, rd_functions, (collected_number)dictionary_stats_memory_total(dictionary_stats_category_functions));
551
+ rrddim_set_by_pointer(st_memory, rd_labels, (collected_number)dictionary_stats_memory_total(dictionary_stats_category_rrdlabels));
552
+ rrddim_set_by_pointer(st_memory, rd_strings, (collected_number)strings);
553
+ rrddim_set_by_pointer(st_memory, rd_streaming, (collected_number)netdata_buffers_statistics.rrdhost_senders + (collected_number)netdata_buffers_statistics.rrdhost_receivers);
554
+ rrddim_set_by_pointer(st_memory, rd_replication, (collected_number)dictionary_stats_memory_total(dictionary_stats_category_replication) + (collected_number)replication_allocated_memory());
555
+ rrddim_set_by_pointer(st_memory, rd_buffers, (collected_number)buffers);
556
+ rrddim_set_by_pointer(st_memory, rd_workers, (collected_number) workers_allocated_memory());
557
+ rrddim_set_by_pointer(st_memory, rd_aral, (collected_number) aral_by_size_structures());
558
+ rrddim_set_by_pointer(st_memory, rd_judy, (collected_number) judy_aral_structures());
559
+ rrddim_set_by_pointer(st_memory, rd_other, (collected_number)dictionary_stats_memory_total(dictionary_stats_category_other));
560
+
561
+ rrdset_done(st_memory);
562
+ }
563
+
564
+ {
565
+ static RRDSET *st_memory_buffers = NULL;
566
+ static RRDDIM *rd_queries = NULL;
567
+ static RRDDIM *rd_collectors = NULL;
568
+ static RRDDIM *rd_buffers_aclk = NULL;
569
+ static RRDDIM *rd_buffers_api = NULL;
570
+ static RRDDIM *rd_buffers_functions = NULL;
571
+ static RRDDIM *rd_buffers_sqlite = NULL;
572
+ static RRDDIM *rd_buffers_exporters = NULL;
573
+ static RRDDIM *rd_buffers_health = NULL;
574
+ static RRDDIM *rd_buffers_streaming = NULL;
575
+ static RRDDIM *rd_cbuffers_streaming = NULL;
576
+ static RRDDIM *rd_buffers_replication = NULL;
577
+ static RRDDIM *rd_buffers_web = NULL;
578
+ static RRDDIM *rd_buffers_aral = NULL;
579
+ static RRDDIM *rd_buffers_judy = NULL;
580
+
581
+ if (unlikely(!st_memory_buffers)) {
582
+ st_memory_buffers = rrdset_create_localhost(
583
+ "netdata",
584
+ "memory_buffers",
585
+ NULL,
586
+ "netdata",
587
+ NULL,
588
+ "Netdata Memory Buffers",
589
+ "bytes",
590
+ "netdata",
591
+ "stats",
592
+ 130101,
593
+ localhost->rrd_update_every,
594
+ RRDSET_TYPE_STACKED);
595
+
596
+ rd_queries = rrddim_add(st_memory_buffers, "queries", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
597
+ rd_collectors = rrddim_add(st_memory_buffers, "collection", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
598
+ rd_buffers_aclk = rrddim_add(st_memory_buffers, "aclk", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
599
+ rd_buffers_api = rrddim_add(st_memory_buffers, "api", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
600
+ rd_buffers_functions = rrddim_add(st_memory_buffers, "functions", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
601
+ rd_buffers_sqlite = rrddim_add(st_memory_buffers, "sqlite", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
602
+ rd_buffers_exporters = rrddim_add(st_memory_buffers, "exporters", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
603
+ rd_buffers_health = rrddim_add(st_memory_buffers, "health", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
604
+ rd_buffers_streaming = rrddim_add(st_memory_buffers, "streaming", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
605
+ rd_cbuffers_streaming = rrddim_add(st_memory_buffers, "streaming cbuf", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
606
+ rd_buffers_replication = rrddim_add(st_memory_buffers, "replication", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
607
+ rd_buffers_web = rrddim_add(st_memory_buffers, "web", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
608
+ rd_buffers_aral = rrddim_add(st_memory_buffers, "aral", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
609
+ rd_buffers_judy = rrddim_add(st_memory_buffers, "judy", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
610
+ }
611
+
612
+ rrddim_set_by_pointer(st_memory_buffers, rd_queries, (collected_number)netdata_buffers_statistics.query_targets_size + (collected_number) onewayalloc_allocated_memory());
613
+ rrddim_set_by_pointer(st_memory_buffers, rd_collectors, (collected_number)netdata_buffers_statistics.rrdset_done_rda_size);
614
+ rrddim_set_by_pointer(st_memory_buffers, rd_buffers_aclk, (collected_number)netdata_buffers_statistics.buffers_aclk);
615
+ rrddim_set_by_pointer(st_memory_buffers, rd_buffers_api, (collected_number)netdata_buffers_statistics.buffers_api);
616
+ rrddim_set_by_pointer(st_memory_buffers, rd_buffers_functions, (collected_number)netdata_buffers_statistics.buffers_functions);
617
+ rrddim_set_by_pointer(st_memory_buffers, rd_buffers_sqlite, (collected_number)netdata_buffers_statistics.buffers_sqlite);
618
+ rrddim_set_by_pointer(st_memory_buffers, rd_buffers_exporters, (collected_number)netdata_buffers_statistics.buffers_exporters);
619
+ rrddim_set_by_pointer(st_memory_buffers, rd_buffers_health, (collected_number)netdata_buffers_statistics.buffers_health);
620
+ rrddim_set_by_pointer(st_memory_buffers, rd_buffers_streaming, (collected_number)netdata_buffers_statistics.buffers_streaming);
621
+ rrddim_set_by_pointer(st_memory_buffers, rd_cbuffers_streaming, (collected_number)netdata_buffers_statistics.cbuffers_streaming);
622
+ rrddim_set_by_pointer(st_memory_buffers, rd_buffers_replication, (collected_number)replication_allocated_buffers());
623
+ rrddim_set_by_pointer(st_memory_buffers, rd_buffers_web, (collected_number)netdata_buffers_statistics.buffers_web);
624
+ rrddim_set_by_pointer(st_memory_buffers, rd_buffers_aral, (collected_number)aral_by_size_overhead());
625
+ rrddim_set_by_pointer(st_memory_buffers, rd_buffers_judy, (collected_number)judy_aral_overhead());
626
+
627
+ rrdset_done(st_memory_buffers);
628
}
629
629
- // ----------------------------------------------------------------
630
631
{
632
static RRDSET *st_compression = NULL;
@@ -671,8 +671,6 @@ static void global_statistics_charts(void) {
671
rrdset_done(st_compression);
672
}
673
674
- // ----------------------------------------------------------------
675
-
674
{
675
static RRDSET *st_queries = NULL;
676
static RRDDIM *rd_api_data_queries = NULL;
@@ -722,8 +720,6 @@ static void global_statistics_charts(void) {
720
rrdset_done(st_queries);
721
}
722
725
- // ----------------------------------------------------------------
726
-
723
{
724
static RRDSET *st_points_read = NULL;
725
static RRDDIM *rd_api_data_points_read = NULL;
@@ -773,8 +769,6 @@ static void global_statistics_charts(void) {
769
rrdset_done(st_points_read);
770
}
771
776
- // ----------------------------------------------------------------
777
-
772
if(gs.api_data_result_points_generated || replication.points_generated) {
773
static RRDSET *st_points_generated = NULL;
774
static RRDDIM *rd_api_data_points_generated = NULL;
@@ -818,7 +812,7 @@ static void global_statistics_charts(void) {
812
rrdset_done(st_points_generated);
813
}
814
821
- // ----------------------------------------------------------------
815
+ ml_update_global_statistics_charts(gs.ml_models_consulted);
816
817
{
818
static RRDSET *st_points_stored = NULL;
@@ -853,10 +847,6 @@ static void global_statistics_charts(void) {
847
rrdset_done(st_points_stored);
848
}
849
856
- ml_update_global_statistics_charts(gs.ml_models_consulted);
857
-
858
- // ----------------------------------------------------------------
859
-
850
#ifdef ENABLE_DBENGINE
851
if (tier_page_type[0] == RRDENG_PAGE_TYPE_GORILLA_32BIT)
852
{
@@ -921,7 +911,6 @@ static void global_statistics_charts(void) {
911
}
912
#endif
913
}
924
-
914
// ----------------------------------------------------------------------------
915
// sqlite3 statistics
916
@@ -4203,6 +4192,7 @@ static void worker_utilization_finish(void) {
4192
static void global_statistics_register_workers(void) {
4193
worker_register("STATS");
4194
worker_register_job_name(WORKER_JOB_GLOBAL, "global");
4195
+ worker_register_job_name(WORKER_JOB_GLOBAL_EXT, "global_ext");
4196
worker_register_job_name(WORKER_JOB_REGISTRY, "registry");
4197
worker_register_job_name(WORKER_JOB_DBENGINE, "dbengine");
4198
worker_register_job_name(WORKER_JOB_STRINGS, "strings");
@@ -4250,32 +4240,6 @@ void *global_statistics_main(void *ptr)
4240
4241
worker_is_busy(WORKER_JOB_GLOBAL);
4242
global_statistics_charts();
4253
-
4254
- worker_is_busy(WORKER_JOB_REGISTRY);
4255
- registry_statistics();
4256
-
4257
-#ifdef ENABLE_DBENGINE
4258
- if(dbengine_enabled) {
4259
- worker_is_busy(WORKER_JOB_DBENGINE);
4260
- dbengine2_statistics_charts();
4261
- }
4262
-#endif
4263
-
4264
- worker_is_busy(WORKER_JOB_HEARTBEAT);
4265
- update_heartbeat_charts();
4266
-
4267
- worker_is_busy(WORKER_JOB_STRINGS);
4268
- update_strings_charts();
4269
-
4270
-#ifdef DICT_WITH_STATS
4271
- worker_is_busy(WORKER_JOB_DICTIONARIES);
4272
- dictionary_statistics();
4273
-#endif
4274
-
4275
-#ifdef NETDATA_TRACE_ALLOCATIONS
4276
- worker_is_busy(WORKER_JOB_MALLOC_TRACE);
4277
- malloc_trace_statistics();
4278
-#endif
4243
}
4244
4245
return NULL;
@@ -4283,12 +4247,13 @@ void *global_statistics_main(void *ptr)
4247
4248
4249
// ---------------------------------------------------------------------------------------------------------------------
4286
-// workers thread
4250
+// global statistics extended thread
4251
4288
-static void global_statistics_workers_cleanup(void *pptr)
4252
+static void global_statistics_extended_cleanup(void *pptr)
4253
{
4254
struct netdata_static_thread *static_thread = CLEANUP_FUNCTION_GET_PTR(pptr);
4291
- if(!static_thread) return;
4255
+ if (!static_thread)
4256
+ return;
4257
4258
static_thread->enabled = NETDATA_MAIN_THREAD_EXITING;
4259
@@ -4300,14 +4265,14 @@ static void global_statistics_workers_cleanup(void *pptr)
4265
static_thread->enabled = NETDATA_MAIN_THREAD_EXITED;
4266
}
4267
4303
-void *global_statistics_workers_main(void *ptr)
4268
+void *global_statistics_extended_main(void *ptr)
4269
{
4305
- CLEANUP_FUNCTION_REGISTER(global_statistics_workers_cleanup) cleanup_ptr = ptr;
4270
+ CLEANUP_FUNCTION_REGISTER(global_statistics_extended_cleanup) cleanup_ptr = ptr;
4271
4272
global_statistics_register_workers();
4273
4274
int update_every =
4310
- (int)config_get_number(CONFIG_SECTION_GLOBAL_STATISTICS, "update every", localhost->rrd_update_every);
4275
+ (int)config_get_number(CONFIG_SECTION_GLOBAL_STATISTICS, "update every", localhost->rrd_update_every);
4276
if (update_every < localhost->rrd_update_every)
4277
update_every = localhost->rrd_update_every;
4278
@@ -4319,47 +4284,37 @@ void *global_statistics_workers_main(void *ptr)
4284
worker_is_idle();
4285
heartbeat_next(&hb, step);
4286
4322
- worker_is_busy(WORKER_JOB_WORKERS);
4323
- worker_utilization_charts();
4324
- }
4325
-
4326
- return NULL;
4327
-}
4328
-
4329
-// ---------------------------------------------------------------------------------------------------------------------
4330
-// sqlite3 thread
4331
-
4332
-static void global_statistics_sqlite3_cleanup(void *pptr)
4333
-{
4334
- struct netdata_static_thread *static_thread = CLEANUP_FUNCTION_GET_PTR(pptr);
4335
- if(!static_thread) return;
4336
-
4337
- static_thread->enabled = NETDATA_MAIN_THREAD_EXITING;
4287
+ worker_is_busy(WORKER_JOB_HEARTBEAT);
4288
+ update_heartbeat_charts();
4289
4339
- worker_unregister();
4340
- netdata_log_info("cleaning up...");
4290
+ worker_is_busy(WORKER_JOB_GLOBAL_EXT);
4291
+ global_statistics_extended_charts();
4292
4342
- static_thread->enabled = NETDATA_MAIN_THREAD_EXITED;
4343
-}
4293
+#ifdef ENABLE_DBENGINE
4294
+ if(dbengine_enabled) {
4295
+ worker_is_busy(WORKER_JOB_DBENGINE);
4296
+ dbengine2_statistics_charts();
4297
+ }
4298
+#endif
4299
4345
-void *global_statistics_sqlite3_main(void *ptr)
4346
-{
4347
- CLEANUP_FUNCTION_REGISTER(global_statistics_sqlite3_cleanup) cleanup_ptr = ptr;
4300
+ worker_is_busy(WORKER_JOB_REGISTRY);
4301
+ registry_statistics();
4302
4349
- global_statistics_register_workers();
4303
+ worker_is_busy(WORKER_JOB_STRINGS);
4304
+ update_strings_charts();
4305
4351
- int update_every =
4352
- (int)config_get_number(CONFIG_SECTION_GLOBAL_STATISTICS, "update every", localhost->rrd_update_every);
4353
- if (update_every < localhost->rrd_update_every)
4354
- update_every = localhost->rrd_update_every;
4306
+#ifdef DICT_WITH_STATS
4307
+ worker_is_busy(WORKER_JOB_DICTIONARIES);
4308
+ dictionary_statistics();
4309
+#endif
4310
4356
- usec_t step = update_every * USEC_PER_SEC;
4357
- heartbeat_t hb;
4358
- heartbeat_init(&hb);
4311
+#ifdef NETDATA_TRACE_ALLOCATIONS
4312
+ worker_is_busy(WORKER_JOB_MALLOC_TRACE);
4313
+ malloc_trace_statistics();
4314
+#endif
4315
4360
- while (service_running(SERVICE_COLLECTORS)) {
4361
- worker_is_idle();
4362
- heartbeat_next(&hb, step);
4316
+ worker_is_busy(WORKER_JOB_WORKERS);
4317
+ worker_utilization_charts();
4318
4319
worker_is_busy(WORKER_JOB_SQLITE3);
4320
sqlite3_statistics_charts();
@@ -4367,4 +4322,3 @@ void *global_statistics_sqlite3_main(void *ptr)
4322
4323
return NULL;
4324
}
4370
-
src/daemon/static_threads.c
+4
-16
@@ -6,8 +6,7 @@ void *aclk_main(void *ptr);
6
void *analytics_main(void *ptr);
7
void *cpuidlejitter_main(void *ptr);
8
void *global_statistics_main(void *ptr);
9
-void *global_statistics_workers_main(void *ptr);
10
-void *global_statistics_sqlite3_main(void *ptr);
9
+void *global_statistics_extended_main(void *ptr);
10
void *health_main(void *ptr);
11
void *pluginsd_main(void *ptr);
12
void *service_main(void *ptr);
@@ -51,24 +50,13 @@ const struct netdata_static_thread static_threads_common[] = {
50
.config_name = "netdata monitoring",
51
.env_name = "NETDATA_INTERNALS_MONITORING",
52
.global_variable = &global_statistics_enabled,
54
- .enabled = 0,
53
+ .enabled = 1,
54
.thread = NULL,
55
.init_routine = NULL,
56
.start_routine = global_statistics_main
57
},
58
{
60
- .name = "STATS_WORKERS",
61
- .config_section = CONFIG_SECTION_PLUGINS,
62
- .config_name = "netdata monitoring extended",
63
- .env_name = "NETDATA_INTERNALS_EXTENDED_MONITORING",
64
- .global_variable = &global_statistics_enabled,
65
- .enabled = 0, // this is ignored - check main() for "netdata monitoring extended"
66
- .thread = NULL,
67
- .init_routine = NULL,
68
- .start_routine = global_statistics_workers_main
69
- },
70
- {
71
- .name = "STATS_SQLITE3",
59
+ .name = "STATS_GLOBAL_EXT",
60
.config_section = CONFIG_SECTION_PLUGINS,
61
.config_name = "netdata monitoring extended",
62
.env_name = "NETDATA_INTERNALS_EXTENDED_MONITORING",
@@ -76,7 +64,7 @@ const struct netdata_static_thread static_threads_common[] = {
64
.enabled = 0, // this is ignored - check main() for "netdata monitoring extended"
65
.thread = NULL,
66
.init_routine = NULL,
79
- .start_routine = global_statistics_sqlite3_main
67
+ .start_routine = global_statistics_extended_main
68
},
69
{
70
.name = "PLUGINSD",