Wie richte ich MySQL-Speicher für bestimmte Rsyslog-Eingabeübereinstimmungen ein?

Wie richte ich MySQL-Speicher für bestimmte Rsyslog-Eingabeübereinstimmungen ein?

Ich übertrage verschiedene Protokolle von Heroku auf einen rsyslog-Linux-Server (Ubuntu) und habe hinsichtlich der Arbeit mit meinen Protokollverläufen langsam mehr zu tun, als ich bewältigen kann.

Ich muss in der Lage sein, anhand flexiblerer Details und flexiblerer Zugriffsrechte in die Vergangenheit zurückzuverfolgen, als dies die Standard-Syslog-Dateien bieten.

Ich denke, dass die Protokollierung in MySQL der richtige Ansatz sein könnte, aber wie richte ich dies so ein, dass es nur bestimmte Protokolleinträge basierend auf einer Identifizierung in eine Tabelle zieht? Ich sehe beispielsweise eine lange Hex-Zeichenfolge, die jeden Protokolleintrag einer bestimmten Heroku-App-Instanz identifiziert. Ich gehe davon aus, dass ich diese einfach in den MySQL-Socket leiten kann, anstatt ALLE rsyslog-Eingaben in MySQL ...

Könnte mich bitte jemand auf eine Ressource verweisen, die mich durch den Einrichtungsprozess einer solchen Sache führt oder mir einfach ein paar hilfreiche Details liefert? Ich habe mehr als 15 Jahre Unix-Erfahrung und brauche daher nur einen kleinen Anstoß in die richtige Richtung, da ich bisher nicht wirklich viel mit Syslog-Daemons gearbeitet habe, was das Zusammenfassen mehrerer Server zu einem betrifft.

Darüber hinaus wäre ich an allen Protokollüberprüfungstools interessiert, die das Durchforsten von Protokollanordnungen wie dieser für Entwickler praktischer machen könnten.

Antwort1

Ich denke, so etwas sollte funktionieren. Stellen Sie zunächst sicher, dass Ihre rsyslog-Konfigurationsdatei die folgende Zeile enthält, damit das MySQL-Ausgabemodul geladen wird:

$ModLoad ommysql

Filtern Sie dann die gewünschten Inhalte wie folgt:

:msg, contains, "Heroku"     :ommysql:dbserver,dbname,dbuser,dbpass;heroku-template

Als nächstes müssen Sie eine Vorlage für Ihre Daten erstellen, damit rsyslog weiß, was und wie es in Ihre Datenbank einfügen muss. Hier ist eine Beispielvorlage, die nur Datum und Nachricht aufzeichnet und von einer Tabelle mit nur zwei Spalten ausgeht, dateund message.

$template heroku-template, "INSERT INTO herokulog(date,message) VALUES ('%timestamp','%msg')\r\n", SQL

So etwas sollte funktionieren. Beachten Sie, dass dies aus dem Stegreif geschah und überhaupt nicht getestet wurde, aber Sie verstehen, was ich meine. Ausführlichere Informationen finden Sie unterrsyslog-Website, zum Beispiel dieverfügbare Vorlagenparameterwertekönnte Sie interessieren.

Antwort2

Ich würde das Syslog an einen Grep-Befehl weiterleiten, um die benötigten Zeilen zu extrahieren, dann an ein Awk-Skript, um eine gut formatierte CSV-Datei zu generieren. Anschließend würde ich die generierte CSV-Datei mit „LOAD DATA IN FILE“ in MySQL ziehen.

Sie können auch das phpsyslog-ng-Projekt überprüfen:http://www.gdd.net/index.php/PHP-Syslog-NG

verwandte Informationen