Обеспечьте мгновенную отправку журналов сбоев на ваш почтовый ящик

В предыдущем руководстве я показал вам, как развернуть веб-приложение в облаке и подключить его к собственному домену. Теперь, когда у вас есть приложение, ваша работа сделана, не так ли? Не совсем. Даже в самом лучшем программном обеспечении есть ошибки, поэтому ваше приложение рано или поздно выйдет из строя, и когда это произойдет, могут пройти часы, дни или недели, прежде чем вы узнаете. Разве не было бы здорово получить уведомление сразу по электронной почте? В этом руководстве я покажу вам, как это настроить.

Предисловие

Я ожидаю, что у вас уже есть приложение, работающее на сервере под управлением Ubuntu и подключенное к вашему собственному интернет-домену. Процесс запуска приложения должен управляться с помощью Systemd, встроенного диспетчера служб Ubuntu. Если вы не уверены в этом, я пройдусь по основным шагам здесь.

Если у вас все это настроено, у вас уже должно быть понимание концепций и терминов, используемых в дальнейшем, включая базовые действия веб-хостинга, такие как добавление записей DNS для вашего домена. При необходимости дается определение любых специализированных терминов.

Шаги

Это руководство разбито на четыре основных этапа:

  1. Настройка почтового сервера
  2. Создание службы отчетов о сбоях
  3. Настройка служб для использования Crash Reporter
  4. Обеспечение фактического получения отправленных писем

Давайте начнем!

Настройка почтового сервера

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

Во-первых, убедитесь, что ваша система обновлена. Выполните следующую команду:

sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y

Затем установите пакет mailutils:

sudo apt install mailutils -y

Вы должны увидеть следующий экран. Нажмите Enter, чтобы принять вариант по умолчанию.

Теперь вы должны увидеть текстовое поле. Введите доменное имя, к которому подключен ваш сервер, затем нажмите Enter, чтобы продолжить.

После завершения настройки запустите команду mail, чтобы убедиться, что все прошло хорошо. На выходе должно получиться что-то вроде No mail for user.

Создание службы отчетов о сбоях

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

Запустите sudo nano /lib/systemd/system/[email protected]. В текстовом редакторе откроется новый служебный файл Systemd. Обратите внимание, что @ в имени файла указывает, что служба принимает переменную на входе (подробнее об этом позже).

В файл вставьте следующий текст. Обязательно замените все экземпляры imranr.dev на ваше фактическое доменное имя и замените [email protected] адрес электронной почты на адрес электронной почты, на который вы хотите отправлять журналы сбоев.

[Unit]
Description=Send service logs email
[Service]
Type=oneshot
ExecStart=/usr/bin/bash -c '/usr/bin/systemctl status %i | /usr/bin/mail -s "[SYSTEMD_%i] Fail" -r "imranr.dev<[email protected]>" [email protected]'

Как вы можете понять, взглянув на него, это довольно простой файл. При запуске служба получает последние журналы из любой другой службы (указанной переменной %i, указанной при запуске), а затем использует команду mail для отправки их по электронной почте на заранее определенный адрес.

Теперь нажмите Ctrl-X на клавиатуре (Cmd-X для Mac), затем нажмите Y, затем Enter. Это сохранит файл. То же сочетание клавиш будет использоваться для сохранения файлов во всех последующих случаях использования команды nano.

Настройка служб для использования Crash Reporter

Теперь используйте ту же команду nano, чтобы внести следующие изменения в любые служебные файлы, которые вы хотите отслеживать на предмет сбоев.

Например, если я хочу получать по электронной почте журналы сбоев при каждом сбое моего приложения Node.js, я найду служебный файл, который его запускает (nodeapp.service в моем случае), а затем запускаю sudo nano /lib/systemd/system/nodeapp.service.

После открытия файла добавьте следующую строку под заголовком [Unit]:

OnFailure=notify-email@%i.service

