Транспортировка логов без потерь
Введение
Доставка журналов от источников к коллекторам — критичный участок. Выбор протокола и настройка очередей определяют, теряете ли вы события при всплесках и сбоях сети.
Протоколы и когда их выбирать
- UDP: минимальные накладные расходы, но нет гарантий доставки. Подходит для низковажных метрик и изолированных сетей.
- TCP: гарантии доставки в пределах соединения; при разрыве — буферизация на клиенте.
- TLS поверх TCP: шифрование и проверка подлинности; защищает от перехвата и подмены.
- RELP: прикладной уровень с явным подтверждением; лучший выбор для «не терять ни одного события».
Очереди на диске и надёжность
- Включите очереди на диске на источнике: при недоступности коллектора события сохраняются локально и досылаются после восстановления.
- Настройте лимиты очереди и политику вытеснения, чтобы не забить диск.
- Для rsyslog:
$ActionQueueType LinkedList,$ActionQueueFileName,$ActionResumeRetryCount -1,$ActionQueueSaveOnShutdown on.
Шифрование и проверка подлинности
- Используйте TLS с проверкой сертификатов; закрепите CA и имена узлов.
- Для внутренних сетей без TLS — как минимум подписывайте сообщения (напр. с помощью mmnormalize/ммjson), чтобы обнаружить подмену.
Мини-конфиг релея (rsyslog)
module(load="imtcp")
module(load="omrelp")
# Приём TCP
input(type="imtcp" port="514")
# Отправка в RELP с очередью на диске
action(
type="omrelp"
target="log-collector.internal:2514"
tls="on"
tls.caCert="/etc/ssl/certs/ca.pem"
tls.myCert="/etc/ssl/certs/relay.pem"
tls.myPrivKey="/etc/ssl/private/relay-key.pem"
queue.type="LinkedList"
queue.filename="q_relp"
queue.size="100000"
queue.dequeuebatchsize="4096"
action.resumeRetryCount="-1"
queue.saveonshutdown="on"
)
Чек-лист
- Выберите протокол под требования к потере событий.
- Включите дисковые очереди на источниках.
- Включите TLS и проверку подлинности.
- Мониторьте длину очереди и задержки доставки.
- Тестируйте сценарии обрыва сети и перезапуска служб.