Мониторинг эффективности стека LEMP с использованием Nginx Amplify на Ubuntu 20.04 и 18.04

Nginx Amplify — это бесплатный и мощный инструмент для анализа нагрузки и производительности веб-серверов Nginx и Nginx Plus. Он прост в настройке и эксплуатации. Кроме того, Nginx Amplify включает плагины для MySQL/MariaDB и PHP-FPM, что позволяет осуществлять мониторинг полноценного LEMP-приложения (LEMP включает в себя Linux, Nginx, MySQL/MariaDB и PHP).

Nginx Amplify — это продукт, созданный компанией Nginx, Inc., которая также разработала веб-сервер Nginx. Это решение работает на базе SaaS. Вам необходимо установить агент Nginx Amplify на своем сервере, который будет собирать и отправлять метрики в облачный сервис. Агент Nginx Amplify обладает открытым и легковесным характером. Он собирает разнообразные метрики, в том числе:

  • Метрики системы (загрузка процессора, использование оперативной памяти, объем сетевого трафика, нагрузка на диск, операции ввода-вывода, время задержки диска и прочие показатели).
  • Метрики Nginx включают в себя такие показатели, как количество соединений, количество запросов, статусы HTTP, время отклика, объем переданного трафика и другие параметры.
  • Метрики MySQL/MariaDB включают в себя соединения, выборочные запросы, запросы на вставку, обновление, медленные запросы и другие показатели.
  • Метрики PHP-FPM, такие как количество соединений, очередь соединений, медленные запросы и другие параметры.

Nginx Amplify обладает возможностями, позволяющими…

  • Применить статический анализатор для оптимизации настроек Nginx.
  • Сообщать вам о необычном поведении.

Установка Nginx Amplify на сервер с операционной системой Linux Ubuntu версии 18.04 или 20.04.

Агент Nginx Amplify доступен в открытом формате, и вы можете воспользоваться установочным скриптом для инсталляции Nginx Amplify на различных дистрибутивах Linux:

  • Дебиан 10, Дебиан 11
  • Ubuntu 20.04 и Ubuntu 18.04
  • RHEL/CentOS 8 — это операционная система, основанная на Red Hat Enterprise Linux, которая предлагает стабильную и надежную платформу для серверных и корпоративных приложений.

Настройка Nginx Amplify.

Пожалуйста, подтвердите свой адрес электронной почты. Затем вам потребуется установить Nginx Amplify Agent на сервер с Linux. Подключитесь к серверу через SSH и войдите в систему как root. На сайте Nginx Amplify вы найдете удобные команды для установки, просто скопируйте их и выполните на своем сервере.

Учтите, что данные команды следует выполнять с правами пользователя root.

скрипт установки nginx amplify

Загрузите установочный скрипт.

установить nginx amplify

Запустите установочный скрипт. (Каждый аккаунт Amplify обладает собственным API-ключом.)

Установка Nginx Amplify на Ubuntu 18.04.

После установки агент запустится автоматически. Вы можете проверить его статус с помощью:

systemctl status amplify-agent

