diff --git a/print-main-queue-info-to-journal-when-queue-full.patch b/print-main-queue-info-to-journal-when-queue-full.patch new file mode 100644 index 0000000000000000000000000000000000000000..d44fa78e96da1461d2c4bd066cb608ab1deb7650 --- /dev/null +++ b/print-main-queue-info-to-journal-when-queue-full.patch @@ -0,0 +1,77 @@ +From 27ee1b988a465e5f89e8a9234f4a01c34cab4387 Mon Sep 17 00:00:00 2001 +From: wangshouping +Date: Mon, 27 Apr 2020 08:53:18 -0400 +Subject: [PATCH] print main queue info to journal when queue full +Signed-off-by: wangshouping +--- + runtime/queue.c | 27 +++++++++++++++++++++++++++ + 1 files changed, 45 insertions(+), 1 deletion(-) +diff --git a/runtime/queue.c b/runtime/queue.c +index e988e44..9faf5aa 100644 +--- a/runtime/queue.c ++++ b/runtime/queue.c +@@ -47,6 +47,7 @@ + #include + #include + #include ++#include + + #include "rsyslog.h" + #include "queue.h" +@@ -116,6 +117,14 @@ rsRetVal qqueueSetSpoolDir(qqueue_t *pThis, uchar *pszSpoolDir, int lenSpoolDir) + /* some constants for queuePersist () */ + #define QUEUE_CHECKPOINT 1 + #define QUEUE_NO_CHECKPOINT 0 ++#define TIME_OUT 300 ++#define TIMEOUT_ENQUEUE_ZERO 1 ++#define TIMEOUT_ENQUEUE_NONZERO 2 ++ ++struct timespec g_lastTime = { ++ .tv_sec = 0, ++ .tv_nsec = 0, ++}; + + /* tables for interfacing with the v6 config system */ + static struct cnfparamdescr cnfpdescr[] = { +@@ -2985,6 +2992,24 @@ finalize_it: + RETiRet; + } + ++void PrintQueueFullLog(qqueue_t *pThis, int flag) ++{ ++ struct timespec timeNow; ++ ++ clock_gettime(CLOCK_MONOTONIC, &timeNow); ++ if (timeNow.tv_sec - g_lastTime.tv_sec > TIME_OUT) { ++ if (flag == TIMEOUT_ENQUEUE_ZERO) { ++ sd_journal_print(LOG_NOTICE, "doEnqSingleObject: queue FULL - configured for immediate " ++ "discarding QueueSize=%d MaxQueueSize=%d sizeOnDisk=%lld " ++ "sizeOnDiskMax=%lld\n", pThis->iQueueSize, pThis->iMaxQueueSize, ++ pThis->tVars.disk.sizeOnDisk, pThis->sizeOnDiskMax); ++ } else if (flag == TIMEOUT_ENQUEUE_NONZERO) { ++ sd_journal_print(LOG_NOTICE, "doEnqSingleObject: queue FULL, iQueueSize=%d MaxQueueSize=%d - waiting %dms to drain.\n", ++ pThis->iQueueSize, pThis->iMaxQueueSize, pThis->toEnq); ++ } ++ g_lastTime.tv_sec = timeNow.tv_sec; ++ } ++} + + /* enqueue a single data object. + * Note that the queue mutex MUST already be locked when this function is called. +@@ -3082,12 +3107,14 @@ doEnqSingleObj(qqueue_t *pThis, flowControl_t flowCtlType, smsg_t *pMsg) + "discarding QueueSize=%d MaxQueueSize=%d sizeOnDisk=%lld " + "sizeOnDiskMax=%lld\n", pThis->iQueueSize, pThis->iMaxQueueSize, + pThis->tVars.disk.sizeOnDisk, pThis->sizeOnDiskMax); ++ PrintQueueFullLog(pThis, TIMEOUT_ENQUEUE_ZERO); + STATSCOUNTER_INC(pThis->ctrFDscrd, pThis->mutCtrFDscrd); + msgDestruct(&pMsg); + ABORT_FINALIZE(RS_RET_QUEUE_FULL); + } else { + DBGOPRINT((obj_t*) pThis, "doEnqSingleObject: queue FULL - waiting %dms to drain.\n", + pThis->toEnq); ++ PrintQueueFullLog(pThis, TIMEOUT_ENQUEUE_NONZERO); + if(glbl.GetGlobalInputTermState()) { + DBGOPRINT((obj_t*) pThis, "doEnqSingleObject: queue FULL, discard due to " + "FORCE_TERM.\n"); +-- +2.19.1 diff --git a/print-main-queue-info-to-journal-when-receive-USR1-signal.patch b/print-main-queue-info-to-journal-when-receive-USR1-signal.patch new file mode 100644 index 0000000000000000000000000000000000000000..4b9c59fed12b329da9283206d0784fcd7a5dd0de --- /dev/null +++ b/print-main-queue-info-to-journal-when-receive-USR1-signal.patch @@ -0,0 +1,77 @@ +From 27ee1b988a465e5f89e8a9234f4a01c34cab4387 Mon Sep 17 00:00:00 2001 +From: wangshouping +Date: Mon, 27 Apr 2020 08:53:18 -0400 +Subject: [PATCH] print main queue info to journal when receive USR1 signal +Signed-off-by: wangshouping +--- + tools/rsyslogd.c | 19 ++++++++++++++++++- + 1 files changed, 45 insertions(+), 1 deletion(-) +diff --git a/tools/rsyslogd.c b/tools/rsyslogd.c +index 7832693..ad92b20 100644 +--- a/tools/rsyslogd.c ++++ b/tools/rsyslogd.c +@@ -38,6 +38,7 @@ + #ifdef HAVE_LIBSYSTEMD + # include + #endif ++#include + + #include "rsyslog.h" + #include "wti.h" +@@ -181,6 +182,7 @@ void rsyslogdDoDie(int sig); + /* global data items */ + static int bChildDied; + static int bHadHUP; ++static int g_bRecordQueue; + static int doFork = 1; /* fork - run in daemon mode - read-only after startup */ + int bFinished = 0; /* used by termination signal handler, read-only except there + * is either 0 or the number of the signal that requested the +@@ -1267,8 +1269,13 @@ rsyslogdDebugSwitch(void) + dbgprintf("\n"); + debugging_on = 0; + } ++ + } + ++static void RsyslogdDebugQueue(void) ++{ ++ g_bRecordQueue = 1; ++} + + /* This is the main entry point into rsyslogd. Over time, we should try to + * modularize it a bit more... +@@ -1616,7 +1623,7 @@ initAll(int argc, char **argv) + hdlr_enable(SIGINT, rsyslogdDoDie); + hdlr_enable(SIGQUIT, rsyslogdDoDie); + } else { +- hdlr_enable(SIGUSR1, SIG_IGN); ++ hdlr_enable(SIGUSR1, RsyslogdDebugQueue); + hdlr_enable(SIGINT, SIG_IGN); + hdlr_enable(SIGQUIT, SIG_IGN); + } +@@ -1953,6 +1960,7 @@ mainloop(void) + sigaddset(&sigblockset, SIGTERM); + sigaddset(&sigblockset, SIGCHLD); + sigaddset(&sigblockset, SIGHUP); ++ sigaddset(&sigblockset, SIGUSR1); + + do { + processImInternal(); +@@ -1967,6 +1975,15 @@ mainloop(void) + doHUP(); + bHadHUP = 0; + } ++ if (g_bRecordQueue) { ++ if (pMsgQueue != NULL) { ++ sd_journal_print(LOG_NOTICE, "main queue size information: current QueueSize=%d MaxQueueSize=%d\n", ++ pMsgQueue->iQueueSize, pMsgQueue->iMaxQueueSize); ++ } else { ++ sd_journal_print(LOG_NOTICE, "main queue size information: pMsgQueue is NULL!\n"); ++ } ++ g_bRecordQueue = 0; ++ } + + if(bFinished) + break; /* exit as quickly as possible */ +-- +2.19.1 diff --git a/rsyslog.spec b/rsyslog.spec index 91360391ac01e91a18dac97aa9aa683be3feda34..c5383b0b6074406e29029bec6c791651648d6950 100644 --- a/rsyslog.spec +++ b/rsyslog.spec @@ -4,7 +4,7 @@ Name: rsyslog Version: 8.2110.0 -Release: 2 +Release: 3 Summary: The rocket-fast system for log processing License: (GPLv3+ and ASL 2.0) URL: http://www.rsyslog.com/ @@ -23,6 +23,8 @@ Patch9001: bugfix-rsyslog-7.4.7-imjournal-add-monotonic-timestamp.patch Patch9002: bugfix-rsyslog-7.4.7-add-configuration-to-avoid-memory-leak.patch Patch9003: rsyslog-8.24.0-set-permission-of-syslogd-dot-pid-to-0644.patch Patch9004: rsyslog-8.37.0-initialize-variables-and-check-return-value.patch +Patch9005: print-main-queue-info-to-journal-when-queue-full.patch +Patch9006: print-main-queue-info-to-journal-when-receive-USR1-signal.patch BuildRequires: gcc autoconf automake bison dos2unix flex pkgconfig python3-docutils libtool BuildRequires: libgcrypt-devel libuuid-devel zlib-devel krb5-devel libnet-devel gnutls-devel @@ -472,6 +474,9 @@ done %{_mandir}/man1/rscryutil.1.gz %changelog +* Wed Jan 2022 xingxing - 8.2110.0-3 +- print main queue info to journal + * Tue Dec 2021 wuchaochao - 8.2110.0-2 - move rsyslog-crypto rsyslog-doc rsyslog-elasticsearch rsyslog-mmjsonparse syslog-mmaudit rsyslog-mmsnmptrapd rsyslog-mysql syslog-gssapi rsyslog-gnutls rsyslog-updspoof from rsyslog