diff --git a/include/common.h b/include/common.h
index bff1bd9..1dd8c6c 100644
--- a/include/common.h
+++ b/include/common.h
@@ -414,6 +414,7 @@ typedef enum
 
 /* runtime control options */
 #define ZBX_CONFIG_CACHE_RELOAD	"config_cache_reload"
+#define ZBX_CONFIG_DEBUGLEVEL_CYCLE	"config_debuglevel_cycle"
 
 /* value for not supported items */
 #define ZBX_NOTSUPPORTED	"ZBX_NOTSUPPORTED"
@@ -764,7 +765,8 @@ typedef enum
 	ZBX_TASK_START_SERVICE,
 	ZBX_TASK_STOP_SERVICE,
 	ZBX_TASK_CHANGE_NODEID,
-	ZBX_TASK_CONFIG_CACHE_RELOAD
+	ZBX_TASK_CONFIG_CACHE_RELOAD,
+	ZBX_TASK_CONFIG_DEBUGLEVEL_CYCLE
 }
 zbx_task_t;
 
diff --git a/include/log.h b/include/log.h
index 3238117..750c033 100644
--- a/include/log.h
+++ b/include/log.h
@@ -59,6 +59,7 @@ void __zbx_zabbix_log(int level, const char *fmt, ...);
 
 void zabbix_close_log();
 void zabbix_set_log_level(int level);
+int zabbix_get_log_level();
 
 char *zbx_strerror(int errnum);
 char *strerror_from_system(unsigned long error);
diff --git a/src/libs/zbxlog/log.c b/src/libs/zbxlog/log.c
index 0562f6e..9c28b92 100644
--- a/src/libs/zbxlog/log.c
+++ b/src/libs/zbxlog/log.c
@@ -150,6 +150,11 @@ void zabbix_set_log_level(int level)
 	log_level = level;
 }
 
+int zabbix_get_log_level()
+{
+	return log_level;
+}
+
 void zabbix_errlog(zbx_err_codes_t err, ...)
 {
 	const char	*msg;
diff --git a/src/libs/zbxnix/daemon.c b/src/libs/zbxnix/daemon.c
index 01ae7fd..4410584 100644
--- a/src/libs/zbxnix/daemon.c
+++ b/src/libs/zbxnix/daemon.c
@@ -106,6 +106,28 @@ static void	child_signal_handler(int sig, siginfo_t *siginfo, void *context)
 					}
 				}
 			}
+			else if (ZBX_TASK_CONFIG_DEBUGLEVEL_CYCLE == CHECKED_FIELD(siginfo, si_value.ZBX_SIVAL_INT))
+			{
+				union sigval	s;
+				extern int	threads_num;
+				extern pid_t	*threads;
+				int i = 0;
+
+				s.ZBX_SIVAL_INT = ZBX_TASK_CONFIG_DEBUGLEVEL_CYCLE;
+
+				for (i = 0; i < threads_num; i++)
+				{
+					if (-1 != sigqueue(threads[i], SIGUSR1, s))
+					{
+						zabbix_log(LOG_LEVEL_DEBUG, "the signal is redirected to %d", threads[i]);
+					}
+					else
+					{
+						zabbix_log(LOG_LEVEL_ERR, "failed to redirect signal: %s",
+								zbx_strerror(errno));
+					}
+				}
+			}
 #endif
 			break;
 		case SIGQUIT:
diff --git a/src/zabbix_server/server.c b/src/zabbix_server/server.c
index 58a8cdc..7f665c1 100644
--- a/src/zabbix_server/server.c
+++ b/src/zabbix_server/server.c
@@ -70,6 +70,7 @@ const char	*help_message[] = {
 	"",
 	"Runtime control options:",
 	"  " ZBX_CONFIG_CACHE_RELOAD "             Reload configuration cache",
+	"  " ZBX_CONFIG_DEBUGLEVEL_CYCLE "             Cycle DebugLevel config",
 	"",
 	"Other options:",
 	"  -h --help                       Give this help",
@@ -398,6 +399,8 @@ static void	zbx_load_config()
 #ifdef HAVE_SIGQUEUE
 void	zbx_sigusr_handler(zbx_task_t task)
 {
+	int current_log_level = 0;
+	int cycle_log_level = 0;
 	switch (task)
 	{
 		case ZBX_TASK_CONFIG_CACHE_RELOAD:
@@ -407,6 +410,12 @@ void	zbx_sigusr_handler(zbx_task_t task)
 				zbx_wakeup();
 			}
 			break;
+		case ZBX_TASK_CONFIG_DEBUGLEVEL_CYCLE:
+			current_log_level = zabbix_get_log_level();
+			cycle_log_level = current_log_level+1 > LOG_LEVEL_DEBUG ? 0 : current_log_level+1;
+			zabbix_log(LOG_LEVEL_INFORMATION, "runtime debug level cycle; new log level: %d in process: %d", cycle_log_level, process_type);
+			zabbix_set_log_level(cycle_log_level);
+			break;
 		default:
 			break;
 	}
@@ -441,6 +450,8 @@ int	main(int argc, char **argv)
 			case 'R':
 				if (0 == strcmp(zbx_optarg, ZBX_CONFIG_CACHE_RELOAD))
 					task = ZBX_TASK_CONFIG_CACHE_RELOAD;
+				else if (0 == strcmp(zbx_optarg, ZBX_CONFIG_DEBUGLEVEL_CYCLE))
+					task = ZBX_TASK_CONFIG_DEBUGLEVEL_CYCLE;
 				else
 				{
 					printf("invalid runtime control option: %s\n", zbx_optarg);
@@ -476,6 +487,8 @@ int	main(int argc, char **argv)
 
 	if (ZBX_TASK_CONFIG_CACHE_RELOAD == task)
 		exit(SUCCEED == zbx_sigusr_send(ZBX_TASK_CONFIG_CACHE_RELOAD) ? EXIT_SUCCESS : EXIT_FAILURE);
+	if (ZBX_TASK_CONFIG_DEBUGLEVEL_CYCLE == task)
+		exit(SUCCEED == zbx_sigusr_send(ZBX_TASK_CONFIG_DEBUGLEVEL_CYCLE) ? EXIT_SUCCESS : EXIT_FAILURE);
 
 #ifdef HAVE_OPENIPMI
 	init_ipmi_handler();
