diff -ruN zabbix-6.0.33.orig/src/libs/zbxsysinfo/linux/diskio.c zabbix-6.0.33/src/libs/zbxsysinfo/linux/diskio.c
--- zabbix-6.0.33.orig/src/libs/zbxsysinfo/linux/diskio.c	2024-08-13 12:25:56.413517151 +0200
+++ zabbix-6.0.33/src/libs/zbxsysinfo/linux/diskio.c	2024-09-26 17:08:20.283912701 +0200
@@ -17,11 +17,13 @@
 ** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 **/
 
+#include <regex.h>
 #include "common.h"
 #include "sysinfo.h"
 #include "stats.h"
 #include "diskdevices.h"
 #include "zbxjson.h"
+#include "log.h"
 
 #define ZBX_DEV_PFX		"/dev/"
 #define ZBX_DEV_READ		0
@@ -70,6 +72,8 @@
 				) continue
 #endif
 
+extern char	*CONFIG_DISK_FILTER;
+
 int	get_diskstat(const char *devname, zbx_uint64_t *dstat)
 {
 	FILE		*f;
@@ -77,11 +81,16 @@
 	int		i, ret = FAIL, dev_exists = FAIL;
 	zbx_uint64_t	ds[ZBX_DSTAT_MAX], rdev_major, rdev_minor;
 	zbx_stat_t 	dev_st;
-	int		found = 0;
+	int		is_re, found = 0;
+	regex_t		re;
 
 	for (i = 0; i < ZBX_DSTAT_MAX; i++)
 		dstat[i] = (zbx_uint64_t)__UINT64_C(0);
 
+	if (   (devname == NULL || '\0' == *devname || 0 == strcmp(devname, "all"))
+	    && CONFIG_DISK_FILTER != NULL)
+		devname = CONFIG_DISK_FILTER;
+
 	if (NULL != devname && '\0' != *devname && 0 != strcmp(devname, "all"))
 	{
 		*dev_path = '\0';
@@ -96,21 +105,26 @@
 	if (NULL == (f = fopen(INFO_FILE_NAME, "r")))
 		return FAIL;
 
+	if ('^' == *devname || '(' == *devname)
+		is_re = (regcomp(&re, devname, REG_EXTENDED|REG_NOSUB) == 0);
+	else
+		is_re = 0;
+
+	zabbix_log(LOG_LEVEL_DEBUG, "get_diskstat: is_re=%d, if_name=[%s]", is_re, devname);
+
 	while (NULL != fgets(tmp, sizeof(tmp), f))
 	{
 		PARSE(tmp);
 
-		if (NULL != devname && '\0' != *devname && 0 != strcmp(devname, "all"))
+		if (is_re || (NULL != devname && '\0' != *devname && 0 != strcmp(devname, "all")))
 		{
-			if (0 != strcmp(name, devname))
+			if (is_re ? regexec(&re, name, (size_t) 0, NULL, 0) : strcmp (devname, name))
 			{
 				if (SUCCEED != dev_exists
 					|| major(dev_st.st_rdev) != rdev_major
 					|| minor(dev_st.st_rdev) != rdev_minor)
 					continue;
 			}
-			else
-				found = 1;
 		}
 
 		dstat[ZBX_DSTAT_R_OPER] += ds[ZBX_DSTAT_R_OPER];
@@ -119,10 +133,10 @@
 		dstat[ZBX_DSTAT_W_SECT] += ds[ZBX_DSTAT_W_SECT];
 
 		ret = SUCCEED;
-
-		if (1 == found)
-			break;
 	}
+
+	if (is_re) regfree(&re);
+
 	zbx_fclose(f);
 
 	return ret;
diff -ruN zabbix-6.0.33.orig/src/libs/zbxsysinfo/linux/diskio.c.rej zabbix-6.0.33/src/libs/zbxsysinfo/linux/diskio.c.rej
--- zabbix-6.0.33.orig/src/libs/zbxsysinfo/linux/diskio.c.rej	1970-01-01 01:00:00.000000000 +0100
+++ zabbix-6.0.33/src/libs/zbxsysinfo/linux/diskio.c.rej	2024-09-26 17:08:20.283912701 +0200
@@ -0,0 +1,15 @@
+--- src/libs/zbxsysinfo/linux/diskio.c	2021-02-22 09:57:11.000000000 +0100
++++ src/libs/zbxsysinfo/linux/diskio.c	2021-08-01 11:15:04.217908964 +0200
+@@ -17,10 +17,12 @@
+ ** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ **/
+ 
++#include <regex.h>
+ #include "common.h"
+ #include "sysinfo.h"
+ #include "stats.h"
+ #include "diskdevices.h"
++#include "log.h"
+ 
+ #define ZBX_DEV_PFX	"/dev/"
+ #define ZBX_DEV_READ	0
diff -ruN zabbix-6.0.33.orig/src/libs/zbxsysinfo/linux/net.c zabbix-6.0.33/src/libs/zbxsysinfo/linux/net.c
--- zabbix-6.0.33.orig/src/libs/zbxsysinfo/linux/net.c	2024-08-13 12:25:56.413517151 +0200
+++ zabbix-6.0.33/src/libs/zbxsysinfo/linux/net.c	2024-09-26 17:08:20.284912682 +0200
@@ -17,6 +17,7 @@
 ** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 **/
 
+#include <regex.h>
 #include "common.h"
 #include "sysinfo.h"
 #include "zbxjson.h"
@@ -240,9 +241,15 @@
 
 static int	get_net_stat(const char *if_name, net_stat_t *result, char **error)
 {
-	int	ret = SYSINFO_RET_FAIL;
-	char	line[MAX_STRING_LEN], name[MAX_STRING_LEN], *p;
-	FILE	*f;
+	extern char     *CONFIG_NIC_FILTER;
+	int             ret = SYSINFO_RET_FAIL;
+	char            line[MAX_STRING_LEN], name[MAX_STRING_LEN], *p;
+	FILE            *f;
+	net_stat_t      tmpstat;
+	int             is_re;
+	regex_t         re;
+
+	memset(result, 0, sizeof(*result));
 
 	if (NULL == if_name || '\0' == *if_name)
 	{
@@ -250,6 +257,16 @@
 		return SYSINFO_RET_FAIL;
 	}
 
+	if (0 == strcmp (if_name, "all") && CONFIG_NIC_FILTER != NULL)
+		if_name = CONFIG_NIC_FILTER;
+
+	if ('^' == *if_name || '(' == *if_name)
+		is_re = (regcomp(&re, if_name, REG_EXTENDED|REG_NOSUB) == 0);
+	else
+		is_re = 0;
+
+	zabbix_log(LOG_LEVEL_DEBUG, "get_net_stat: is_re=%d, if_name=[%s]", is_re, if_name);
+
 	if (NULL == (f = fopen("/proc/net/dev", "r")))
 	{
 		*error = zbx_dsprintf(NULL, "Cannot open /proc/net/dev: %s", zbx_strerror(errno));
@@ -272,33 +289,51 @@
 				ZBX_FS_UI64 "\t" ZBX_FS_UI64 "\t"
 				ZBX_FS_UI64 "\t" ZBX_FS_UI64 "\n",
 				name,
-				&result->ibytes,	/* bytes */
-				&result->ipackets,	/* packets */
-				&result->ierr,		/* errs */
-				&result->idrop,		/* drop */
-				&result->ififo,		/* fifo (overruns) */
-				&result->iframe,	/* frame */
-				&result->icompressed,	/* compressed */
-				&result->imulticast,	/* multicast */
-				&result->obytes,	/* bytes */
-				&result->opackets,	/* packets */
-				&result->oerr,		/* errs */
-				&result->odrop,		/* drop */
-				&result->ofifo,		/* fifo (overruns)*/
-				&result->ocolls,	/* colls (collisions) */
-				&result->ocarrier,	/* carrier */
-				&result->ocompressed))	/* compressed */
+				&tmpstat.ibytes,	/* bytes */
+				&tmpstat.ipackets,	/* packets */
+				&tmpstat.ierr,		/* errs */
+				&tmpstat.idrop,		/* drop */
+				&tmpstat.ififo,		/* fifo (overruns) */
+				&tmpstat.iframe,	/* frame */
+				&tmpstat.icompressed,	/* compressed */
+				&tmpstat.imulticast,	/* multicast */
+				&tmpstat.obytes,	/* bytes */
+				&tmpstat.opackets,	/* packets */
+				&tmpstat.oerr,		/* errs */
+				&tmpstat.odrop,		/* drop */
+				&tmpstat.ofifo,		/* fifo (overruns)*/
+				&tmpstat.ocolls,	/* colls (collisions) */
+				&tmpstat.ocarrier,	/* carrier */
+				&tmpstat.ocompressed))	/* compressed */
 		{
-			if (0 == strcmp(name, if_name))
+			if (!(is_re ? regexec(&re, name, (size_t) 0, NULL, 0) : strcmp (if_name, name)))
 			{
+				result->ibytes      += tmpstat.ibytes;
+				result->ipackets    += tmpstat.ipackets;
+				result->ierr        += tmpstat.ierr;
+				result->idrop       += tmpstat.idrop;
+				result->ififo       += tmpstat.ififo;
+				result->iframe      += tmpstat.iframe;
+				result->icompressed += tmpstat.icompressed;
+				result->imulticast  += tmpstat.imulticast;
+				result->obytes      += tmpstat.obytes;
+				result->opackets    += tmpstat.opackets;
+				result->oerr        += tmpstat.oerr;
+				result->odrop       += tmpstat.odrop;
+				result->ofifo       += tmpstat.ofifo;
+				result->ocolls      += tmpstat.ocolls;
+				result->ocarrier    += tmpstat.ocarrier;
+				result->ocompressed += tmpstat.ocompressed;
+
 				ret = SYSINFO_RET_OK;
-				break;
 			}
 		}
 	}
 
 	zbx_fclose(f);
 
