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 .qi
die 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 $WorkDirectory
der Wert von ist queue.spoolDirectory
und QueueFileName
der 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.pl
im Rsyslog-Git-Repository (klicken Sie auf „raw“, um die Datei zu erhalten):https://github.com/rsyslog/rsyslog/blob/master/tools/recover_qi.pl