[syslog-ng]FYI: Performance

Jay Guerette syslog-ng@lists.balabit.hu
Tue, 30 Nov 2004 11:27:11 -0500


------=_Part_485_30281192.1101832031833
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

( I hope I don't offend anyone with an attachment, it's only 8k. )

My largest single-server syslog-ng implementation currently handles
over 13M lines per day, totalling about 1.8Gb per day. I've only
recently been able to gather this data by creating a process to count
incoming lines, sum their lengths, and report via syslog at 1 minute
intervals. See attached graph ( if the attachment survived ).

I added this configuration before all other entries to make sure it
sees everything:

<syslog-ng.conf>
destination syslog-perf {
        program(syslog-perf);
};
log {
        source(syslog);
        destination(syslog-perf);
};
</syslog-ng.conf>

I originally tried this in Perl, then Bash, but neither could keep up
with the incoming messages. This works like a champ. It compiles on
Linux. The output format is specific to my syslog-to-rrd
implementation, but you get the idea. It is suitable for an
installation that is assured of at least 1 message for each reporting
interval!

<syslog-perf.c>
#include <stdio.h>
#include <time.h>
#include <syslog.h>

#define BUFFER_SIZE 8192
#define REPORT_INTERVAL 60

void main(void) {

char buf[BUFFER_SIZE];
long count, bytes;
time_t lastupdate;

lastupdate = time(NULL);
while (fgets(buf, BUFFER_SIZE, stdin)) {
   count++;
   bytes += (strlen(buf) - 1);
   if (time(NULL) > (lastupdate + REPORT_INTERVAL)) {
      openlog("127.0.0.1", LOG_NDELAY, LOG_LOCAL3);
      syslog(LOG_INFO, "Syslog-ng\\Lines=%d Syslog-ng\\Bytes=%d", count, bytes);
      closelog();
      lastupdate += REPORT_INTERVAL;
      count = 0;
      bytes = 0;
   }
}

}
</syslog-perf.c>

------=_Part_485_30281192.1101832031833
Content-Type: image/png; name="syslog-ng.png"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="syslog-ng.png"

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
bXw1aR/Tv4mmbUoNpPY8B5f/l31bG3+c9hqpfa/3Ve2ub3gfavAtg+8NK6SSUnqp3XcO34tzS+uv
QOrCPhV39A9P3TKWoy48VS9Zfqct1St4Kk9Dv9U+9SB1nDRPS70CqT94sjqm/9PGtOtI6EfDTeof
f4cjNDLAm/4afidPFXmi191jSj0VtB6k3sPeQh0l9Te7S/UannqQuuByd4rpqb/bTeqX8NQ6qfwa
s17293omC3eO2jdUu5vUZ21w4akL1/7g0q/9yerf77Sl+mrc+0zV7q03sfM3vbT+uT8YzUh9p/up
0sl98+OZnspbKvMtVTb96arhPpzfUauV1BmHM8Gd6Dn966SCyDwcpLYzzLM/w9xTTZ6OB6kHqS0M
zGb7TNBipaJDT61vqZKPWiJUKr+o6BXW1IPU6BxP9NSFferhqZHrzfGbnf3PLc70EtP/jbZUfITD
rQAVuaWj5bMBmgmazMyVdEtV3fy/5PR/G1Jvbf57pTfMB+QbJO9OKrj0a398reJVLlPfh9T6r1Mu
+O0s/l7raz/vQ+rP6qepYPTw1PtWOG6p6p7KOZ+FY01tJ/jd9qnvsqU6PDX64DP3qfU7/9nUZ/KY
/pH627Fu/sHZm9xPfZuzv7rkQSoc8JnTn6wepB6krq1r2CDIWnkqmznmTJBUtyWONTXj6yA1I6NM
3u+pd3+1pQRgX/qtr6mv+LWffc/++5OqDyjrwTduATz0tZ8nfZlGv1vz1WCsQcW+p9OsOPlaz62s
fu0HnFXO/pdLvKFCUh/Y/NszkScz5M7su3sqnjcXv/VHVsOdNODByXJ31VnFtyeV/jmGMOtgq+Ag
dWRxkjpIbXUi/8kP+Nvxiurw1Il/jtn38VRs4aXJq2Z7/f23VCOfTK3+OG19b7Jeemt/Upa3bKnK
Giu5KbBpfqXqatFzfpw2G/LCUVrO2EWFlUyLLbnXU/3fOSw0v2EVe8q1/x2krldZ6Be2Z+fFolQg
e5LahPvZpA7o0iRUiWgCNzGELGzdrCm/HamVtf7PIpVj3uCpvZ6yApSXQuY8JHXy1bxvIPW8hLSQ
Z7BV3rKmTusUBpmhwjKpG75MkbWkpJ6Lpp5JKv61UNZY0UzKCIa15dp4xuFMkEwyYSeqm61TYZlU
POXHvqFy+2k/WUt/OqnqQcukPs9T+b+opiEbh2nRWl74f8ZuBPlOT71Bqq6k4yGsdCXrZ81TfyNS
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

------=_Part_485_30281192.1101832031833--