Logs mit Fluentd sammeln und auswerten

Fluentd ist eine Open Source Anwendung mit der Logs gesammelt, aufbereitet, gespeichert und weiterverarbeitet werden können. Wie die Anwendung installiert und grundlegend Konfiguriert wird, wird im folgenden Artikel beschrieben.

Die Firma Treasure Data, von der Fluentd entwickelt und gesponsert wird, stellt bereits fertige Pakete für verschiedene Linux Distributionen zur Verfügung. Die im Paket enthaltene Softwarezusammenstellungen bestehend aus Ruby, PostgreSQL, fluentd und weiteren Komponenten wird als td-agent (Treasure Data Agent) bezeichnet und besitzt ein paar Beispielkonfigurationen, wie die Log-Daten an Treasure Data geschickt werden können. Trotz dieser Zusammenstellungen und Vorkonfiguration ist es natürlich möglich Fluentd eigenständig zu verwenden.

Für einen ersten Test soll ein Ubuntu 14.04 System dienen.

Zunächst wird das Repository eingebunden und das benötigte Paket installiert. Um diesen Schritt weiter zu vereinfachen steht ein Shell-Skript zur Verfügung, welches wie folgt heruntergeladen und ausgeführt werden kann.

curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-trusty-td-agent2.sh | sudo sh

Die Konfiguration des Agent befindet sich anschließend in der Datei /etc/td-agent/td-agent.conf

Plugins können mit Hilfe des Programms td-agent-gem installiert werden.

$ sudo td-agent-gem install fluent-plugin-grep
WARN: Unresolved specs during Gem::Specification.reset:
          json (>= 1.4.3)
WARN: Clearing out unresolved specs.
Please report a bug if this causes problems.
Successfully installed fluent-plugin-grep-0.3.4
Parsing documentation for fluent-plugin-grep-0.3.4
Installing ri documentation for fluent-plugin-grep-0.3.4
Done installing documentation for fluent-plugin-grep after 0 seconds
1 gem installed

Für einen ersten Test wird eine Datei fluentd.conf mit folgendem Inhalt angelegt.

<source>
  @type tail
  path /var/log/syslog
  pos_file /var/log/td-agent/syslog.pos
  tag local.syslog
  format syslog
</source>

<match local.*>
  @type stdout
</match>

Anschließend wird fluentd mit der Konfiguration gestartet.

$ sudo td-agent -c fluentd.conf
2015-12-06 10:28:39 +0000 [info]: reading config file path="fluentd.conf"
2015-12-06 10:28:39 +0000 [info]: starting fluentd-0.12.12
2015-12-06 10:28:40 +0000 [info]: gem 'fluent-mixin-config-placeholders' version '0.3.0'
2015-12-06 10:28:40 +0000 [info]: gem 'fluent-mixin-plaintextformatter' version '0.2.6'
2015-12-06 10:28:40 +0000 [info]: gem 'fluent-plugin-grep' version '0.3.4'
2015-12-06 10:28:40 +0000 [info]: gem 'fluent-plugin-mongo' version '0.7.10'
2015-12-06 10:28:40 +0000 [info]: gem 'fluent-plugin-rewrite-tag-filter' version '1.4.1'
2015-12-06 10:28:40 +0000 [info]: gem 'fluent-plugin-s3' version '0.5.9'
2015-12-06 10:28:40 +0000 [info]: gem 'fluent-plugin-scribe' version '0.10.14'
2015-12-06 10:28:40 +0000 [info]: gem 'fluent-plugin-td' version '0.10.27'
2015-12-06 10:28:40 +0000 [info]: gem 'fluent-plugin-td-monitoring' version '0.2.1'
2015-12-06 10:28:40 +0000 [info]: gem 'fluent-plugin-webhdfs' version '0.4.1'
2015-12-06 10:28:40 +0000 [info]: gem 'fluentd' version '0.12.12'
2015-12-06 10:28:40 +0000 [info]: adding match pattern="local.*" type="stdout"
2015-12-06 10:28:40 +0000 [info]: adding source type="tail"
2015-12-06 10:28:40 +0000 [info]: using configuration file: <ROOT>
  <source>
        @type tail
        path /var/log/syslog
        pos_file /var/log/td-agent/syslog.pos
        tag local.syslog
        format syslog
  </source>
  <match local.*>
        @type stdout
  </match>
</ROOT>
2015-12-06 10:28:40 +0000 [info]: following tail of /var/log/syslog

Die Konfiguration bewirkt, dass die Datei /var/log/syslog überwacht und zeilenweise gelesen wird. Die Aufbereiteten Daten werden anschließend auf der Konsole ausgegeben.

Mit dem folgenden Befehl wird eine neue Meldung in das Syslog geschrieben.

$ logger test

Welche anschließend durch fluentd gelesen, interpretiert und ausgegeben wird.

2015-12-06 10:30:55 +0000 local.syslog: {"host":"vagrant-ubuntu-trusty-64","ident":"vagrant","message":"test"}

Ist der Agent über die Datei /etc/td-agent/td-agent.conf konfiguriert, kann er mit folgendem Befehl gestartet werden.

$ sudo service td-agent start

Damit der Agent auch beim nächsten Neustart gestartet wird, muss folgender Befehl ausgeführt werden

$ sudo update-rc.d td-agent defaults

Weitere Beispiele, Plugins und Informationen können auf der Seite von Fluentd gefunden werden.

Verwandte Artikel