amplify-agent.service - LSB: Запуск и остановка nginx-amplify-agent Загружено: загружено (/etc/init. d/amplify-agent; создано автоматически) Статус:действует с ср 2019-02-27 03:37:05 UTC; 1 мин 17 с назад Документы: man:systemd-sysv-generator(8) Процесс: 9306 ExecStop=/etc/init. d/amplify-agent stop (код=завершен, статус=0/SU Процесс: 9341 ExecStart=/etc/init. d/amplify-agent start (код=завершен, статус=0/ Задачи: 3 (лимит: 2361) CGroup: /system. slice/amplify-agent.service └─9407 amplify-agent

Совет: нажмите клавишу Q, чтобы вернуть управление терминалом после выполнения указанной команды.

Чтобы активировать автозапуск при старте системы, выполните следующие действия:

sudo systemctl enable amplify-agent

Конфигурация Stub_status в Nginx

Агент Amplify способен автоматически собирать системные метрики. Для получения метрик Nginx необходимо настроить параметр stub_status в конфигурации Nginx. Для этого откройте файл nginx.conf.

Читайте также:  Лучшие медиаплееры для Linux в 2024 году

sudo nano /etc/nginx/nginx.conf

Вставьте данный серверный блок в контекст HTTP.<. >.

server < listen 127.0.0.1:80; server_name 127.0.0.1; location /nginx_status < stub_status on; allow 127.0.0.1; deny all; >>

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

sudo systemctl reload nginx

Теперь агент Amplify готов к сбору метрик Nginx.

время отклика upstream в nginx amplify

Разработка индивидуального формата логирования для Nginx

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

Откройте документ nginx.conf.

sudo nano /etc/nginx/nginx.conf

Включите следующие строки в контекст HTTP.<. >Выше директивы include мы настраиваем собственный формат журнала Nginx, который назвали apm (мониторинг производительности приложения). Этот формат включает такие параметры, как request_time, upstream_response_time, upstream_connect_time и upstream_header_time. Все значения фиксируются в секундах с точностью до миллисекунд.

log_format apm '"$time_local" client=$remote_addr ' 'method=$request_method request="$request" ' 'request_length=$request_length ' 'status=$status bytes_sent=$bytes_sent ' 'body_bytes_sent=$body_bytes_sent ' 'referer=$http_referer ' 'user_agent="$http_user_agent" ' 'upstream_addr=$upstream_addr ' 'upstream_status=$upstream_status ' 'request_time=$request_time ' 'upstream_cache_status="$upstream_cache_status" ' 'upstream_response_time=$upstream_response_time ' 'upstream_connect_time=$upstream_connect_time ' 'upstream_header_time=$upstream_header_time';

Сохраните изменения и закройте документ. После этого откройте файл конфигурации для вашего виртуального хоста Nginx. Например,

sudo nano /etc/nginx/conf.d/linux16.ru.conf

Файл конфигурации виртуального хоста Nginx обычно располагается в папке /etc/nginx/sites-enabled/. Я предпочитаю применять папку /etc/nginx/conf.d/.

В рамках сервера<. >Добавьте две строки для активации журнала доступа и журнала ошибок. Журнал доступа будет использовать формат apm, в то время как журнал ошибок настроен на уровень предупреждений.

access_log /var/log/nginx/linux16.ru.access.log apm; error_log /var/log/nginx/linux16.ru.error.log warn;

Сохраните изменения и закройте файл. После этого выполните перезагрузку Nginx.

sudo systemctl reload nginx

Теперь я имею возможность отслеживать время отклика upstream и другие показатели производительности в графиках Amplify. Оптимальное время отклика для upstream составляет менее 0,5 секунды. Если этот показатель выше, пользователи могут ощутить медлительность вашего сайта. При правильной настройке сервера, если время отклика upstream будет меньше 0,2 секунды, ваш сайт станет значительно более отзывчивым.

мониторинг производительности nginx amplify

Как определить, какие HTTP-запросы требуют много времени? Проверьте журнал доступа Nginx на наличие термина «request_time=1», который укажет на запросы, длительность которых превышает 1 секунду. Обратите внимание: если вы настроили кэширование FastCGI в Nginx, то для кэшированных страниц значение request_time будет отображаться как 0 секунд.

Вероятные факторы, способствующие длительному времени обработки запроса:

  • База данных MySQL/MariaDB функционирует с низкой скоростью.
  • Сервер испытывает значительную нагрузку. (Для мониторинга средних значений нагрузки воспользуйтесь командой htop.)

Если агент Amplify не передает метрики Nginx, убедитесь, что он запущен от того же пользователя, что и Nginx. Также стоит проверить наличие обновленной версии агента Amplify.

Как удалить свой IP-адрес из логов доступа Nginx.

Иногда ваша активность может искажать статистику Nginx. Чтобы избежать этого, вы можете исключить свой IP-адрес из журнала доступа. Сначала добавьте указанные строки в секцию http конфигурационного файла Nginx. Не забудьте заменить 12.34.56.78 на ваш фактический IP-адрес. Если запрос поступит с вашего IP, Nginx установит переменную $log_ip в 0.

map $remote_addr $log_ip < "12.34.56.78" 0; default 1; >

После этого модифицируйте директиву access_log следующим образом.

access_log /var/log/nginx/linux16.ru.access.log apm if=$log_ip;

Сохраните изменения в файле и закройте его. После этого проверьте настройки nginx и выполните перезагрузку.

sudo nginx - t sudo systemctl reload nginx

Примечание : Если вы используете плагин WordPress Popular Posts на своем сайте WordPress, то будет много HTTP POST-запросов, отправляемых из браузеров посетителей на ваш веб-сервер, и это также может искажать request_time в Nginx Amplify. Чтобы минимизировать это влияние, вы можете перейти в Настройки -> WordPress Popular Posts ->Настройте инструменты и активируйте логирование просмотров исключительно для зарегистрированных пользователей. Это также поможет снизить нагрузку на сервер.

Читайте также:  Как установить Elasticsearch на CentOS 7/6

Способы контроля за сервером баз данных MariaDB/MySQL.

В первую очередь необходимо создать учетную запись пользователя в MariaDB/MySQL для сбора метрик. Зайдите в интерфейс мониторинга MariaDB/MySQL.

sudo mysql - u root

Создайте нового пользователя для агента Amplify. Убедитесь, что вместо your_password вы вводите свой желаемый пароль. Рекомендуется использовать пароль, который отличается от пароля root для MariaDB/MySQL.

create user 'amplify-agent'@'localhost' identified by 'your_password';

Покиньте сервер MariaDB/MySQL.

exit;

После этого необходимо активировать плагин Amplify для MariaDB/MySQL в конфигурационном файле Amplify.

sudo nano /etc/amplify-agent/agent.conf

В разделе [extensions] вы заметите, что плагин mysql изначально выключен.

[extensions] phpfpm = True mysql = False

Замените False на True, чтобы активировать данный плагин.

[extensions] phpfpm = True mysql = True

После этого в разделе [mysql] locate the following line.

password = amplify-agent

Смените стандартный пароль на тот, который вы задали для пользователя amplify-agent. После этого сохраните изменения и закройте файл. Затем перезапустите агент Amplify, чтобы изменения были применены.

sudo systemctl restart amplify-agent

Теперь агент Amplify приступает к сбору метрик для MariaDB/MySQL.

Мониторинг производительности MariaDB с использованием Nginx Amplify.

Как активировать запись медленных запросов в MariaDB

Журнал медленных запросов позволяет выявить запросы, которые занимают продолжительное время для получения ответа. Этот инструмент играет ключевую роль в улучшении производительности MariaDB. Для активации журнала медленных запросов необходимо внести изменения в конфигурационный файл сервера.

sudo nano /etc/mysql/mariadb.conf.d/50-server. cnf

Отметьте следующие четыре строки:

#slow_query_log_file = /var/log/mysql/mariadb-slow.log #long_query_time = 10 #log_slow_verbosity = query_plan, explain #log-queries-not-using-indexes

Удалите символ # и установите значение long_query_time на низкое значение, например, 1 секунду. Можно указать и еще меньшее, к примеру, 0.5.

slow_query_log_file = /var/log/mysql/mariadb-slow.log long_query_time = 1 log_slow_verbosity = query_plan, explain log-queries-not-using-indexes

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

slow_query_log = 1

Сохраните файл и закройте его. Перезапустите MariaDB для применения изменений.

sudo systemctl restart mariadb

sudo systemctl restart mysql

Теперь Nginx Amplify предоставляет возможность отображать медленные запросы в виде графиков.

nginx amplify журнал медленных запросов mariadb

Если ваша MySQL или MariaDB функционирует с замедлением, в первую очередь стоит проанализировать QPS (количество запросов в секунду), что является показателем нагрузки на базу данных. На следующем скриншоте видно, что один из моих серверов MariaDB испытывает значительное давление, достигая около 1000 запросов в секунду.

количество запросов MySQL в секунду

Вы можете также узнать QPS через командную строку.

sudo mysqladmin status

Время работы: 405276 Потоки: 11 Вопросы: 389965946 Медленные запросы: 4536289 Открытия: 103692 Сброс таблиц: 3 Открытые таблицы: 3999 Запросы в секунду (в среднем): 962.223

Активирование журнала медленных запросов в MySQL 8.

Если вы применяете MySQL 8 вместо MariaDB, необходимо внести изменения в конфигурационный файл сервера.

sudo nano /etc/mysql/mysql.conf.d/mysqld. cnf

Вставьте указанные строки в конце данного файла.

slow_query_log_file = /var/log/mysql/slow-query.log long_query_time = 1 log-queries-not-using-indexes = ON slow_query_log = 1

Сохраните изменения в файле и закройте его. Затем перезапустите сервер MySQL для применения новых настроек.

sudo systemctl restart mysql

Способы отслеживания работы PHP-FPM.

Плагин PHP-FPM для агента Amplify активен по умолчанию, однако необходимо активировать статус PHP-FPM для сбора метрик. Измените конфигурационный файл пула PHP-FPM.

sudo nano /etc/php/7.4/fpm/pool. d/www.conf

Найдите следующую строку и удалите точку с запятой, чтобы активировать статус PHP-FPM.

;pm. status_path = /status

Будет полезно активировать медленный журнал PHP, который поможет определить, какие запросы требуют слишком много времени. Найдите строку ниже:

Читайте также:  Использование Dnfdragora для управления пакетами

;slowlog = log/$pool.log. slow

Уберите знак препинания и укажите адрес для журнала.

slowlog = /var/log/php-fpm/slow.log

После этого обнаружьте следующую строку.

;request_slowlog_timeout = 0

Измените настройки: удалите точку с запятой и установите время ожидания в секундах, например, 1s.

request_slowlog_timeout = 1s

Сохраните файл и закройте его. Организуйте папку для логов PHP-FPM.

sudo mkdir - p /var/log/php-fpm/

Перезапустите PHP-FPM, чтобы применить изменения.

sudo systemctl restart php7.4-fpm

Теперь агент Amplify приступает к сбору метрик PHP-FPM, включая запись медленных запросов.

Мониторинг PHP-FPM с помощью Nginx Amplify.

Имейте в виду, что при установке новой версии PHP-FPM, например PHP8.0-FPM, потребуется повторно настроить параметры в файле /etc/php/8.0/fpm/pool. d/www.conf.

Обзорная страница Amplify

На странице с обзором вы найдете общую оценку состояния приложения, а также 5 основных показателей для вашей системы.

  • Общее число обращений
  • Ошибки HTTP с кодами 5xx
  • Запрос времени (Для отображения этой метрики необходимо настроить собственный формат логов, как было описано ранее.)
  • Какое количество трафика обрабатывает Nginx
  • Применение процессора

Обзорная страница Nginx Amplify

Количество ошибок HTTP 5xx оказывает влияние на состояние приложения. При отсутствии таких ошибок оценка составит 100%.

Нажав на значок сервера, вы сможете просмотреть, сколько процессорных и оперативных ресурсов используется вашей системой, а также сколько ресурсов потребляет Nginx.

Мониторинг системных метрик Ubuntu с помощью Nginx Amplify

Графики

На странице «Графики» представлены встроенные системные метрики, а также показатели Nginx, MariaDB/MySQL и PHP-FPM.

Графики в nginx amplify

Панели мониторинга Nginx Amplify

Дашборды Amplify предоставляют возможность создавать индивидуальные графики и диаграммы, а также объединять их на одной странице. К примеру, можно собрать все графики, отражающие показатели производительности, на одной странице, либо настроить отображение всех метрик для определённого URL.

Панель управления Nginx Amplify

После настройки кеширования Nginx FastCGI у вас есть возможность создавать графики, отображающие коэффициент попаданий в кеш Nginx и время истечения срока действия кеша на вашей панели управления.

Анализатор

Одним из ценных средств в анализаторе выступает статический анализ. Amplify способен просматривать ваш файл конфигурации Nginx и предоставлять советы по вопросам производительности, безопасности и надежности. Этот инструмент поможет вам обнаружить ошибки и оптимизировать настройки.

nginx amplify статический анализ

На моем сервере Nginx отображается 5 предупреждений, поэтому я кликаю на ссылку «Открыть», чтобы узнать, как правильно настроить конфигурацию Nginx.

Анализ конфигурации в nginx amplify

После того как вы внесете изменения, подождите несколько минут, и уведомление пропадет.

Оповещения

Если агент Amplify перестанет функционировать, на ваш электронный адрес поступит уведомление по умолчанию. На странице уведомлений есть возможность настроить различные предупреждения для вашего сервера. К примеру, можно настроить Amplify так, чтобы он отправлял мне письмо, если время отклика от upstream превышает 1 секунду на протяжении последних 2 минут.

Оповещение Nginx Amplify

Если на вашем сервере иссякнет оперативная память, это может привести к остановке работы MySQL/MariaDB. Вы можете настроить правило оповещения для отслеживания времени работы MySQL/MariaDB, как указано ниже. Если время работы составляет менее 120 секунд в течение последних 2 минут, отправьте уведомление по электронной почте.

nginx amplify mysql. global. uptime

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

Оповещение NGINX Amplify: ошибка HTTP статуса 5xx.

Агент Amplify прекращает свою деятельность.

Я часто сталкивался с тем, что агент Amplify внезапно перестает передавать метрики производительности. Чтобы устранить эту проблему, я настроил задачу Cron, которая перезапускает агент Amplify ежедневно.

sudo crontab - e

Включите следующую строку.

@daily systemctl restart amplify-agent

Наблюдение за MariaDB в окружении Galera Cluster

Агент Amplify, похоже, прекратит передачу метрик MariaDB при работе в кластере Galera.

Наблюдение за эффективностью серверов на базе Linux.

Nginx Amplify отлично подходит для отслеживания производительности Nginx, MySQL/MariaDB и PHP. Однако что насчет аппаратного обеспечения и операционной системы? Как определить, работают ли ваши диски медленно? Для этого можно воспользоваться Netdata, который предоставляет детальную информацию о состоянии системы.

  • Отслеживание эффективности серверов Linux с использованием Netdata.

Заключение

Надеюсь, данная статья была полезной для вас в процессе установки и использования Nginx Amplify для отслеживания производительности приложений, основанных на Nginx, или стека LEMP на Ubuntu 18.04 или 20.04. Возможно, вас также заинтересуют следующие материалы:

  • Установка нескольких версий PHP на Ubuntu.

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