improvement(windows/iis): add requests by type chart (#19028)
Ilya Mashchenko committed
Nov 15, 2024 at 22:23 UTC
d5e61abf0d582c2ea1275554c41c87fec3fa219b
3 files changed
+152
-8
src/collectors/windows.plugin/metadata.yaml
+21
@@ -366,6 +366,27 @@ modules:
366
chart_type: line
367
dimensions:
368
- name: requests
369
+ - name: iis.website_requests_by_type_rate
370
+ description: Website requests rate
371
+ unit: "requests/s"
372
+ chart_type: stacked
373
+ dimensions:
374
+ - name: options
375
+ - name: get
376
+ - name: post
377
+ - name: head
378
+ - name: put
379
+ - name: delete
380
+ - name: trace
381
+ - name: move
382
+ - name: copy
383
+ - name: mkcol
384
+ - name: propfind
385
+ - name: proppatch
386
+ - name: search
387
+ - name: lock
388
+ - name: unlock
389
+ - name: other
390
- name: iis.website_active_connections_count
391
description: Website active connections
392
unit: "connections"
src/collectors/windows.plugin/perflib-web-service.c
+128
-6
@@ -4,6 +4,27 @@
4
#include "windows-internals.h"
5
6
struct web_service {
7
+ RRDSET *st_request_rate;
8
+ RRDDIM *rd_request_rate;
9
+
10
+ RRDSET *st_request_by_type_rate;
11
+ RRDDIM *rd_request_options_rate;
12
+ RRDDIM *rd_request_get_rate;
13
+ RRDDIM *rd_request_post_rate;
14
+ RRDDIM *rd_request_head_rate;
15
+ RRDDIM *rd_request_put_rate;
16
+ RRDDIM *rd_request_delete_rate;
17
+ RRDDIM *rd_request_trace_rate;
18
+ RRDDIM *rd_request_move_rate;
19
+ RRDDIM *rd_request_copy_rate;
20
+ RRDDIM *rd_request_mkcol_rate;
21
+ RRDDIM *rd_request_propfind_rate;
22
+ RRDDIM *rd_request_proppatch_rate;
23
+ RRDDIM *rd_request_search_rate;
24
+ RRDDIM *rd_request_lock_rate;
25
+ RRDDIM *rd_request_unlock_rate;
26
+ RRDDIM *rd_request_other_rate;
27
+
28
RRDSET *st_traffic;
29
RRDDIM *rd_traffic_received;
30
RRDDIM *rd_traffic_sent;
@@ -38,9 +59,6 @@ struct web_service {
59
RRDSET *st_service_uptime;
60
RRDDIM *rd_service_uptime;
61
41
- RRDSET *st_request_rate;
42
- RRDDIM *rd_request_rate;
43
-
62
COUNTER_DATA IISCurrentAnonymousUser;
63
COUNTER_DATA IISCurrentNonAnonymousUsers;
64
COUNTER_DATA IISCurrentConnections;
@@ -292,9 +310,9 @@ static bool do_web_services(PERF_DATA_BLOCK *pDataBlock, int update_every) {
310
update_every,
311
RRDSET_TYPE_STACKED);
312
295
- p->rd_user_anonymous = rrddim_add(p->st_user_count, "anonymous", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
313
+ p->rd_user_anonymous = rrddim_add(p->st_user_count, "anonymous", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
314
p->rd_user_nonanonymous =
297
- rrddim_add(p->st_user_count, "non_anonymous", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
315
+ rrddim_add(p->st_user_count, "non_anonymous", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
316
317
rrdlabels_add(p->st_user_count->rrdlabels, "website", windows_shared_buffer, RRDLABEL_SRC_AUTO);
318
}
@@ -503,7 +521,7 @@ static bool do_web_services(PERF_DATA_BLOCK *pDataBlock, int update_every) {
521
update_every,
522
RRDSET_TYPE_LINE);
523
506
- p->rd_request_rate = rrddim_add(p->st_request_rate, "requests", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
524
+ p->rd_request_rate = rrddim_add(p->st_request_rate, "requests", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
525
526
rrdlabels_add(p->st_request_rate->rrdlabels, "website", windows_shared_buffer, RRDLABEL_SRC_AUTO);
527
}
@@ -519,6 +537,110 @@ static bool do_web_services(PERF_DATA_BLOCK *pDataBlock, int update_every) {
537
rrddim_set_by_pointer(p->st_request_rate, p->rd_request_rate, (collected_number)requests);
538
539
rrdset_done(p->st_request_rate);
540
+
541
+ if (!p->st_request_by_type_rate) {
542
+ snprintfz(id, RRD_ID_LENGTH_MAX, "website_%s_requests_by_type_rate", windows_shared_buffer);
543
+ netdata_fix_chart_name(id);
544
+ p->st_request_by_type_rate = rrdset_create_localhost(
545
+ "iis",
546
+ id,
547
+ NULL,
548
+ "requests",
549
+ "iis.website_requests_by_type_rate",
550
+ "Website requests rate",
551
+ "requests/s",
552
+ PLUGIN_WINDOWS_NAME,
553
+ "PerflibWebService",
554
+ PRIO_WEBSITE_IIS_REQUESTS_BY_TYPE_RATE,
555
+ update_every,
556
+ RRDSET_TYPE_STACKED);
557
+
558
+ p->rd_request_options_rate = rrddim_add(p->st_request_by_type_rate, "options", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
559
+ p->rd_request_get_rate = rrddim_add(p->st_request_by_type_rate, "get", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
560
+ p->rd_request_post_rate = rrddim_add(p->st_request_by_type_rate, "post", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
561
+ p->rd_request_head_rate = rrddim_add(p->st_request_by_type_rate, "head", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
562
+ p->rd_request_put_rate = rrddim_add(p->st_request_by_type_rate, "put", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
563
+ p->rd_request_delete_rate = rrddim_add(p->st_request_by_type_rate, "delete", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
564
+ p->rd_request_trace_rate = rrddim_add(p->st_request_by_type_rate, "trace", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
565
+ p->rd_request_move_rate = rrddim_add(p->st_request_by_type_rate, "move", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
566
+ p->rd_request_copy_rate = rrddim_add(p->st_request_by_type_rate, "copy", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
567
+ p->rd_request_mkcol_rate = rrddim_add(p->st_request_by_type_rate, "mkcol", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
568
+ p->rd_request_propfind_rate = rrddim_add(p->st_request_by_type_rate, "propfind", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
569
+ p->rd_request_proppatch_rate = rrddim_add(p->st_request_by_type_rate, "proppatch", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
570
+ p->rd_request_search_rate = rrddim_add(p->st_request_by_type_rate, "search", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
571
+ p->rd_request_lock_rate = rrddim_add(p->st_request_by_type_rate, "lock", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
572
+ p->rd_request_unlock_rate = rrddim_add(p->st_request_by_type_rate, "unlock", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
573
+ p->rd_request_other_rate = rrddim_add(p->st_request_by_type_rate, "other", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
574
+
575
+ rrdlabels_add(p->st_request_by_type_rate->rrdlabels, "website", windows_shared_buffer, RRDLABEL_SRC_AUTO);
576
+ }
577
+
578
+ rrddim_set_by_pointer(
579
+ p->st_request_by_type_rate,
580
+ p->rd_request_options_rate,
581
+ (collected_number)p->IISRequestsOptions.current.Data);
582
+ rrddim_set_by_pointer(
583
+ p->st_request_by_type_rate,
584
+ p->rd_request_get_rate,
585
+ (collected_number)p->IISRequestsGet.current.Data);
586
+ rrddim_set_by_pointer(
587
+ p->st_request_by_type_rate,
588
+ p->rd_request_post_rate,
589
+ (collected_number)p->IISRequestsPost.current.Data);
590
+ rrddim_set_by_pointer(
591
+ p->st_request_by_type_rate,
592
+ p->rd_request_head_rate,
593
+ (collected_number)p->IISRequestsHead.current.Data);
594
+ rrddim_set_by_pointer(
595
+ p->st_request_by_type_rate,
596
+ p->rd_request_put_rate,
597
+ (collected_number)p->IISRequestsPut.current.Data);
598
+ rrddim_set_by_pointer(
599
+ p->st_request_by_type_rate,
600
+ p->rd_request_delete_rate,
601
+ (collected_number)p->IISRequestsDelete.current.Data);
602
+ rrddim_set_by_pointer(
603
+ p->st_request_by_type_rate,
604
+ p->rd_request_trace_rate,
605
+ (collected_number)p->IISRequestsTrace.current.Data);
606
+ rrddim_set_by_pointer(
607
+ p->st_request_by_type_rate,
608
+ p->rd_request_move_rate,
609
+ (collected_number)p->IISRequestsMove.current.Data);
610
+ rrddim_set_by_pointer(
611
+ p->st_request_by_type_rate,
612
+ p->rd_request_copy_rate,
613
+ (collected_number)p->IISRequestsCopy.current.Data);
614
+ rrddim_set_by_pointer(
615
+ p->st_request_by_type_rate,
616
+ p->rd_request_mkcol_rate,
617
+ (collected_number)p->IISRequestsMkcol.current.Data);
618
+ rrddim_set_by_pointer(
619
+ p->st_request_by_type_rate,
620
+ p->rd_request_propfind_rate,
621
+ (collected_number)p->IISRequestsPropfind.current.Data);
622
+ rrddim_set_by_pointer(
623
+ p->st_request_by_type_rate,
624
+ p->rd_request_proppatch_rate,
625
+ (collected_number)p->IISRequestsProppatch.current.Data);
626
+ rrddim_set_by_pointer(
627
+ p->st_request_by_type_rate,
628
+ p->rd_request_search_rate,
629
+ (collected_number)p->IISRequestsSearch.current.Data);
630
+ rrddim_set_by_pointer(
631
+ p->st_request_by_type_rate,
632
+ p->rd_request_lock_rate,
633
+ (collected_number)p->IISRequestsLock.current.Data);
634
+ rrddim_set_by_pointer(
635
+ p->st_request_by_type_rate,
636
+ p->rd_request_unlock_rate,
637
+ (collected_number)p->IISRequestsUnlock.current.Data);
638
+ rrddim_set_by_pointer(
639
+ p->st_request_by_type_rate,
640
+ p->rd_request_other_rate,
641
+ (collected_number)p->IISRequestsOther.current.Data);
642
+
643
+ rrdset_done(p->st_request_by_type_rate);
644
}
645
}
646
src/collectors/windows.plugin/windows_plugin.h
+3
-2
@@ -30,10 +30,11 @@ int do_PerflibMSSQL(int update_every, usec_t dt);
30
int do_PerflibNetFramework(int update_every, usec_t dt);
31
32
enum PERFLIB_PRIO {
33
- PRIO_WEBSITE_IIS_TRAFFIC = 21000, // PRIO selected, because APPS is using 20YYY
33
+ PRIO_WEBSITE_IIS_REQUESTS_RATE = 21000, // PRIO selected, because APPS is using 20YYY
34
+ PRIO_WEBSITE_IIS_REQUESTS_BY_TYPE_RATE,
35
+ PRIO_WEBSITE_IIS_TRAFFIC,
36
PRIO_WEBSITE_IIS_FTP_FILE_TRANSFER_RATE,
37
PRIO_WEBSITE_IIS_ACTIVE_CONNECTIONS_COUNT,
36
- PRIO_WEBSITE_IIS_REQUESTS_RATE,
38
PRIO_WEBSITE_IIS_CONNECTIONS_ATTEMP,
39
PRIO_WEBSITE_IIS_USERS,
40
PRIO_WEBSITE_IIS_ISAPI_EXT_REQUEST_COUNT,