From 857dceeb43d691d3227e53a0f9250a4a626b435d Mon Sep 17 00:00:00 2001 From: erjemin Date: Wed, 20 Dec 2023 18:11:41 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BF=D0=BB=D0=B8=D1=82=D1=82=D0=B5?= =?UTF-8?q?=D1=80=20=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 ++++- misc/splitter-for-logs.md | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 misc/splitter-for-logs.md diff --git a/README.md b/README.md index 52e7cdc..2250b56 100644 --- a/README.md +++ b/README.md @@ -15,4 +15,7 @@ * [Резервное копирование и восстановление](raspberry-pi/backup-restore.md) ## Nginx / Apache -* [Ограничение доступа по User-Agent (на примере GPTBot)](nginx/nginx-ban-user-agent.md) \ No newline at end of file +* [Ограничение доступа по User-Agent (на примере GPTBot)](nginx/nginx-ban-user-agent.md) + +## Разное +* [Сплиттер для разделения логов](misc/splitter-for-logs.md) \ No newline at end of file diff --git a/misc/splitter-for-logs.md b/misc/splitter-for-logs.md new file mode 100644 index 0000000..f803937 --- /dev/null +++ b/misc/splitter-for-logs.md @@ -0,0 +1,34 @@ +# Разбивает лог-файл на отдельные логи по 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" +```