Мониторинг стека LEMP с помощью Monit в Ubuntu 14.04

Вступление

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

Этот учебник будет основан на базовом стеке LEMP (Linux, Nginx, MySQL, PHP). Monit будет включен для мониторинга всех служб в стеке и оповещения пользователя root о любых неблагоприятных условиях.

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

Предпосылки

  • Прежде чем мы начнем, вам сначала нужно будет установить дроплет Ubuntu 14.04

  • Вам потребуется стандартная учетная запись пользователя с правами sudo.

  • Этот учебник добавляет Monit к существующему стеку LEMP. Учебное пособие по созданию начального стека LEMP см. По адресу https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14. -04 [Как установить стек Linux, nginx, MySQL, PHP (LEMP) в Ubuntu 14.04]

  • Необязательно: Если вы хотите отслеживать удаленный веб-сайт, DNS или почтовый сервер, вы должны настроить этот сервер на общедоступный домен или IP-адрес (подробнее на шаге 6)

Шаг 1. Настройка доставки электронной почты для уведомлений Monit

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

From: [email protected]
To: [email protected]

Resource limit matched Service example.com

       Date:        Mon, 22 Dec 2014 03:04:06
       Action:      alert
       Host:        example.com
       Description: cpu user usage of 79.8% matches resource limit [cpu user usage>70.0%]

Your faithful employee,
Monit

Из этого туториала вы узнаете, как Monit будет отправлять вам электронные письма каждый раз, когда срабатывает оповещение.

  • Примечание: * По умолчанию уведомления Monit будут отправляться в папку со спамом. Обратный DNS (известный как PTR-запись) должен быть правильно настроен, чтобы обеспечить наибольшую вероятность того, что почта будет доставлена ​​успешно. Имя хоста вашей капли должно соответствовать его полному доменному имени (FQDN), поэтому, например, они оба могут быть **. Для редактирования записи PTR капли DigitalOcean откройте панель управления DigitalOcean. Перейдите к * Настройки * и выберите вкладку * Переименовать *. Введите новое имя хоста и нажмите * Переименовать *.

В этом руководстве предполагается, что у вас нет ранее существующего агента пересылки почты (MTA), поэтому мы установим Postfix. Локальная установка Postfix позволяет системе отправлять уведомления по электронной почте внешним почтовым провайдерам, таким как Gmail или Yahoo.

Чтобы начать установку Postfix в качестве MTA, сначала обновите список источников в репозитории системы.

sudo apt-get update

Затем установите пакеты Postfix и GNU Mailutils из репозиториев Ubuntu.

sudo apt-get install postfix mailutils

В конце установки вам будет предложено выбрать тип конфигурации сервера, как показано на скриншоте ниже. Выберите * Интернет-сайт *.

изображение: https: //assets.digitalocean.com/articles/Lemp_Monit/1.png [Postfix - выберите Интернет-сайт]

Когда будет запрошено * Имя системной почты *, используйте полное доменное имя (FQDN) вашей капли. * Примечание: * Имя системной почты также можно изменить позже в + / etc / mailname +.

изображение: https: //assets.digitalocean.com/articles/Lemp_Monit/2.png [Postfix - установить системное имя почты]

Далее откройте файл для редактирования. В этом руководстве будет использоваться Nano, но вы можете использовать любой текстовый редактор, который предпочитаете.

sudo nano /etc/aliases

Здесь мы добавим личный адрес электронной почты, на который будем получать уведомления от Monit. Эти почтовые уведомления будут приходить от пользователя root нашего сервера LEMP.

postmaster: root
root:

При желании также можно добавить несколько пунктов назначения:

root: , ,

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

sudo newaliases

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

echo test | mail -s "test message from my VPS" root

Шаг 2 - Установите и настройте Monit

Monit также доступен в репозиториях пакетов Ubuntu. Краткое справочное руководство по Monit см. По адресу this tutorial.

Monit может быть установлен на ваш сервер LEMP с помощью:

sudo apt-get install monit

