Назад | Перейти на главную страницу

перенаправить вывод и ротацию журналов

Мне нужна небольшая помощь по сценарию / команде / cronjob ..

Мне нужно перенаправить вывод команды tcpdump в файл журнала и хранить 1 файл журнала на каждый день. Я знаю, что могу использовать синтаксис ведения журнала tcpdump, но я также использую awk -F для фильтрации вывода. Моя команда выглядит так и запускается сама по себе прекрасно.

tcpdump -ieth0 -p "tcp[tcpflags] & (tcp-syn) !=0" | awk -F 'Flags' '{print $1}' > /var/log/tcpdump.log

Как я могу заставить его ротацию файла на каждый день? Есть ли способ сделать с помощью сценария оболочки (мои знания сценариев оболочки очень ограничены).

Если вы не умеете писать сценарии оболочки, я бы не стал писать собственную ротацию журналов. Не похоже, что у вас здесь есть необходимость, которую нельзя было бы решить лучше, используя logrotate вместо того, чтобы кататься самостоятельно. Вы можете сделать простой файл конфигурации

# /etc/logrotate.d/tcpdump
"/var/log/tcpdump.log" {
       daily
       rotate 30
       compress

       prerotate
            killall your_dump_script
       endscript

       postrotate
            your_dump_script &
       endscript
 }

Это будет:

  • поверните ваш файл daily
  • держать 30 копирует, так как вы не хотите заполнять свой диск
  • compress используя gzip для экономии места на диске. Ты можешь использовать zless или zgrep чтобы просмотреть их.
  • убийство your_dump_script перед вращением и перезапустить после. Не стесняйтесь переименовать это в что-нибудь по своему вкусу.

Если вы положите это /etc/logrotate.d это должно быть подхвачено вашими встроенными заданиями cron, но если вы хотите запустить его вручную, чтобы убедиться, что он работает:

logrotate /etc/logrotate.d/tcpdump

Или поместите конфигурацию в другое место и запустите ее из своего скрипта. В любом случае вы пишете меньше кода, и все с большей вероятностью будет работать надежно.

Вы можете использовать rotatelogs (документы здесь): все, что вам нужно сделать, это пропустить через него вывод, предоставить несколько опций, а он позаботится обо всем остальном. Например:

tcpdump ... | rotatelogs /var/log/tcpdump.log

автоматически поворачивает выходной файл при соблюдении указанных вами критериев (размер файла, временной интервал).

Я написал залогинщик эти выходные. Я бы, наверное, не стал, если бы читал @ JdeBP отличный ответ о multilog.

Я сосредоточился на том, чтобы он был легким и имел возможность bzip2 его выходные фрагменты, такие как:

verbosecommand | logrotee \
  --compress "bzip2 {}" --compress-suffix .bz2 \
  /var/log/verbosecommand.log

Тем не менее, еще многое предстоит сделать и протестировать.