fix system.net when inside lxc (#16364)
Ilya Mashchenko committed
Nov 9, 2023 at 11:57 UTC
593026cb136cf4b3e4b6b0b5a5e9f94b9a77aa47
1 file changed
+11
-7
collectors/proc.plugin/proc_net_dev.c
+11
-7
@@ -1149,16 +1149,20 @@ int do_proc_net_dev(int update_every, usec_t dt) {
1149
d->enabled = !simple_pattern_matches(disabled_list, d->name);
1150
1151
char buffer[FILENAME_MAX + 1];
1152
-
1152
snprintfz(buffer, FILENAME_MAX, path_to_sys_devices_virtual_net, d->name);
1154
- if (likely(access(buffer, R_OK) == 0)) {
1155
- d->virtual = 1;
1156
- rrdlabels_add(d->chart_labels, "interface_type", "virtual", RRDLABEL_SRC_AUTO);
1157
- }
1158
- else {
1153
+
1154
+ d->virtual = likely(access(buffer, R_OK) == 0) ? 1 : 0;
1155
+
1156
+ // At least on Proxmox inside LXC: eth0 is virtual.
1157
+ // Virtual interfaces are not taken into account in system.net calculations
1158
+ if (inside_lxc_container && d->virtual && strncmp(d->name, "eth", 3) == 0)
1159
d->virtual = 0;
1160
+
1161
+ if (d->virtual)
1162
+ rrdlabels_add(d->chart_labels, "interface_type", "virtual", RRDLABEL_SRC_AUTO);
1163
+ else
1164
rrdlabels_add(d->chart_labels, "interface_type", "real", RRDLABEL_SRC_AUTO);
1161
- }
1165
+
1166
rrdlabels_add(d->chart_labels, "device", name, RRDLABEL_SRC_AUTO);
1167
1168
if(likely(!d->virtual)) {