Re: Stresstest fuer syslog-Server?

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Thu, 14 Jul 2005 12:18:53 +0200 (CEST)

Olaf Hoyer <ohoyer(at)ohoyer.de> wrote:
> [Loghost mit syslog-ng]
> Funktioniert auch soweit alles, jetzt wollte ich einfach mal den
> Datendurchsatz testen, bzw. auch mal ein Gefuehl bekommen, bei welcher
> Groessenordnung die Lastgrenze bzw. Filterleistung des Loghosts
> erschoepft ist, bevor erste Umstellungen in der Produktivumgebung
> vorgenommen werden. Dazu hatte ich dann auf einer Workstation unter
> FreeBSD 4.11 prinzipiell versucht, per:
>
> logger -h localhost `echo foobar`
>
> in einen lokal installierten syslog Daten reinzuwerfen , die dieser
> ueber ein remotehost-statement an den zu testenden loghost reinwerfen
> soll. Was mich irritiert, ist, dass, wenn obige Zeile in eine
> Endlosschleife eingebunden wird, lediglich 100-150 Zeilen/Sekunde
> geloggt werden, beide Kisten keine erkennbare Last haben (90% idle)
> und das Limit bei udp-Logging irgendwo in der Gegend von ca. 3000
> Zeilen/Sekunde liegt.

Nunja, wenn Du in einer Skript-Schleife ständig logger(1)
aufrufst, dürfte der fork/exec-Overhead im Kernel signifi-
kant sein. Ein besserer Test wäre, ein kleines C-Programm
zu schreiben, das in einer Schleife syslog(3) aufruft.

So aus'm Kopf (nenn' es »logtest.c«):

#include <syslog.h>
int main (void) {
        openlog ("logtest", LOG_PID, LOG_AUTH);
        for (;;)
                syslog (LOG_DEBUG, "Dies ist eine syslog-Testmeldung.");
        return 0;
}

Statt LOG_DEBUG mußt Du evtl. eine andere Priorität nehmen,
je nach Deiner /etc/syslog.conf. Siehe auch die syslog(3)-
manpage. Compilieren mit »cc -O -o logtest logtest.c«.

Du kannst mehrere dieser Testprozesse parallel starten.
Z.B. startet diese Zeile ca. 20 Stück (sh-Syntax):

for i in $(jot 20); do ./logtest & done

Allerdings hilft es nicht viel, beliebig viele Prozesse
parallel loggen zu lassen, da ja eh alles durch den einen
syslogd-Daemon durchgehen muß. Aber Du kanst das ganze
natürlich auf mehreren Client-Maschinen parallel machen.

Bei hinreichend großem Log-Volumen kann es natürlich dann
auch passieren, daß UDP-Paket gedroppt werden und somit
Log-Meldungen unerkannt verlorengehen.

Allerdings sind 3000 Zeilen/Sekunde (d.h. 3000 UDP-Pakete
pro Sekunde) aus Netzwerksicht noch nicht so wahnsinnig
viel, es sei denn die Rechner hängen an einem ungeswitchten
10base-2 oder so, was ich aber für unwahrscheinlich halte.

Man muß aber berücksichtigen, daß aus syslog-Sicht in der
Praxis 3000 Zeilen/Sek. schon relativ viel ist. Normaler-
weise solltest Du kein so großes Log-Volumen haben. Log-
Einträge sollten ja nur bei Fehlern oder sonstigen Aus-
nahmebedingungen gemacht werden. Wenn man mal zum Debuggen
den Loglevel irgendwo (vorübergehend!) hochdrehen muß,
empfiehlt es sich eh, die zugehörigen Meldungen nur lokal
zum Auswerten loggen. Es ergibt nicht unbedingt Sinn,
damit den Loghost zu belasten.

Bedenke auch, daß so ein Mammut-Log ja auch irgendwie sinn-
voll ausgewertet werden sollte. Wenn Du tatsächlich dauer-
hatf 3000 Zeilen pro Sekunde loggen willst und man mal im
Schnitt 100 Zeichen pro Zeile annimmt, dann sind da runde
25 GByte pro Tag. Ich glaube nicht, daß Du tatsächlich
dauerhaft soviel loggen willst.

Gruß
   Olli

-- 
Oliver Fromme,  secnetix GmbH & Co KG, Marktplatz 29, 85567 Grafing
Any opinions expressed in this message may be personal to the author
and may not necessarily reflect the opinions of secnetix in any way.
"IRIX is about as stable as a one-legged drunk with hypothermia
in a four-hundred mile per hour wind, balancing on a banana
peel on a greased cookie sheet -- when someone throws him an
elephant with bad breath and a worse temper."
        -- Ralf Hildebrandt
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Thu 14 Jul 2005 - 12:19:26 CEST

search this site