in graylog

tomcat Logdateien mit rsyslog an graylog schicken

Wer einen zentralen Logserver wie Graylog betreibt, der möchte natürlich möglichst viele Logdateien damit auswerten. Der Tomcat – Server ist ein besonders schönes Exemplar für grausige Logfiles, nichts desto trotz wollen wir natürlich auch diese Logs auswerten.

Wir greifen lokal die catalina.out mit rsyslog ab und schicken die Daten dann an unseren Graylog – Server.

Vorraussetzungen

  • installierter und funktionierender graylog – Server
  • Input auf Port UDP/514 eingerichtet
  • rsyslog auf der Tomcat – Maschine

Konfiguration

Wir fangen an und bearbeiten die tomcat logging.properties, um das automatische rotieren abzuschalten:

vim /opt/tomcat/apache-tomcat/logs/logging.properties

In der Datei die folgenden Einträge ändern:

1catalina.org.apache.juli.FileHandler.level = FINE
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
# change for stopping logrotate
1catalina.org.apache.juli.FileHandler.prefix = catalina
1catalina.org.apache.juli.FileHandler.rotatable = false

Nach den Änderungen muss der Tomcat natürlich neu gestartet werden.

Als nächstes legen wir eine Konfigurationsdatei für den rsyslogd an:

vim /etc/rsyslog.d/tomcat2graylog.conf

Wir laden das Modul imfile um die Logdatei regelmäßig auszulesen und den Inhalt an den Graylog – Server zu senden. Wichtig ist insbesondere das InitFileReadMode (oder nur ReadMode) auf indented zu setzen:

$ModLoad imfile
$InputFilePollInterval 10
$InputFileReadMode 2
 
#Add a tag for tomcat events
$template LogTomcat,"<%pri%>;%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msgid% [TOKEN@41058 tag=\"tomcat\"] %msg%\n"
 
# catalina.log
$InputFileName /var/log/tomcat/catalina.log
$InputFileTag catalina-log
$InputFileStateFile stat-catalina-log
$InputFileSeverity info
$InputFilePersistStateInterval 20000
$InputRunFileMonitor
if $programname == 'catalina-log' then @GRAYLOG-SERVER:514;LogTomcat
if $programname == 'catalina-log' then ~

Wer statt UDP lieber TCP für den Transport der Logs benutzen will, der gibt als Ziel @@GRAYLOG-SERVER:514 an.

Das war es schon, simple :)
Anschließend den rsyslog-Server nochmal neu starten und das Ergebnis mit graylog kontrollieren.

Natürlich kann man für das Abgreifen der Logdatei auch logstash verwenden, seit der Version 1.1.0 kann man das auch mit dem eigenen graylog – Collector realisieren, aber wozu ein neues Tool installieren, wenn der logging Daemon eh schon da ist.

Schreibe einen Kommentar

Kommentar