В Ubuntu 14.04 файлы конфигурации Monit находятся в основном файле конфигурации Monit: + / etc / monit / monitrc + `.

Чтобы открыть в Nano для редактирования:

sudo nano /etc/monit/monitrc

Раскомментируйте следующие строки и измените их в соответствии с тем, что показано ниже:

set mailserver   #Use localhost for email alert delivery.

set mail-format {
     from: monit@$HOST
  subject: monit alert --  $EVENT $SERVICE
  message: $EVENT Service $SERVICE
                Date:        $DATE
                Action:      $ACTION
                Host:        $HOST
                Description: $DESCRIPTION

           Your faithful employee,
           Monit
}

set alert   #Set email address to receive alerts. This guide uses root mail.

Все еще в файле, теперь раскомментируйте следующие строки и измените, чтобы соответствовать домену вашего сервера или IP-адресу.

check system
   if loadavg (1min) > 4 then alert
   if loadavg (5min) > 2 then alert
   if memory usage > 75% then alert
   if swap usage > 25% then alert
   if cpu usage (user) > 70% then alert
   if cpu usage (system) > 30% then alert
   if cpu usage (wait) > 20% then alert

Мы также добавим эту запись в конец файла:

check filesystem rootfs with path / #Alert if low on disk space.
   if space usage > 90% then alert

Сохраните изменения и выйдите из Nano.

Шаг 3 - Настройка мониторинга сервиса для сервисов LEMP в Monit

В Ubuntu 14.04 конфигурации Monit можно указывать непосредственно в файле + / etc / monit / monitrc + или через отдельные файлы в + / etc / monit / conf.d / +. В этом руководстве отдельные файлы будут создаваться в каталоге + / etc / monit / conf.d / +.

Сначала мы предоставим Monit средства для управления сервисом. Для простоты в этом уроке мы поместим весь мониторинг процессов в один файл, расположенный в + / etc / monit / conf.d / lemp-services +. Используя следующие записи, Monit будет следить за Nginx, MySQL и PHP-FPM и перезапускать эти службы, если они по какой-либо причине были ненормально остановлены.

Мы можем создать рабочий файл с помощью Nano:

sudo nano /etc/monit/conf.d/lemp-services

Добавьте следующие записи для сервисов в нашем стеке LEMP:

check process nginx with pidfile /var/run/nginx.pid
   group www-data
   start program = "/etc/init.d/nginx start"
   stop program = "/etc/init.d/nginx stop"

check process mysql with pidfile /var/run/mysqld/mysqld.pid
   start program = "/etc/init.d/mysql start"
   stop program = "/etc/init.d/mysql stop"

check process php5-fpm with pidfile /var/run/php5-fpm.pid
   start program = "/etc/init.d/php5-fpm start"
   stop program = "/etc/init.d/php5-fpm stop"

Затем сохраните ваши изменения.

Шаг 4 - Добавить действия для перезапуска Unhealthy LEMP Services

Теперь, когда Monit может управлять выбранными службами, можно добавлять действия для перезапуска служб по желанию. Например, Monit имеет возможность контролировать TCP-соединения. Если сервер больше не проверяет HTTP-соединения, Monit может перезапустить PHP-FPM или Nginx, чтобы автоматически решить проблему.

Чтобы построить нашу существующую конфигурацию, мы теперь дополнительно отредактируем + / etc / monit / conf.d / lemp-services +. Ниже показаны дополнения, которые мы сделаем, и мы сообщим Monit перезапустить Nginx и PHP-FPM, если HTTP-соединения больше не доступны. Кроме того, Monit перезапустит MySQL, если сокет недоступен.

  • Примечание: * Обязательно используйте домен или IP-адрес вашего Droplet, где вы видите в первой и третьей записи.

check process nginx with pidfile /var/run/nginx.pid
   group www-data
   start program = "/etc/init.d/nginx start"
   stop program = "/etc/init.d/nginx stop"



check process mysql with pidfile /var/run/mysqld/mysqld.pid
   start program = "/etc/init.d/mysql start"
   stop program = "/etc/init.d/mysql stop"



check process php5-fpm with pidfile /var/run/php5-fpm.pid
   start program = "/etc/init.d/php5-fpm start"
   stop program = "/etc/init.d/php5-fpm stop"

Сохраните изменения и закройте Nano. Затем перезапустите Monit, чтобы применить сделанные вами изменения конфигурации.

sudo service monit restart

Шаг 5 (необязательно) - отслеживание журналов ошибок и ключевых слов

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

Ниже приведен пример журнала Nginx с ошибкой тайм-аута, за которой может следить Monit, и предупреждением о:

2014/12/22 11:03:54 [error] 21913#0: *202571 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 2600:3c01::f03c:91ff:fe6e:5a91, server: example.com, request: "GET /wp-admin/admin-ajax.php?action=wordfence_doScan&isFork=1&cronKey=40cb51ccsdfsf322fs35 HTTP/1.0", upstream: "fastcgi://unix:/var/run/example.com.sock", host: "example.com"

Опираясь на нашу существующую конфигурацию, снова откройте файл конфигурации сервисов LEMP в Nano.

sudo nano /etc/monit/conf.d/lemp-services

Добавьте следующую запись. Он отправит уведомление, когда из-за тайм-аутов Nginx установит связь с PHP-FPM.

check file nginx-error with path /var/log/nginx/error.log
   if match "^timed out" then alert

Сохраните изменения и закройте Nano. Затем перезапустите Monit, чтобы изменения вступили в силу:

sudo service monit restart

Шаг 6 (необязательно) - использование Monit для мониторинга удаленного веб-сайта и других служб

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

Для внеполосных целей предпочтительно иметь внешнюю систему Monit в совершенно другом центре обработки данных. Если бы веб-приложение базировалось в Нью-Йорке, было бы идеально иметь небольшой внешний сервер Monitor в Сан-Франциско.

Ниже приведены примеры внешних проверок Monit, которые могут быть реализованы на втором хосте, на котором запущен Monit. Эти примеры будут помещены в файл + / etc / monit / conf.d / lemp-external + внешнего сервера для удаленной проверки нашего стека LEMP в **.

Используйте Nano для создания этого файла конфигурации:

sudo nano /etc/monit/conf.d/lemp-external

Мониторинг ответа ICMP и подключения HTTP и HTTPS:

# ICMP check
check host  with address
   if failed icmp type echo
       for 5 times within 5 cycles
       then alert

# HTTP check
   if failed
         port 80 protocol http
      for 5 times within 5 cycles
      then alert

# HTTPS check
   if failed
         port 443 type tcpSSL protocol http
      for 5 times within 5 cycles
      then alert

Мониторинг DNS:

check host  with address
   if failed port 53 type udp protocol dns then alert

Монитор SMTP:

check host  with address
   if failed port 25 type tcp protocol smtp then alert

Мониторинг работоспособности URL-адреса веб-приложения

Для веб-приложений Monit также может выполнить определенный запрос по URL-адресу проверки работоспособности. Ниже приведен пример сайта ** с URL-адресом проверки работоспособности: + https: // remote-example.com / healthcheck +.

check host  with address
   if failed
         port 443 type tcpSSL protocol http
      request "/healthcheck"
      for 5 times within 5 cycles
      then alert

Шаг 7 - Управление Monit из командной строки

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

Для запуска проверки состояния Monit из командной строки должна быть включена веб-служба Monit. Для этого откройте + / etc / monit / monitrc + для редактирования в Nano.

sudo nano /etc/monit/monitrc

Раскомментируйте следующие строки для локального включения веб-службы:

set httpd port 2812 and
       use address localhost
       allow localhost

Сохраните изменения и выйдите из Nano. Затем перезапустите Monit:

sudo service monit restart

Теперь можно проверить состояние Monit из командной строки.

Ниже приведены команды для временного отключения и включения мониторинга:

sudo monit unmonitor all

sudo monit monitor all

Шаг 8 - Просмотр отчетов

Давайте посмотрим на отчеты по всем проверкам, которые мы настраивали.

sudo monit status

Теперь вы увидите выходные данные для всего, что вы настроили для проверки Monit, включая локальные службы LEMP и любые внешние проверки:

sudo monit status
The Monit daemon 5.6 uptime: 0m

System 'example.com'
 status                            Running
 monitoring status                 Monitored
 load average                      [0.00] [0.01] [0.05]
 cpu                               0.5%us 0.4%sy 0.0%wa
 memory usage                      115132 kB [22.9%]
 swap usage                        0 kB [0.0%]
 data collected                    Mon, 22 Dec 2014 16:50:42

Filesystem 'rootfs'
 status                            Accessible
 monitoring status                 Monitored
 permission                        755
 uid                               0
 gid                               0
 filesystem flags                  0x1000
 block size                        4096 B
 blocks total                      5127839 [20030.6 MB]
 blocks free for non superuser     4315564 [16857.7 MB] [84.2%]
 blocks free total                 4581803 [17897.7 MB] [89.4%]
 inodes total                      1310720
 inodes free                       1184340 [90.4%]
 data collected                    Mon, 22 Dec 2014 16:50:42

Process 'nginx'
 status                            Running
 monitoring status                 Monitored
 pid                               14373
 parent pid                        1
 uptime                            28m
 children                          4
 memory kilobytes                  1364
 memory kilobytes total            9228
 memory percent                    0.2%
 memory percent total              1.8%
 cpu percent                       0.0%
 cpu percent total                 0.0%
 port response time                0.018s to example.com:80 [HTTP via TCP]
 data collected                    Mon, 22 Dec 2014 16:50:42

Process 'mysql'
 status                            Running
 monitoring status                 Monitored
 pid                               12882
 parent pid                        1
 uptime                            32m
 children                          0
 memory kilobytes                  44464
 memory kilobytes total            44464
 memory percent                    8.8%
 memory percent total              8.8%
 cpu percent                       0.0%
 cpu percent total                 0.0%
 unix socket response time         0.000s to /var/run/mysqld/mysqld.sock [DEFAULT]
 data collected                    Mon, 22 Dec 2014 16:50:42

Process 'php5-fpm'
 status                            Running
 monitoring status                 Monitored
 pid                               17033
 parent pid                        1
 uptime                            0m
 children                          2
 memory kilobytes                  13836
 memory kilobytes total            22772
 memory percent                    2.7%
 memory percent total              4.5%
 cpu percent                       0.0%
 cpu percent total                 0.0%
 port response time                0.018s to example.com:80 [HTTP via TCP]
 data collected                    Mon, 22 Dec 2014 16:50:42

File 'nginx-error'
 status                            Accessible
 monitoring status                 Monitored
 permission                        644
 uid                               0
 gid                               0
 timestamp                         Mon, 22 Dec 2014 16:18:21
 size                              0 B
 data collected                    Mon, 22 Dec 2014 16:50:42

Remote Host 'example.com'
 status                            Online with all services
 monitoring status                 Monitored
 icmp response time                0.021s [Echo Request]
 port response time                0.107s to example.com:443 [HTTP via TCPSSL]
 port response time                0.062s to example.com:80 [HTTP via TCP]
 data collected                    Mon, 22 Dec 2014 16:50:42

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

Поиск проблемы

Если возникнут какие-либо проблемы, сначала проверьте журналы Monit, расположенные в + / var / log / monit.log +. Это даст вам больше информации о природе проблемы.

Пример записи в журнале ошибок:

[UTC Dec 22 13:59:54] error    : ICMP echo response for example.com 1/3 timed out -- no response within 5 seconds
[UTC Dec 22 14:10:16] error    : ICMP echo response for example.com 1/3 timed out -- no response within 5 seconds
[UTC Dec 22 15:24:19] error    : 'example.com' failed protocol test [HTTP] at INET[example.com:80] via TCP -- HTTP: Error receiving data -- Resource temporarily unavailable
[UTC Dec 22 15:57:15] error    : ICMP echo response for example.com 1/3 timed out -- no response within 5 seconds
[UTC Dec 22 17:00:57] error    : ICMP echo response for example.com 1/3 timed out -- no response within 5 seconds
[UTC Dec 22 17:49:00] error    : 'example.com' failed, cannot open a connection to INET[example.com:443/API] via TCPSSL

Заключение

После завершения этого руководства вы должны настроить Monit для мониторинга стека LEMP в Ubuntu 14.04. Monit достаточно расширяемый и может быть легко настроен или расширен для мониторинга всех видов услуг для малых и больших сетей.

Ниже приведены некоторые дополнительные ссылки для Monit:

Related