rsyslog – Wie leert man die Warteschlange?

rsyslog – Wie leert man die Warteschlange?

Ich verwende rsyslog, um Protokolle von Haproxy abzurufen und sie für Elasticsearch/Kibana in Logstash zu speichern.

Alles hat einwandfrei funktioniert, aber ich habe in rsyslog etwas Seltsames gefunden.

Ich habe festgestellt, dass in Kibana Daten fehlen. Der Grund ist rsyslog.

Die Warteschlange auf der Festplatte wurde für einige Tage angehalten und gestoppt

Also, mir fehlen die Daten vom Wochenende, aber gestern und heute ist alles in Ordnung.

Rsyslog ruft jetzt Daten ab und legt sie in Logstash ab, aber er scheint die in seiner eigenen Warteschlange gespeicherten Daten zu vergessen (ich glaube, er sieht, dass sie alt sind, und ignoriert sie. Es gibt dafür einen Parameter und vielleicht wird ein Standardwert verwendet?).

Im Moment ist Logstash im Leerlauf, ich kann ihm viele zusätzliche Daten aus der Rsyslog-Warteschlange zwingen

Was ich also tun möchte, ist:

Versuchen Sie vorübergehend, diese Warteschlange zu leeren (wie Postfix-Leeren). Wenn dies nicht möglich ist, was soll ich dann versuchen?

Meine rsyslog-Konfiguration ist:

$ActionSendTCPRebindInterval 500
$ActionQueueType LinkedList
$ActionQueueFileName kibana
$ActionQueueMaxFileSize 100m
$ActionQueueMaxDiskSpace 100g
$ActionQueueTimeoutEnqueue 0
$ActionResumeRetryCount -1
$ActionQueueSaveOnShutdown on

Antwort1

Die Rsyslog-Festplattenwarteschlange bleibt möglicherweise aufgrund eines unsauberen Herunterfahrens hängen, wodurch .qidie Datei im Spool-Verzeichnis nicht mehr mit den Spool-Dateien synchronisiert ist.

In diesem Fall kann das Leeren/Entfernen der Warteschlange die Ausführung eines zusätzlichen Skripts erfordern, das von Rsyslog bereitgestellt wird (aber nicht in den Distributionspaketen enthalten ist). Lauthttps://www.rsyslog.com/doc/concepts/queues.html#disk-queues

Wenn Sie die Verwaltungsstrukturen verlieren oder anderweitig benötigen und alle Ihre Warteschlangenblöcke haben, können Sie das im rsyslog-Paket enthaltene Perl-Skript verwenden, um sie zu generieren. Verwendung:

recover_qi.pl -w $WorkDirectory -f QueueFileName -d 8 > QueueFileName.qi

Wobei $WorkDirectoryder Wert von ist queue.spoolDirectoryund QueueFileNameder Wert von ist queue.fileName. Siehe auch:https://www.rsyslog.com/doc/rainerscript/queue_parameters.html

Beispiel:

./recover_qi.pl -w /var/spool/rsyslog -f rsyslog_backlog -d 8 > /var/spool/rsyslog/rsyslog_backlog.qi

(Es kann eine gute Idee sein, rsyslog zu stoppen, bevor Sie das Skript ausführen.)

Hier ist recover_qi.plim Rsyslog-Git-Repository (klicken Sie auf „raw“, um die Datei zu erhalten):https://github.com/rsyslog/rsyslog/blob/master/tools/recover_qi.pl

verwandte Informationen