doc_memo/misc/splitter-for-logs.md

35 lines
1.9 KiB
Markdown
Raw Permalink Normal View History

2023-12-20 18:11:41 +03:00
# Разбивает лог-файл на отдельные логи по ip-адресам
Все необходимые описания есть в комментариях в скрипте. Предполагается, что скрипт будет запускаться по расписанию
(cron), при этом процесс который создает логи tacacs (обычно tac_plus) будет создавать лог заново, т.к. скрипт
удаляет исходный лог.
```bash
#!/bin/bash
# log_file_name -- имя лог-файла который надо разобрать (лучше указать полный путь).
log_file_name="tac_1.acc"
# out_directory -- каталог, в который надо складывать расщепленные логи
# * -- каталог должен существовать
# * -- если пустая строка "расщепление" будет происходить в текущем каталоге
# * -- несли не пустая строка, то значение переменной должно заканчиваться '/'.
out_directory=""
# ext2split -- расширение для сплит-логов
ext2split=".split_log"
# читаем файл лога построчно
cat "$log_file_name" | while IFS= read -r line; do
# обрабатываем строку (она в $line)
# находим ipv4 (первое ipv4 в строке)
ipv4=$(echo "$line" | awk '{for (i=1; i<=NF; i++) if ($i ~ /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/) {print $i; exit}}')
# добавление строку в соответствующий сплит-лог
echo "$line" >> "$out_directory$ipv4$ext2split"
done
# удаляем исходный лог. т.к. его уже нарезали на плит-логи.
rm -rf "$log_file_name"
```