MINOR: log: report the number of dropped logs in the stats

It's easy to detect when logs on some paths are lost as sendmsg() will
return EAGAIN. This is particularly true when sending to /dev/log, which
often doesn't support a big logging capacity. Let's keep track of these
and report the total number of dropped messages in "show info".
This commit is contained in:
Willy Tarreau 2018-11-12 07:25:28 +01:00
parent adb345d485
commit 13ef773722
4 changed files with 11 additions and 1 deletions

View File

@ -46,6 +46,8 @@ extern char clf_http_log_format[];
extern char default_rfc5424_sd_log_format[];
extern unsigned int dropped_logs;
extern THREAD_LOCAL char *logheader;
extern THREAD_LOCAL char *logheader_rfc5424;
extern THREAD_LOCAL char *logline;

View File

@ -293,6 +293,7 @@ enum info_field {
INF_LISTENERS,
INF_ACTIVE_PEERS,
INF_CONNECTED_PEERS,
INF_DROPPED_LOGS,
/* must always be the last one */
INF_TOTAL_FIELDS

View File

@ -210,6 +210,9 @@ char *log_format = NULL;
*/
char default_rfc5424_sd_log_format[] = "- ";
/* total number of dropped logs */
unsigned int dropped_logs = 0;
/* This is a global syslog header, common to all outgoing messages in
* RFC3164 format. It begins with time-based part and is updated by
* update_log_hdr().
@ -1478,7 +1481,9 @@ send:
if (sent < 0) {
static char once;
if (!once) {
if (errno == EAGAIN)
HA_ATOMIC_ADD(&dropped_logs, 1);
else if (!once) {
once = 1; /* note: no need for atomic ops here */
ha_alert("sendmsg() failed in logger #%d: %s (errno=%d)\n",
nblogger, strerror(errno), errno);

View File

@ -135,6 +135,7 @@ const char *info_field_names[INF_TOTAL_FIELDS] = {
[INF_LISTENERS] = "Listeners",
[INF_ACTIVE_PEERS] = "ActivePeers",
[INF_CONNECTED_PEERS] = "ConnectedPeers",
[INF_DROPPED_LOGS] = "DroppedLogs",
};
const char *stat_field_names[ST_F_TOTAL_FIELDS] = {
@ -3302,6 +3303,7 @@ int stats_fill_info(struct field *info, int len)
info[INF_LISTENERS] = mkf_u32(0, listeners);
info[INF_ACTIVE_PEERS] = mkf_u32(0, active_peers);
info[INF_CONNECTED_PEERS] = mkf_u32(0, connected_peers);
info[INF_DROPPED_LOGS] = mkf_u32(0, dropped_logs);
return 1;
}