+	if (is_re) regfree(&re);
+
 	if (SYSINFO_RET_FAIL == ret)
 	{
 		*error = zbx_strdup(NULL, "Cannot find information for this network interface in /proc/net/dev.");
diff -ruN zabbix-6.0.33.orig/src/zabbix_agent/active.h zabbix-6.0.33/src/zabbix_agent/active.h
--- zabbix-6.0.33.orig/src/zabbix_agent/active.h	2024-08-13 12:25:56.421517203 +0200
+++ zabbix-6.0.33/src/zabbix_agent/active.h	2024-09-26 17:08:20.284912682 +0200
@@ -34,6 +34,8 @@
 extern int	CONFIG_MAX_LINES_PER_SECOND;
 extern char	*CONFIG_LISTEN_IP;
 extern int	CONFIG_LISTEN_PORT;
+extern char	*CONFIG_DISK_FILTER;
+extern char	*CONFIG_NIC_FILTER;
 
 extern ZBX_THREAD_LOCAL char	*CONFIG_HOSTNAME;
 
diff -ruN zabbix-6.0.33.orig/src/zabbix_agent/zabbix_agentd.c zabbix-6.0.33/src/zabbix_agent/zabbix_agentd.c
--- zabbix-6.0.33.orig/src/zabbix_agent/zabbix_agentd.c	2024-08-13 12:25:56.425517229 +0200
+++ zabbix-6.0.33/src/zabbix_agent/zabbix_agentd.c	2024-09-26 17:08:20.285912663 +0200
@@ -58,6 +58,8 @@
 char	**CONFIG_PERF_COUNTERS		= NULL;
 char	**CONFIG_PERF_COUNTERS_EN	= NULL;
 #endif
+char	*CONFIG_DISK_FILTER		= NULL;
+char	*CONFIG_NIC_FILTER		= NULL;
 
 char	*CONFIG_USER			= NULL;
 
@@ -904,6 +906,10 @@
 		{"PerfCounterEn",		&CONFIG_PERF_COUNTERS_EN,		TYPE_MULTISTRING,
 			PARM_OPT,	0,			0},
 #endif
+		{"DiskFilter",                  &CONFIG_DISK_FILTER,                    TYPE_STRING,
+			PARM_OPT,       0,                      0},
+		{"NicFilter",                   &CONFIG_NIC_FILTER,                     TYPE_STRING,
+			PARM_OPT,       0,                      0},
 		{"TLSConnect",			&CONFIG_TLS_CONNECT,			TYPE_STRING,
 			PARM_OPT,	0,			0},
 		{"TLSAccept",			&CONFIG_TLS_ACCEPT,			TYPE_STRING_LIST,
diff -ruN zabbix-6.0.33.orig/src/zabbix_agent/zbxconf.h zabbix-6.0.33/src/zabbix_agent/zbxconf.h
--- zabbix-6.0.33.orig/src/zabbix_agent/zbxconf.h	2024-08-13 12:25:56.425517229 +0200
+++ zabbix-6.0.33/src/zabbix_agent/zbxconf.h	2024-09-26 17:08:20.285912663 +0200
@@ -65,6 +65,9 @@
 #ifdef _WINDOWS
 void	load_perf_counters(const char **def_lines, const char **eng_lines);
 #endif
+extern char	*CONFIG_DISK_FILTER;
+extern char	*CONFIG_NIC_FILTER;
+
 
 #ifdef _AIX
 void	tl_version(void);
