Logmanagement mit Graylog: Log-Events zu Graylog senden

Lies, wie du mit Wonolog Log-Events nach Graylog schicken kannst.

Durch das Logmanagement mit Graylog kannst du Log-Events zentral an einer Stelle verwalten. Inpsyde\Wonolog bietet durch Monolog eine Vielzahl an Möglichkeiten Log-Einträge zu verschiedensten Endpoints zu senden. Neben einer kurzen Übersicht über Graylog möchte ich dir einige Tipps geben, wie du unser Package Wonolog nutzen kannst, um deine Log-Events zu Graylog zu senden.

Was ist Graylog?

Graylog ist ein Open Source LMS (Log-Management System) zum Sammeln, Indizieren und Analysieren von Daten. Um Daten zu speichern und zu durchsuchen, verwendet Graylog Elasticsearch und MongoDB. Graylog ist einfach erweiterbar und bietet außerdem eine Vielzahl von zusätzlich Funktionen in Form von Plugins an.

Wieso Graylog nutzen?

Das ist eine gute Frage und über die Antwort kann man sicherlich diskutieren. Kurz gesagt wollen wir eine zentrale Stelle haben, an der Log-Events gesammelt und ausgewertet werden.

Wonolog schreibt per Default Log-Events in eine Datei auf dem Server. Diese muss von Hand auf z.B. Fehler analysiert werden. Diese Arbeit nimmt uns Graylog automatisiert ab. Außerdem bietet es uns die Möglichkeit frühzeitig auf Ereignisse mit Hilfe von sogenannten “Triggern” und “Alerts” zu reagieren. Trigger können auf verschiedenste Daten-Felder wie z.B Log-Level (error, critical, fatal, ..) oder Channels (z.B. “Plugin X”) erstellt werden und entsprechende Alerts wie z.B. “Sende eine E-Mail an Person X” auslösen. Dies verwaltet Graylog zentral, ohne dass du den Quellcode angepassen musst. Zudem bietet Graylog noch eine WebUI mit Authentifizierung, User-Management sowie individualisierbarem Dashboard.

Daten senden

Um Daten zu Graylog zu senden, müssen wir den bootstrap-Prozess von Wonolog erweitern, indem wir den Monolog\Handler\GelfHandler als erstes Argument übergeben. Dieser benötigt allerdings ein PublisherInterface als erstes Argument. Hierzu müssen wir noch ein externes Package graylog2/gelf-php per Composer laden, da Monolog dieses nicht von Haus aus mitliefert. Das Package kann ganz einfach per Composer installiert werden:

$ composer require graylog2/gelf-php

Unser mu-plugin beinhaltet also folgenden Code:

<?php declare( strict_types=1 ); # -*- coding: utf-8 -*-
/**
 * Plugin Name: Inpsyde advent calendar logging
 */namespace Inpsyde\AdventCalendar\Logging;

use Gelf\Publisher;
use Gelf\Transport\TcpTransport;
use Monolog\Handler\GelfHandler;

$func = '\Inpsyde\Wonolog\bootstrap';
if ( ! function_exists( $func ) ) {
       return;
}

$host    = getenv( 'GRAYLOG_HOST' );
$port    = getenv( 'GRAYLOG_PORT' );
$handler = ( $host && $port )
       ? new GelfHandler(
              new Publisher(
                    new TcpTransport( $host, $port )
              )
       )
       : NULL;

$func( $handler );

Für die Konfiguration des Hosts und des Ports von Graylog verwenden wir Umgebungsvariablen. Dies ermöglicht uns abhängig vom jeweiligen System (z.B. Live, Stage oder DEV) entsprechend andere Hosts zu verwenden. Umgebungsvariablen können bei der Verwendung von z.B. WPStarter in der .env-Datei gesetzt werden. Sofern der Host oder der Port nicht konfiguriert ist, fällt Wonolog zurück auf den Default-Handler.