Senden von Protokollen an den Graylog2-Server

11

Ich habe gerade einen Graylog2-Server eingerichtet und möchte alle Protokolle von meinem Hauptserver an den Graylog-Server senden. Ich habe die Protokollierung für den Hauptserver aktiviert und sende Protokolle an meinen Graylog-Server, indem ich *.* @logs.example.com:1337sie hinzufüge /etc/rsyslog.conf.

Ich möchte, dass Graylog2 alle meine Apache-Protokolle, Systemprotokolle (für SSH-Anmeldungen, abgelehnte Anmeldungen) und alle anderen zu überwachenden Protokolle sammelt.

Für die Apache-Protokolle möchte ich auch die Rails-Protokolle. Meine Seiten befinden sich in /srv/www/und dann ist die Struktur sitename.com/public_htmlund sitename.com/logs. Ich habe viele Sites auf dem Server und möchte eine einfache Möglichkeit, alle Fehler anzuzeigen und daraus einige schöne Grafiken zu erstellen. Deshalb möchte ich Graylog2 verwenden ...

Die Protokolldateien im Protokollordner sind access.logund error.log.

Die Rails-Protokolle wären in sitename.com/public_html/log. Dies enthält production.log.

Dean Perry
quelle
Was ist die Frage hier? Wenn Sie rsyslog installiert haben, können Sie damit die Rails / Apache-Protokolle an Graylog2 senden ( rsyslog.com/doc/imfile.html )
Polynom
Hast du das versucht? docs.graylog.org/en/1.2/pages/collector.html
zx1986

Antworten:

10

Dies ist alt, aber ich dachte, ich würde diese Methode schreiben, die ich für Websites mit geringem / mittlerem Verkehr verwende (ich weiß nicht, ob sie für Websites mit starkem Verkehr gut funktioniert):

In Apache definiere ich ein CustomLog-Format namens, graylog2_accessdas das Zugriffsprotokoll in ein GELF-Format formatiert, und sende dann mein Protokoll über Graylog2, indem ich die Protokolldaten über nc weiterleite, um GELF-Nachrichten an die Eingabe von Graylog2 zu senden.

Hier ist das benutzerdefinierte Format, das erstellt wird (lesbar):

{ 
 "version": "1.1",
 "host": "%V",
 "short_message": "%r",
 "timestamp": %{%s}t,
 "level": 6,
 "_user_agent": "%{User-Agent}i",
 "_source_ip": "%a",
 "_duration_usec": %D,
 "_duration_sec": %T,
 "_request_size_byte": %O,
 "_http_status": %s,
 "_http_request_path": "%U",
 "_http_request": "%U%q",
 "_http_method": "%m",
 "_http_referer": "%{Referer}i"
}

Für die Apache-Konfiguration gibt es hier eine Version zum Kopieren / Einfügen:

LogFormat "{ \"version\": \"1.1\", \"host\": \"%V\", \"short_message\": \"%r\", \"timestamp\": %{%s}t, \"level\": 6, \"_user_agent\": \"%{User-Agent}i\", \"_source_ip\": \"%a\", \"_duration_usec\": %D, \"_duration_sec\": %T, \"_request_size_byte\": %O, \"_http_status\": %s, \"_http_request_path\": \"%U\", \"_http_request\": \"%U%q\", \"_http_method\": \"%m\", \"_http_referer\": \"%{Referer}i\" }" graylog2_access

Dann in Ihrer Host-Konfiguration:

CustomLog "|nc -u graylogserver 12201" graylog2_access
ETL
quelle
+1 Schön! Müssen Sie dies auf einem unserer Systeme versuchen, aber stattdessen mit ERROR.
Henk
@Henk - Wenn Sie ein Format für das Fehlerprotokoll erstellen, lassen Sie es mich bitte wissen. Ich möchte, habe mir aber noch keine Zeit genommen. Überprüfen Sie auch serverfault.com/questions/582510/… auf einige Informationen zu Dingen, auf die ich später gestoßen bin.
ETL
5

Sie können Ihre Protokolldateien auch mit diesem einfachen Befehl an den graylog2-Server senden:

tail -F -q $yourlogfile |   while read -r line ; do   echo "<7> $hostnamesendingthelog $line" | nc -w 1 -u $graylogserver 514;   done;

Ich verwende dies hauptsächlich zu Testzwecken, um festzustellen, ob mein Protokollformat für die einfache Abfrage in graylog2 angepasst ist. Für die Verwendung in der Produktion müssen Sie weder rsyslog noch syslog-ng einrichten.

Sie können wahrscheinlich Ihre Rails-Protokolldatei verfolgen und sehen, was passiert.

Pierig Le Saux
quelle
Ich mag die Einfachheit dieser Antwort: Unkompliziert und ohne zusätzliche Werkzeuge. Ich weiß nicht, was ich mit den Zeitstempeln der Protokolldatei tun soll: Vielleicht ist nichts zu tun und sie spielen keine Rolle?
Texas-Bronius
2

Graylog2 akzeptiert nur Protokolle in zwei Formaten: Standard-Syslog und das erweiterte Graylog-Protokollformat (auch bekannt als GELF). Für beliebige Protokolle auf der Festplatte ist ein Prozess von Drittanbietern erforderlich, um die Protokolle zu verarbeiten und in ein für Sie nützliches Formular zu übersetzen.

Schauen Sie sich Logstash an . Die meisten Leute betrachten es als ein Tool zum Indizieren von Protokolldateien mit ElasticSearch, aber es enthält auch einen allgemeinen "Protokollrouter", mit dem Sie eine Reihe von Dateien auf der Festplatte speichern und an eine Protokollierungskomponente wie Graylog senden können.

Natacado
quelle
2
Rsyslog kann die Protokolle leicht lesen: rsyslog.com/doc/imfile.html
Polynom
1
Während rsyslog andere Dateien als Eingabe verwenden kann, hat die Verwendung von logstash den Vorteil, dass die vordefinierten regulären Ausdrücke von Grok (siehe logstash.net/docs/1.0.17/filters/grok ) verwendet werden können, um die Protokollnachrichten und zu strukturieren nicht nur Klartext.
Joschi
syslog-ng kann dasselbe mit einer saubereren Konfiguration im Vergleich zu rsyslog tun: loggly.com/support/sending-data/logging-from/syslog/syslog-ng/…
HVNSweeting