Эта строка сообщает службе запустить службу notify-email в случае сбоя. %i в строке здесь - это имя текущей службы и соответствует переменной %i в файле службы аварийного репортера.

Еще раз нажмите Ctrl-X, затем Y, затем Enter, чтобы сохранить файл.

Повторив этот процесс для всех служб, за которыми вы хотите следить, запустите sudo systemctl daemon-reload, чтобы обновить Systemd, затем перезапустите соответствующие службы по отдельности или перезагрузите сервер, чтобы перезапустить все из них.

Обеспечение фактического получения отправленных писем

Технически теперь все должно работать, но любые журналы сбоев, отправленные с вашего сервера, вероятно, никогда не попадут в ваш почтовый ящик. Это связано с тем, что Gmail, Outlook и большинство других поставщиков услуг электронной почты распознают его как спам (такой плохой, что он сразу отклоняется и даже не попадает в папку со спамом).

Серверная часть почтовых систем сложна; настолько, что существуют целые предприятия, которые помогают вам убедиться, что ваши электронные письма проходят через системы фильтрации спама. Хотя вам не нужно разбираться в деталях сложного словарного супа, который представляет собой конфигурацию электронной почты (значительные затраты времени и усилий), я расскажу вам основные шаги, которые я предпринял, чтобы убедиться, что мои электронные письма с журналом сбоев сервера принимаются моими Аккаунт Gmail:

  1. Добавление записи SPF
  2. Настройка DKIM
  3. Изменение имени почтового хоста и включение rDNS.
  4. Добавление адреса электронной почты в белый список
  5. Тестирование

Добавление записи SPF

Записи SPF используются для проверки того, что IP-адрес, с которого отправлено конкретное электронное письмо, авторизован для отправки электронных писем от имени домена, из которого, по утверждениям, поступает электронное письмо. Например, если я попытаюсь отправить вам электронное письмо, которое предположительно пришло с medium.com, вы поймете, что это, вероятно, спам, потому что запись SPF medium.com не включает мой IP-адрес.

Перейдите на свою платформу веб-хостинга и добавьте следующую запись TXT:

v=spf1 mx -all

Это указывает на то, что любой IP-адрес, указанный в качестве записи MX, также должен быть авторизован для отправки электронной почты.

Я использую DigitalOcean, поэтому вот как это будет выглядеть для меня:

Запись MX используется для указания, какие серверы следует использовать в качестве почтовых серверов для домена. Поскольку наш почтовый сервер находится в том же домене, что и IP-адрес отправителя, мы добавим соответствующую запись MX:

Настройка DKIM

Как и SPF, записи DKIM используются для проверки того, что электронное письмо отправлено из домена, из которого оно, как утверждается, было отправлено. Выполните шаги, описанные здесь, чтобы настроить DKIM. Они написаны для DigitalOcean, но применимы к любой платформе.

Изменение имени почтового хоста и включение rDNS.

Как вы знаете, DNS - это система, используемая для получения IP-адреса для доменного имени; rDNS - полная противоположность - он используется для поиска доменного имени для данного IP-адреса. Это еще одна система, используемая для определения того, является ли электронное письмо спамом.

Настройка rDNS отличается в зависимости от того, как размещен ваш сервер. В случае с DigitalOcean это так же просто, как переименование вашей капли на ваше доменное имя. Возможно, вам придется поискать, чтобы узнать, как ваш провайдер обрабатывает rDNS.

Как только это будет сделано, вам нужно изменить имя хоста, используемое почтовым сервером, чтобы оно соответствовало этому домену. Для этого запустите nano /etc/postfix/main.cf и измените значение myhostname на свое доменное имя.

Добавление адреса электронной почты в белый список

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

Тестирование

Убедитесь, что все работает, намеренно отключив отслеживаемую службу и проверив, получили ли вы электронное письмо. Вы также можете использовать mail-tester.com, чтобы проверить, правильно ли вы выполнили шаги по снижению спамности вашей электронной почты.

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

Надеюсь, вы нашли это руководство полезным; большое спасибо за чтение!