Apache Zabbix
Last updated
Last updated
https://habr.com/ru/companies/first/articles/695012/
На сегодня Apache представляет собой одно из самых популярных ПО для создания Web-сервера. Среди достоинств Apache — доступность, гибкость настройки, модульная структура, позволяющая подключать необходимую функциональность, совместимость с различными платформами, языками программирования и базами данных, масштабируемость и огромное сообщество пользователей.
Очень часто Apache работает в паре с NGINX, об установке и мониторинге которого мы рассказывали в предыдущей статье. Вы также можете создать быстрый сайт вообще без Apache, используя только NGINX или другое высокопроизводительное решение.
Но если по тем или иным причинам ваши сайты работают на базе Apache, имеет смысл настроить мониторинг и при необходимости оптимизировать конфигурацию Apache. В этой статье мы расскажем о том, как установить Apache и настроить его мониторинг помощи Zabbix. Также приведем рекомендации по оптимизации памяти и повышения производительности.
Если на вашем сервере установлена панель управления, такая как ISPmanager, Hestia Control Panel или другая, то, скорее всего, вместе с ней уже было установлено ПО Apache.
Это легко проверить при помощи следующей команды:
Когда Apache нет, вы увидите такое сообщение на консоли:
Если же Apache работает, на консоли появится информация о запущенном сервисе apache2.service:
Обратите внимание, что сервис apache2.service должен находиться в статусе active (running), а также enabled. В этом случае Apache будет запущен автоматически при перезагрузке сервера.
В том случае, когда на сервере с панелью управления не установлен Apache, то его нужно устанавливать при помощи панели. Если же панели нет, то ниже мы привели простую инструкцию:
После установки нужно проверить состояние Apache командой «systemctl status apache2», убедившись, что сервис работает и будет автоматически перезапущен при перезагрузке ОС. Если это не так, введите такую команду:
Возможно, вам придется устанавливать и подключать дополнительные модули, изменять используемый MPM. При необходимости воспользуйтесь полной инструкцией по установке Apache для разных ОС.
Шаблон Apache by Zabbix agent не требует установки дополнительных скриптов — просто добавьте его для контролируемого узла с помощью веб-интерфейса Zabbix. Однако для использования этого шаблона к Apache необходимо подключить модуль status_module.
Описание данного шаблона можно найти в документации.
Прежде всего проверьте, подключен ли модуль status_module:
Здесь команда «apachectl -M» выведет на консоль список всех подключенных модулей.
Если модуль не подключен, найдите и отредактируйте файл status.conf:
В блоке /server-status укажите IP, для которого будет доступна статистика, как 127.0.0.1/32:
После редактирования проверьте конфигурацию Apache. Если ошибок нет, подключите модуль status_module и перезапустите сервис:
Когда на Web-сервере работает только Apache, и нет NGINX, то для Apache используется порт 80 (протокол HTTP) и 443 (протокол HTTPS). В иных конфигурациях Apache может занимать другие порты.
Чтобы определить, на каком порту запущен Apache, установите net-tools:
После установки запустите утилиту netstat следующим образом:
В данном случае видно, что процесс apache2 занял порт 81.
Для определения порта, занятого процессом apache2, можно также использовать более современную и более «многословную» утилиту ss:
Порт Apache, который мы только что определили, потребуется нам позже при настройке макросов шаблона Apache by Zabbix agent.
Итак, мы подключили модуль status_module, настроили конфигурацию Apache для получения от него информации о состоянии и узнали номер порта, на котором работает Apache.
Теперь в консоли сервера введите такую команду (здесь предполагается, что Apache работает на порту 8080):
В результате на консоли должна появиться детальная информация о состоянии сервиса Apache на момент ввода команды:
Если состояние появилось, значит, можно продолжить настройку шаблона Apache by Zabbix agent.
При настройке макросов как минимум необходимо отредактировать значения {$APACHE.PROCESS_NAME} и {$APACHE.STATUS.PORT}.
Первое из них задает имя процесса Apache и здесь по умолчанию указана строка «httpd». В нашем случае процесс называется apache2, поэтому нужно изменить значение соответствующим образом.
Второй из перечисленных макросов задает номера порта, причем по умолчанию указан порт 80. Если ваш сервис Apache работает на другом порту, этот макрос необходимо отредактировать (рис. 1).
Рис. 1. Отредактированные макросы шаблона Apache by Zabbix agent
Макрос {$APACHE.RESPONSE_TIME.MAX.WARN} задает максимальное значение отклика Apache, после превышения которого срабатывает триггер Apache: Service response time is too high.
Что касается макросов {$APACHE.STATUS.SCHEME}, {$APACHE.STATUS.HOST} и {$APACHE.STATUS.PATH}, то они используются при составлении адреса URL для запроса состояния Apache:
Скорее всего, вам не придется изменять их значения.
В шаблоне Apache by zabbix agent определено более двух десятков метрик. Кроме того, определены правило LLD для метрик MPM, имеющих отношение к соединениям, количеству асинхронных процессов и размеру запросов в байтах.
Часть собираемых метрик показана на рис. 2.
Рис. 2. Часть метрик шаблона Apache by zabbix agent
Здесь определены метрики, определяющие работоспособность Apache и возможность получения статистических данных, метрики, измеряющие ресурсы, потребляемые сервисом Apache, отражающие статистику запросов, а также информацию о рабочих процессах (воркерах) Apache.
Полный список с описанием есть здесь.
В шаблоне Apache by zabbix agent определено шесть триггеров (рис. 3).
Рис. 3. Триггеры шаблона Apache by zabbix agent
Самая высокая важность High у триггера Apache: Process is not running. Если установлен этот триггер, сервис Apache не работает, и сайты, расположенные на контролируемом узле, недоступны. Системному администратору необходимо срочно исправить данную ситуацию.
Возможно, Apache завершился аварийно из-за недостатка памяти или не перезапустился после изменения конфигурации, когда новая конфигурация содержит ошибки.
Также высокая важность Average у триггера Apache: Service is down. Этот триггер говорит о том, что агент Apache by zabbix agent не смог обнаружить запущенный процесс Apache.
Если сработал триггер Apache: Service response time is too high, у которого установлена важность Warning, то Apache плохо справляется с запросами, и нужно искать способы оптимизации.
Срабатывание триггера уровня предупреждения Warning с названием Apache: Failed to fetch status page говорит о том, что сбор статистики при помощи модуля status_module не настроен или по какой-то причине перестал работать.
И, наконец, триггеры Apache: has been restarted и Apache: Version has changed с минимальной важностью Information сообщают о перезапуске, а также об изменении версии Apache, соответственно.
В составе шаблона Apache by zabbix agent есть четыре графика, удобных для просмотра статистики по использованию ресурсов и запросам (рис. 4).
Рис. 4. Графики шаблона Apache by zabbix agent
Графики Apache: Memory usage показывают постоянное потребление памяти RSS (Resident Set Size) и объем выделенной виртуальной памяти VSZ (Virtual Memory Size). Подробнее об управлении памятью в Linux можно прочитать, например, здесь.
Если Apache потребляет слишком много памяти, возможно, следует изменить конфигурацию Apache или использовать другой MPM. Рекомендации вы найдете ниже в этой статье.
Изменение количества рабочих процессов (воркеров) как запущенных, так и находящихся в состоянии ожидания, можно посмотреть на графике Apache: Workers total.
Детальная статистика по рабочим процессам показана на графике Apache: Worker states.
И, наконец, изменение интенсивности запросов в секунду можно отслеживать на графике Apache: Requests per second.
Прежде чем приступить к оптимизации настроек Apache, следует определить, какой модуль мультипроцессовой обработки MPM (Multi-Processing Module) используется на контролируемом узле. Эти модули описаны в документации.
Существует три модуля MPM:
Prefork;
Worker;
Event
Модуль Prefork создает дочерние процессы для обработки каждого поступающего запроса. Этот вариант самый надежный, но и самый медленный.
Модуль Worker не создает дополнительные процессы, а обрабатывает запросы при помощи потоков (threads). Этот вариант работает быстрее, так как не требуется создавать новые процессы, и потребляет меньше памяти.
И, наконец, модуль Event тоже обрабатывает запросы в одном процессе. Здесь потоки создаются только для активных соединений.
Сравнение этих модулей можно найти здесь.
Кроме перечисленных, на серверах хостинг-провайдеров совместно с модулем Prefork обычно используется модуль mpm_itk_module. Он позволяет сделать так, чтобы каждый сайт на хостинге работал под своим пользователем и будет установлен, в частности, панелью управления ISPmanager.
Для определения подключенных модулей MPM используйте следующую команду:
В данном случае используются модули mpm_itk_module и mpm_prefork_module.
При необходимости модуль mpm_itk_module можно установить и подключить так:
При подключении mpm_itk_module был отключен модуль mpm_event и подключен модуль mpm_prefork:
Оперативная память RAM на сервере — критичный ресурс, который следует расходовать экономно. Что касается Apache, то для поступающих запросов он запускает рабочие процессы (воркеры), потребляющие память.
На потребление памяти влияет состав модулей, подключенных в Apache. Полный список модулей можно посмотреть так:
Ненужные модули для экономии памяти следует отключить. Однако учтите, что между модулями могут быть зависимости. При необходимости узнайте у разработчиков ПО, запущенного на сервере, какие модули Apache им нужны.
Другой способ ограничить использование памяти заключается в уменьшении максимально возможного количества запускаемых процессов MaxRequestWorkers.
При использовании MPM Prefork для этого нужно отредактировать файл /etc/apache2/mods-available/mpm_prefork.conf
:
После редактирования проверьте конфигурацию Apache, перезапустите сервис и проверьте его состояние:
Конфигурации для MPM Worker и Event находятся, соответственно, в файлах /etc/apache2/mods-available/mpm_worker.conf
и /etc/apache2/mods-available/mpm_event.conf
.
В документации для вычисления значения MaxRequestWorkers предлагается разделить общий объем доступной памяти на средний размер памяти, выделенной для процесса Apache. Сколько выделяется памяти для процессов Apache, можно узнать с помощью команды top. Учтите, что память на сервере может быть нужна и для других сервисов, например, для MySQL, nginx, memcached и так далее.
Заметим, что в версиях Apache, более ранних, чем 2.3.13, параметр MaxRequestWorkers назывался MaxClients. Этот параметр может встретиться вам в многочисленных статьях, посвященных оптимизации Apache.
Также для экономии памяти имеет смысл использовать MPM Worker или Event.
Графики, построенные для метрик Apache при помощи Zabbix, окажут вам помощь в определении необходимого количества рабочих процессов, а также позволят контролировать память, выделенную для Apache (рис. 4).
Для повышения производительности Apache в документации рекомендуется использовать MPM Worker или Event, а также отключить модули, которые не используются.
Модуль mod_mpm_itk повышает безопасность, так как позволяет запускать разные сайты от имени разных пользователей, однако его использование ведет к снижению производительности.
Параметр MinSpareServers при использовании MPM Prefork задает минимальное количество запущенных рабочих процессов Apache. На запуск новых процессов уходит время и ресурсы, поэтому для увеличения производительности можно увеличить значение, равное по умолчанию пяти.
Подробные рекомендации по оптимизации Apache с точки зрения производительности вы найдете в этих статьях:
Автор: Александр Фролов.