Home About Archive Sitemap

.

Software projects

Hur man sätter upp Syslog Server och Syslog agenter

Syslog Har du ett nätverk hemma med lite servrar, routrar och desktoppar? Har du koll på dina loggar i dessa ? Här har jag samlat lite noteringar om hur man kan ordna det för sig och vad jag funnit ut genom lite försök.





Allmänt om Syslog  

När en nätverks komponent (device) får problem så genereras fel (error) meddelanden. Ofta är det upp till dig var dessa meddelanden tar vägen. Nätverks komponenter liksom servrar(inklusive Windows servrar med agenten som nämns nedan), routers, brandväggar, switchar och även vissa print serverkort stödjer användning av en "syslog" server. En syslog server är en sorts central for log meddelanden och ett sätt för dig att centralisera din monitorering av nätverks system och komponenter. Det är en sorts client/server typ av set up där komponenterna är "clienter".

När du sätter upp en syslog server, kommer komponenterna att skicka sina log meddelanden över nätverket till syslog servern istället för att skriva dem till en lokal fil eller visa dem lokalt. Exempelvis D-LINK routrar skriver dessa till web men bara några sidor om man inte låter dom gå till en 'syslog' server.

Du kan bestämma destinationen som meddelanden skickas, du kan också bestämma vilka meddelanden som clienten (agenten) skickar baserat på vilken allvarlighets nivå (severity) meddelandet har. Dessa nivåer är standardiserade och identifieras av en siffra och/eller en standard förkortning (visas inom parentes):


0 - Emergency (emerg)
1 - Alerts (alert)
2 - Critical (crit)
3 - Errors (err)
4 - Warnings (warn)
5 - Notification (notice)
6 - Information (info)
7 - Debug (debug)

Level 7 betyder att minsta pip skall skickas till syslog servern. Det är bra när du vill testa ut din syslog server så duvet med säkerhet att den fungerar.

Det finns också något som kallas "facilities" wilket är löst relaterat till system processer, ett sätt att katgorisera meddelanden. När en remote komponent skickar ett meddelande till syslog servern så inkluderar den ett standard "facility" värde (tillsammans med severity nivån). Några av de vanliga kategorierna (facilities) är:

auth - authentication (login) messages
cron - messages from the memory-resident scheduler
daemon - messages from resident daemons
kern - kernel messages
lpr - printer messages (used by JetDirect cards)
mail - messages from Sendmail
user - messages from user-initiated processes/apps
local0-local7 - user-defined (see below)
syslog - messages from the syslog process itself

Denna standard finns specifcerad i RFC3164.

local7 används b.l.a av viss Cisco utrustning och Windows servrar. Du kan specificera olika "severity levels" för olika "facilities", t.e.x, logga alla kernel meddelanden men bara "emergency" meddelanden från printrar.
Syslog på Linux (exempelvis Debian) Top of page

Detta görs i Linux med /etc/syslog.conf filen enl. följande format:

facility.severity         log-file-name

Exemplet från ovan om kernel och printer meddelanden i /etc/syslog.conf filen skulle se ut som:

kern.*           /var/log/example.log
lpr.emerg        /var/log/example.log

Notera att filen använder standard förkortningen för "severity level" och inte nummret. Notera också att du kan specificera vilken path och fil namn du vill som mottagare. Du kan även specificera olika logg filer for olika "severities" eller "facilities" eller kombinationer.

Har du satt upp en stor partition med "logs" som monteringspunkt bara för syslogfiler kan det se ut som

kern.*           /logs/enterprise.log
lpr.emerg        /logs/enterprise.log

Om du vill att alla meddelanden från allt skall loggas (exempelvis för test) behövs bara ett entry:

  • .* /logs/enterprise.log

Syslog Server på Linux (exempelvis Debian) Top of page

Det är två saker du måste sätta upp för att ett Linux(jag kör Debian) system skall agera som en logg värd. Det är enkla editeringar av ett par textfiler:


Syslog daemon startas vid system startup default för den hanterar också alla locala log filer och de är många. Om du listar filerna i /var/log katalogen ser du mängden.

För att ta hand om den första punkten måste vi redigera startup scriptet som kör syslogd daemonen när systemet bootas. öppna scriptet med kommandot:

ee /etc/init.d/sysklogd

och titta på en rad i början:

SYSLOGD=""

och ändra till:

SYSLOGD="-r -m0"

(Det är en nolla efter 'm'.) Spara sedan filen. Parametern -r begär att syslogd skall lystna till remota meddelanden. Parametern -m0 stoppar syslogd från att stoppa in en massa irriterande -- MARK -- i dina logg-filer.

För att tala om för syslog daemonen vad den skall göra med alla meddelnden, öppna följande fil:

ee /etc/syslog.conf

och lägg till följande rader i början:

  • .emerg /var/log/enterprise.log
  • .alert /var/log/enterprise.log
  • .crit /var/log/enterprise.log

Tidigare har vi bara talat om att syslogd daemonen skall skriva meddelanden till enterprise.log file. om du vill monitorera Windows serverar och andra komponenter lägg till denna rad också:

local7.debug         /var/log/enterprise.log

Jag använder 'debug' nivån här bara för test så jag vet att min server tar emot och loggar meddelanden. Det kan vi justera senare. Nu tartar vi om syslogd daemonen med kommandot:

/etc/init.d/sysklogd restart

Gratulerar, nu har du en syslog server! Du kan kolla den genom att lista filerna /var/log katalogen igen. Det bör finnas en fil som heter enterprise.log där nu.

Syslog Server på Windows Top of page

