[sisyphus] svlogd: запись stdout в журнал с ротацией

Paul Wolneykien manowar на altlinux.org
Чт Окт 18 15:40:26 MSK 2018


  Всем привет. Мы столкнулись с проблемой, что нужно сохранять подробный
выхлоп от демона для последующего анализа. Systemd на удивление не
справился с задачей: при подключении к демону дополнительных клиентов,
запись в журнал (который потом можно читать через journalctl) становится
нестабильной — часть сообщений в журнал не попадает. Если же просто
перенаправить выхлоп в файл, то там всё сохраняется. Из этого я сделал
вывод, то systemd не выдерживает напора.
  Возможно, что я просто не умею готовить systemd. Но тем не менее, мы
решили пойти дальше именно по пути сброса в файл. Поэтому сделать
оставалось следующее: обеспечить запись в лог временной метки для
каждого сообщения и ротацию логов. И тогда я вспомнил о пакете runit. Он
почему-то не был у нас собран (сегодня я этот момент исправил —
runit-2.1.2-alt2).
  Пакет целиком представляет собой альтернативную систему запуска
системы — очень компактную, предназначенную, в первую очередь, для
встраиваемых систем. Но одно из достоинств в том, что входящие в пакет
программы можно использовать по отдельности. И одна из них —
замечательная программа svlogd (именно о ней я и вспомнил).
  svlogd — это фильтр-обработчик стандартного входа, с записью
результата в файл, с поддержкой ротации. Обработка настраивается простым
конфигурационным файлом. В результате мы добились записи временных меток
и ротации (со сжатием). Сейчас пробуем сократить объём логов, исключив
заведомо ненужные строчки, настроив фильтр.
  Я подозреваю, что svlogd — не единственная программа такого рода. Но
поскольку я уже знал, как ей пользоваться, то выбрал именно её.

  А вот, как была выполнена настройка:

$ cat /lib/systemd/system/pcscd.service
[Unit]
Description=PC/SC Smart Card Daemon
Requires=pcscd.socket

[Service]
ExecStart=/usr/sbin/pcscd.wrap --foreground --debug --apdu

[Install]
Also=pcscd.socket

---

$ cat /usr/sbin/pcscd.wrap
#!/bin/sh -efu

echo "Starting pcscd. See its logs in /var/log/pcscd" >&2
/usr/sbin/pcscd "$@" 2>&1 | svlogd -ttt /var/log/pcscd

---

$ cat /var/log/pcscd/config
s2000000
n500
!gzip


Подробная информация о списке рассылки Sisyphus