# Ship mail-stack logs to a remote ELK collector via syslog. # # Drop into /etc/rsyslog.d/ and restart rsyslog. # Override REMOTE / PORT / PROTO via env or by editing this file. # # - mail-flask, mail-dramatiq уже идут в systemd journal (StandardOutput=append: # пишет в файл, journal — параллельно). Можно читать file-tail или journal. # - mail-backup — отдельный лог-файл от cron. # - DMS пишет mail.log/mail.err в bind-mounted volume. # ── Inputs (file-tail) ─────────────────────────────────────────────────── module(load="imfile" PollingInterval="2") input(type="imfile" File="/var/log/mail-flask.log" Tag="mail-flask" Severity="info" Facility="local6" addMetadata="on" reopenOnTruncate="on" stateFile="rsyslog-mail-flask" readMode="2") # 2 = paragraph, склеивает многострочные tracebacks input(type="imfile" File="/var/log/mail-dramatiq.log" Tag="mail-dramatiq" Severity="info" Facility="local6" stateFile="rsyslog-mail-dramatiq" readMode="2") input(type="imfile" File="/var/log/mail-backup.log" Tag="mail-backup" Severity="info" Facility="local6" stateFile="rsyslog-mail-backup" readMode="0") input(type="imfile" File="/home/deeily/mail/docker/dms-data/logs/mail.log" Tag="dms" Severity="info" Facility="local6" stateFile="rsyslog-dms" readMode="0") # ── Output to ELK ──────────────────────────────────────────────────────── # Очередь на диск — переживает падения сети, не теряет логи. $WorkDirectory /var/spool/rsyslog $ActionQueueType LinkedList $ActionQueueFileName mail_elk_q $ActionQueueMaxDiskSpace 1g $ActionQueueSaveOnShutdown on $ActionResumeRetryCount -1 # Шлём всё что Facility=local6 на удалённый ELK. # Для UDP замените `@@` на `@`. Порт по вкусу: 514 классика, 5140/5044 для Logstash. local6.* action(type="omfwd" target="logstash.internal" port="5140" protocol="tcp" template="RSYSLOG_SyslogProtocol23Format") # Опционально: в локальный файл для отладки. # local6.* /var/log/mail-stack-shipped.log