Эта моя первая коротенькая статейка на Хабре в попытке сделать проект, который делал для себя в целях самообразования и применения на работе, полезным кому-то еще. Можно было бы написать больше букв, но ввиду особенностей профессиональной деятельности, времени на это мягко говоря не очень много. Кто заинтересуется всегда может подробности почерпнуть самостоятельно на гитхабе.

Предыстория

Помнится, лет 10 назад хотелось мне найти удобный GUI просмотрщик почтовых логов с фильтрами по времени и разным ключевым полям для Exim, причем желательно с возможностью автоматической очистки от устаревших записей. Чтение лог файлов - это, конечно, хорошо, но не очень быстро и удобно, особенно когда над тобой стоит человек (или висит на телефонной линии), которому «вотпрямщас» надо узнать, почему же не пришло важнейшее письмо из какой-нибудь ООО «Рога и копыта». Да и вопросы хранения логов за какой-то бОльший, чем неделя, срок и обращения к ним, так же стояли остро.

Такой GUI просмотрщик был впоследствии найден в лице старенького, но очень даже эффективного exilog. Однако со временем в хозяйстве начали появляться почтовики на базе Postfix (как правило в составе комбайнов типа mailcow) и вот для них ничего современного, молодежного и главное простого и быстрого в развертке найти не удалось.

Затем появился ELK и были мои вполне успешные попытки прикрутить парсинг, хранение и отображение всех логов (не только почтовых) к этому стеку. Но оставалось стойкое желание иметь конкретно для почты что-то отдельное, более легковесное, менее ресурсозатратное  и универсальное.

Примерно в это время на гитхабе я наткнулся на замечательный проект Privex Postfix Log parser.

В нем мне сразу понравился подход и возникло желание проект развить, сделав удобнее и расширив область применения, т.к. хотелок у меня было много, а проект казался каким-то незавершенным и подзаброшенным.

Итак, встречайте, MTA Log Parser.

Собственно сабж

Программист из меня так себе, поскольку это не моё основное направление деятельности, но получилось, что получилось. Просьба за исходный код сильно не ругать и тапками не бить.

Изначальный проект на Quart (бэкенд) и VueJS (фронтэнд) был мной доработан, адаптирован под более актуальный vue 3. В качестве СУБД в изначальном проекте используется rethinkdb и миграцию на что-то другое, либо поддержку чего-то другого я пока не делал из соображения - работает - не трогай. Если есть аргументированное мнение, почему стоит переделать СУБД бэкенд на что-то другое - пишите в комментариях, будет интересно почитать.

Список изменений по сравнению с исходным проектом довольно большой и его можно посмотреть в CHANGES.md. Здесь же напишу самое основное на данный момент (v.1.1.2):

  • Поддержка 3-х самых популярных (по версии некоторых ресурсов) MTA - Exim, Postfix и Sendmail

  • Докеризация - существенно упрощает и ускоряет развертку в любой продакшен

  • Более развитый GUI с бОльшим количеством фильтров

  • Локализация GUI (пока поддерживаются русская и английская локали, но добавить поддержку других возможно)

  • Ротация логов (удаление устаревших) по количеству дней

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

Принимаются критика, PR’ы и просто советы от гуру программирования =)

Ну и парочка скриншотов для затравки:

Основное окно с таблицей текущего обработанного лога
Основное окно с таблицей текущего обработанного лога
Модальное окно с подробностями о доставке выбранного письма
Модальное окно с подробностями о доставке выбранного письма

Комментарии (2)


  1. bgelov
    08.06.2023 00:22
    +1

    Хорошо. Похоже немного на то, как это выглядело у Cisco Email Security Appliance.


    1. drlight17 Автор
      08.06.2023 00:22

      Спасибо. Честно говоря, ни разу не видел Cisco Email Security Appliance, поэтому вдохновляться им не мог. Для элементов gui, чтобы не изобретать дизайн, в который я не умею, использовал fomantic-ui.