Nått som heter Syslog finns inte i Windows, alla meddelanden skrivs i 'Event Viewer' loggarna. Se nedan för en agent (client) som kan skicka dessa till en Syslog server.Det finns dock programvaror som kan agera som Syslog server, en bra jag testat är KIWI den finns i en 'freeware' version som duger gott för hemma bruk, kan köras som en service och kan laddas från deras hemsida här. En annan enklare är Rsyslog som finns att ladda ner här.


Syslog Clients Top of page

Nu kan du gå runt till dina datorer och komponenter och säga åt dem att nyttja den och vilken nivå av mddelanden du vill skicka till den.

D-Link Devices

För att aktivera på ex. en D-Link 604 gör du det via webb-gränssnittet:




Linux som Client

Om du vill sätta upp andra Linux servrar (eller desktops) som clienter (d.v.s skicka deras meddelanden till en log server) skall du lägga till följande rad i deras /etc/syslog.conf filer:

*.*         @MySyslogServer

och byta 'MySyslogServer' med vad nu din syslog server har för hostnamn eller ip-adress. '*.*' specificerar att alla log meddelanden skall skickas till log servern.

Windows som Client

Micro$oft vill naturligtvis inte stödja en standard som syslog så det krävs lite trix för att monitorera windows burkar. Det finns dock ett företag i sverige som kallas Datagram som har en gratis utility som kallasSyslogAgent som kan köras som en service på Windows. den konverterar meddelanden från alla 'Event Viewer' loggar (System, Applications, Security, etc.) till syslog format och skickar dom till en syslog server. Du kan specificera olika 'severity levels' för varje logg. Gå till deras download sida:

www.syslogserver.com/download.html

och ladda nerendast 'SyslogAgent' filen, inte hela suiten.

Rotera Logg filerna på Linux

Syslog är en daemon som körs på alla Linux/UNIX system för att hålla lokala loggar. Parametern -r (listen on remote systems) är vad som gör att en Linux blir en syslog server. Det finns en annan daemon som arbeter med syslog för attunderhålla filerna som kallas logrotated. Med att "rotera" en logg fil menas att byta namn (renaming), lägga till .0 ellerr .1 etc. på loggfilnamnet och starta en ny. Undan sparandet (renaming) av den gammla loggfilen och hur många man skall spara är konfigurerbara värden och hur ofta man skall byta kan man skriva i /etc/logrotate.conf filen. Om du bara loggar kritiska (critical) och däröver från remota komponenter kanske det räcker med att bara 'rotera' en gång i månaden. Varje vecka är default. Du kan också bestämma hur många gammla du vill spara.

Denna sättning görs i /etc/logrotate.conf filen:

# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
Du kan också sätta upp sektioner så att olika loggfiler har olika värden. Kolla man sidan för logrotate för detaljer.


Ett sätt att kolla loggfilerna på Linux servern Top of page

Om du sätter upp din /etc/syslog.conf fil så att allt skrivs till samma fil, så när alla client komponenter skickar sitt har du bara en loggfil att kolla för allt på ditt nätverk.

Men istället föratt vara tvungen att logga på din linux server, kan du göra den acsessbar överallt via en browser förutsatt att du har apache installerad på din syslog server. Du måste också konfigurera den att hantera SSI (Server-Side Includes).

När du satt upp Apache måste vi skapa en webb sida som visar loggen. Skapa sedan en symlänk till /var/log/ i /var/www/ som du kallar för syslog
Använd ee editorn för att skapa en ny sida med kommandot:

ee /var/www/mylogg.shtml

(notera att s i filändelsen krävs för SSI) och skriv in följande:

<html>
<head>
<title>Enterprise Syslog Log File</title>

</head>
<body>
<center>
<h2>
Alfs Enterprise Syslog Log
</h2>
</center>
<!--#include file="/syslog/enterprise.log" -->

<br>
</body>
</html>

Spara filen.

Filreferencen i SSI include direktivet är relativ till "document rooten" i Apache servern.

När du gjort alla ändringar starta om Apache services eller bootat systemet.

Gå nu till ett annat system på dityt nätverk, dra igång en Web browser och peka på IP addressen till din syslog server exempelvis:

http://192.168.0.70/mylogg.shtml

En Websida innehållande 'enterprise.log' filen bör visas(om något hunnit bli loggat förståss). Om inte, gör "View source" i din browser och se om SSI direktiv raden är i HTML koden. Det skall det inte!. Om det finns har du inte lyckas konfigurera Apache att hantera SSI direktiv (eller du använde inte shtml som extension på sidan). /var/log/apache.log and /var/log/apache.err filerna kan vara till hjälp isåfall.

Syslog är ett mycket kraftfullt verktyg. Det har många möjligheter, som att skicka meddelanden över nätet istället för filer. Det kan också användas till att logga misslyckade påloggningar vilket kan indikera att någon hackare försöker ta sig in. Med lägre 'severity' kan du logga alla påloggningar så du kan arkivera vem som loggade in och när.


Logga access_log ifrån apache på syslog Top of page

Kanske vill du logga Apache webserverns access_log till syslog, då behöver du en plug-in som heter mod-witch som du kan se här, den finns säkert att hämta på fler ställen på nätet. Undrar du hur man gör detta i C har du källkoden här. Exempel på konfigurering i apache:

LoadModule witch_module /usr/lib/apache/1.3/mod_witch.so
WitchIdent mod_witch
WitchOption LOG_PID
WitchFacility LOG_DAEMON
WitchLevel LOG_INFO
WitchError log
WitchLogStyle MyWeb



Logga till syslog från din applikation. Top of page

Vill du logga på syslog från java skall du nyttja LOG4J paketet.