Skip to content

Commit 4120d07

Browse files
committed
in_windows_exporter_metrics: Support TCPv4/TCPv6 metrics
Signed-off-by: Hiroshi Hatake <[email protected]>
1 parent 4bc363b commit 4120d07

File tree

5 files changed

+373
-1
lines changed

5 files changed

+373
-1
lines changed

plugins/in_windows_exporter_metrics/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ set(src
1919
we_wmi_memory.c
2020
we_wmi_paging_file.c
2121
we_wmi_process.c
22+
we_wmi_tcp.c
2223
)
2324

2425
set(libs

plugins/in_windows_exporter_metrics/we.c

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
#include "we_wmi_memory.h"
4646
#include "we_wmi_paging_file.h"
4747
#include "we_wmi_process.h"
48+
#include "we_wmi_tcp.h"
4849

4950
static int we_timer_cpu_metrics_cb(struct flb_input_instance *ins,
5051
struct flb_config *config, void *in_context)
@@ -186,6 +187,16 @@ static int we_timer_wmi_process_metrics_cb(struct flb_input_instance *ins,
186187
return 0;
187188
}
188189

190+
static int we_timer_wmi_tcp_metrics_cb(struct flb_input_instance *ins,
191+
struct flb_config *config, void *in_context)
192+
{
193+
struct flb_ne *ctx = in_context;
194+
195+
we_wmi_tcp_update(ctx);
196+
197+
return 0;
198+
}
199+
189200
struct flb_we_callback {
190201
char *name;
191202
void (*func)(char *, void *, void *);
@@ -336,6 +347,13 @@ static void we_wmi_process_update_cb(char *name, void *p1, void *p2)
336347
we_wmi_process_update(ctx);
337348
}
338349

350+
static void we_wmi_tcp_update_cb(char *name, void *p1, void *p2)
351+
{
352+
struct flb_we *ctx = p1;
353+
354+
we_wmi_tcp_update(ctx);
355+
}
356+
339357
static int we_update_cb(struct flb_we *ctx, char *name)
340358
{
341359
int ret;
@@ -363,6 +381,7 @@ struct flb_we_callback ne_callbacks[] = {
363381
{ "memory", we_wmi_memory_update_cb },
364382
{ "paging_file", we_wmi_paging_file_update_cb },
365383
{ "process", we_wmi_process_update_cb },
384+
{ "tcp", we_wmi_tcp_update_cb },
366385
{ 0 }
367386
};
368387

@@ -401,6 +420,7 @@ static int in_we_init(struct flb_input_instance *in,
401420
ctx->coll_wmi_memory_fd = -1;
402421
ctx->coll_wmi_paging_file_fd = -1;
403422
ctx->coll_wmi_process_fd = -1;
423+
ctx->coll_wmi_tcp_fd = -1;
404424

405425
ctx->callback = flb_callback_create(in->name);
406426
if (!ctx->callback) {
@@ -806,6 +826,31 @@ static int in_we_init(struct flb_input_instance *in,
806826
return -1;
807827
}
808828
}
829+
else if (strncmp(entry->str, "tcp", 3) == 0) {
830+
if (ctx->wmi_tcp_scrape_interval == 0) {
831+
flb_plg_debug(ctx->ins, "enabled metrics %s", entry->str);
832+
metric_idx = 14;
833+
}
834+
else {
835+
/* Create the process collector */
836+
ret = flb_input_set_collector_time(in,
837+
we_timer_wmi_tcp_metrics_cb,
838+
ctx->wmi_tcp_scrape_interval, 0,
839+
config);
840+
if (ret == -1) {
841+
flb_plg_error(ctx->ins,
842+
"could not set tcp collector for Windows Exporter Metrics plugin");
843+
return -1;
844+
}
845+
ctx->coll_wmi_tcp_fd = ret;
846+
}
847+
848+
/* Initialize tcp metric collectors */
849+
ret = we_wmi_tcp_init(ctx);
850+
if (ret) {
851+
return -1;
852+
}
853+
}
809854
else {
810855
flb_plg_warn(ctx->ins, "Unknown metrics: %s", entry->str);
811856
metric_idx = -1;
@@ -891,6 +936,9 @@ static int in_we_exit(void *data, struct flb_config *config)
891936
else if (strncmp(entry->str, "process", 7) == 0) {
892937
we_wmi_process_exit(ctx);
893938
}
939+
else if (strncmp(entry->str, "tcp", 3) == 0) {
940+
we_wmi_tcp_exit(ctx);
941+
}
894942
else {
895943
flb_plg_warn(ctx->ins, "Unknown metrics: %s", entry->str);
896944
}
@@ -943,6 +991,9 @@ static int in_we_exit(void *data, struct flb_config *config)
943991
if (ctx->coll_wmi_process_fd != -1) {
944992
we_wmi_process_exit(ctx);
945993
}
994+
if (ctx->coll_wmi_tcp_fd != -1) {
995+
we_wmi_tcp_exit(ctx);
996+
}
946997

947998
flb_we_config_destroy(ctx);
948999

@@ -998,6 +1049,9 @@ static void in_we_pause(void *data, struct flb_config *config)
9981049
if (ctx->coll_wmi_process_fd != -1) {
9991050
flb_input_collector_pause(ctx->coll_wmi_process_fd, ctx->ins);
10001051
}
1052+
if (ctx->coll_wmi_tcp_fd != -1) {
1053+
flb_input_collector_pause(ctx->coll_wmi_tcp_fd, ctx->ins);
1054+
}
10011055
}
10021056

10031057
static void in_we_resume(void *data, struct flb_config *config)
@@ -1049,6 +1103,12 @@ static void in_we_resume(void *data, struct flb_config *config)
10491103
if (ctx->coll_wmi_paging_file_fd != -1) {
10501104
flb_input_collector_resume(ctx->coll_wmi_paging_file_fd, ctx->ins);
10511105
}
1106+
if (ctx->coll_wmi_process_fd != -1) {
1107+
flb_input_collector_resume(ctx->coll_wmi_process_fd, ctx->ins);
1108+
}
1109+
if (ctx->coll_wmi_tcp_fd != -1) {
1110+
flb_input_collector_resume(ctx->coll_wmi_tcp_fd, ctx->ins);
1111+
}
10521112
}
10531113

10541114
/* Configuration properties map */
@@ -1143,9 +1203,15 @@ static struct flb_config_map config_map[] = {
11431203
"scrape interval to collect process metrics from the node."
11441204
},
11451205

1206+
{
1207+
FLB_CONFIG_MAP_TIME, "collector.tcp.scrape_interval", "0",
1208+
0, FLB_TRUE, offsetof(struct flb_we, wmi_tcp_scrape_interval),
1209+
"scrape interval to collect tcp metrics from the node."
1210+
},
1211+
11461212
{
11471213
FLB_CONFIG_MAP_CLIST, "metrics",
1148-
"cpu,cpu_info,os,net,logical_disk,cs,cache,thermalzone,logon,system,service",
1214+
"cpu,cpu_info,os,net,logical_disk,cs,cache,thermalzone,logon,system,service,tcp",
11491215
0, FLB_TRUE, offsetof(struct flb_we, metrics),
11501216
"Comma separated list of keys to enable metrics."
11511217
},

plugins/in_windows_exporter_metrics/we.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,22 @@ struct we_wmi_process_counters {
229229
int operational;
230230
};
231231

232+
struct we_wmi_tcp_counters {
233+
int operational;
234+
struct wmi_query_spec *v4_info;
235+
struct wmi_query_spec *v6_info;
236+
237+
struct cmt_counter *connection_failures;
238+
struct cmt_gauge *connections_active;
239+
struct cmt_counter *connections_established;
240+
struct cmt_counter *connections_passive;
241+
struct cmt_counter *connections_reset;
242+
struct cmt_gauge *segments_per_sec;
243+
struct cmt_gauge *segments_received_per_sec;
244+
struct cmt_gauge *segments_retransmitted_per_sec;
245+
struct cmt_gauge *segments_sent_per_sec;
246+
};
247+
232248
struct we_os_counters {
233249
struct cmt_gauge *info;
234250
struct cmt_gauge *users;
@@ -303,6 +319,7 @@ struct flb_we {
303319
int wmi_memory_scrape_interval;
304320
int wmi_paging_file_scrape_interval;
305321
int wmi_process_scrape_interval;
322+
int wmi_tcp_scrape_interval;
306323

307324
int coll_cpu_fd; /* collector fd (cpu) */
308325
int coll_net_fd; /* collector fd (net) */
@@ -318,6 +335,7 @@ struct flb_we {
318335
int coll_wmi_memory_fd; /* collector fd (wmi_memory) */
319336
int coll_wmi_paging_file_fd; /* collector fd (wmi_paging_file) */
320337
int coll_wmi_process_fd; /* collector fd (wmi_process) */
338+
int coll_wmi_tcp_fd; /* collector fd (wmi_tcp) */
321339

322340
/*
323341
* Metrics Contexts
@@ -338,6 +356,7 @@ struct flb_we {
338356
struct we_wmi_memory_counters *wmi_memory;
339357
struct we_wmi_paging_file_counters *wmi_paging_file;
340358
struct we_wmi_process_counters *wmi_process;
359+
struct we_wmi_tcp_counters *wmi_tcp;
341360
};
342361

343362
typedef int (*collector_cb)(struct flb_we *);

0 commit comments

Comments
 (0)