Инструмент для автоматического анализа лог-файлов Microsoft Exchange Server (SMTP Receive, SMTP Send, Message Tracking) и их загрузки в базу данных PostgreSQL для удобного анализа и поиска.
Анализ текстовых логов Exchange вручную может быть трудоемким и подверженным ошибкам, особенно при больших объемах данных или при необходимости сопоставить события из разных файлов (например, отследить путь письма). Стандартные средства просмотра логов не всегда предоставляют гибкие возможности для фильтрации, агрегации и поиска информации.
Exchange Log Parser решает эти проблемы путем:
- Автоматизации: читает и разбирает стандартные форматы логов Exchange.
- Структурирования данных: сохраняет извлеченную информацию в четко определенные таблицы базы данных PostgreSQL.
- Централизации: позволяет хранить логи с разных серверов Exchange в одном месте.
- Гибкого анализа: дает возможность использовать всю мощь SQL-запросов для анализа данных, построения отчетов, поиска конкретных писем или событий.
- Парсинг логов SMTP Receive (
*REC*.log) - Парсинг логов SMTP Send (
*SND*.log) - Парсинг логов Message Tracking (
MSGTRK*.log) - Автоматическое определение типа лог-файла по заголовку
#Log-type. - Обработка файлов в кодировке
WINDOWS-1251. - Поддержка PostgreSQL и Microsoft SQL Server в качестве целевых СУБД.
- Предотвращение дублирования записей с помощью уникальных индексов в БД.
- Отображение прогресса обработки файлов с помощью прогресс-бара.
- Конфигурация через аргументы командной строки.
curl -sSL https://raw.githubusercontent.com/fgbm/exchange-log-parser/main/install.sh | sudo bashirm -useb https://raw.githubusercontent.com/fgbm/exchange-log-parser/main/install.ps1 | iexЕсли вы хотите собрать приложение самостоятельно или внести изменения:
- Установите Rust: Если у вас еще нет Rust, следуйте официальной инструкции.
- Клонируйте репозиторий:
git clone https://github.com/fgbm/exchange-log-parser.git cd exchange-log-parser - Соберите проект:
Готовый исполняемый файл будет находиться в
cargo build --release
target/release/exchange-log-parser(или.exeдля Windows).
Запустите приложение, указав необходимые параметры:
exchange-log-parser --db-type <тип_бд> \
--db-host <хост_бд> \
--db-port <порт_бд> \
--db-user <пользователь_бд> \
--db-password <пароль_бд> \
--db-name <имя_бд> \
--concurrent-files <количество_файлов> \
--table-prefix <префикс_таблиц> \
<путь_к_папке_с_логами>[logs_dir](по умолчанию: текущая директория): Путь к директории, содержащей лог-файлы Exchange. Программа рекурсивно обойдет эту директорию.--db-type: Тип базы данных (postgresилиmssql, по умолчанию:postgres).--db-host: Адрес хоста сервера БД (по умолчанию:localhost).--db-port: Порт сервера БД (по умолчанию:5432).--db-user: Имя пользователя для подключения к БД (по умолчанию:postgres).--db-password: Пароль пользователя для подключения к БД (по умолчанию: пустая строка).--db-name: Имя базы данных (по умолчанию:exchange_logs).--concurrent-files: Количество одновременно обрабатываемых файлов (по умолчанию:10).--table-prefix: Префикс для имен таблиц в базе данных (опционально).
Пример для PostgreSQL:
exchange-log-parser --db-type postgres \
--db-host "192.168.1.10" \
--db-port 5432 \
--db-user "exchange_user" \
--db-password "secret_password" \
--db-name "exchange_log_db" \
--concurrent-files 10 \
--table-prefix "ex_" \
"/mnt/exchange_logs"Пример для MS SQL:
exchange-log-parser --db-type mssql \
--db-host "192.168.1.10" \
--db-port 1433 \
--db-user "exchange_user" \
--db-password "secret_password" \
--db-name "exchange_log_db" \
--concurrent-files 10 \
--table-prefix "ex_" \
"/mnt/exchange_logs"Приложение автоматически создает (если они не существуют) следующие таблицы в указанной базе данных:
{prefix}smtp_receive_logs: Для данных из логов SMTP Receive.- Уникальный ключ:
(date_time, session_id, sequence_number)
- Уникальный ключ:
{prefix}smtp_send_logs: Для данных из логов SMTP Send.- Уникальный ключ:
(date_time, session_id, sequence_number)
- Уникальный ключ:
{prefix}message_tracking_logs: Для данных из логов Message Tracking.- Уникальный ключ:
(date_time, internal_message_id, recipient_address, event_id)
- Уникальный ключ:
Где {prefix} - опциональный префикс таблиц, указанный через параметр --table-prefix.
clap: Парсинг аргументов командной строки.tokio: Асинхронная среда выполнения.tokio-postgres&deadpool-postgres: Работа с PostgreSQL (асинхронный драйвер и пул соединений).tiberius: Асинхронный драйвер для MS SQL Server.bb8&bb8-tiberius: Пул соединений для MS SQL Server.chrono: Работа с датой и временем.regex&lazy_static: Работа с регулярными выражениями.indicatif: Отображение прогресс-бара.color-eyre: Обработка ошибок.log&env_logger: Логирование.encoding_rs: Декодирование текста из разных кодировок.walkdir: Рекурсивный обход директорий.