PostgreSQL + php-fpm + nginx + монитор диска с Zabbix (2023)

Григ71

11 минут

35 тыс.

Постгрес SQL *

руководство

из песочницы

В сети много информации о Zabbix, много шаблонов, которые я написал сам, хочу представить свои моды публике.
Zabbix — очень полезный и гибкий инструмент мониторинга. Если вы хотите контролировать сотню, если вы хотите тысячу станций, если вы не хотите следить за сервером, сделайте все разделы сливками. Я был бы не против отдать его на Github, если кто-то еще собирает подобные.

PostgreSQL + php-fpm + nginx + монитор диска с Zabbix (2)

Вот так мы решили разместить базу данных в контейнере php-fpm + nginx. База данных - постгрес. Еще до приобретения хостинга была мысль собрать данные о работе машины - надо, есть смысл! Волшебным маятником для внедрения системы послужили жесткие дисковые тормоза нашей VDS-станции: в начале скрипта мы каждую минуту записывали измеренное время и скорость в файл, а потом строили графики в Excel, сравнивали, как она было/было преобразовано, удалить количественную статистику. И это только один вариант! Что, если виноват не VDS, работают ли на нем наши приложения? В общем, мониторить нужно много, мониторить нужно комфортно!

Не буду углубляться в установку сервера, вариантов много и документации на эту тему очень много. Я использовал официальную:
https://www.zabbix.com/documentation/ru/2.2/manual/installation/install_from_packages
В качестве операционной системы - CentOS 6.5
Требуемые файлы -в файле habr-zabbix-mons.zip

Помимо самого zabbix-agent нам необходимо установить zabbix-sender на рабочую станцию ​​агента:

установка yum -y http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix-2.2.4-1.el6.x86_64.rpmyum установка -y http://repo.zabbix.com/ zabbix/2.2/rhel/6/x86_64/zabbix-agent-2.2.4-1.el6.x86_64.rpmyum install -y http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix- Обновление-2.2.4-1.el6.x86_64.rpm

[root@fliber ~]# vi /etc/zabbix/zabbix_agentd.confLogFileSize=1Hostname=Geben_addrServer=123.45.67.89ServerActive=123.45.67.89

Вместо «123.45.67.89» IP машины, на которой вы установили сервер Zabbix.
Вместо «Your_agent_addr» введите имя/IP-адрес компьютера после добавления агента на сервер в поле «Hostname».

chkconfig zabbix-agent --nivel 345 запуск onservice zabbix-agent

Следите за скоростью жесткого диска

Я использую хдпарм. Вы можете использовать другой, если хотите:

установка yum hdparm

Выберите раздел для мониторинга:

[root@fliber ~]# dfFilesystem Использовано 1K блоков Доступно Use% Mounted en/dev/vda1 219608668 114505872 104106808 78% /tmpfs 11489640 0 11489640 0% /dev/shm

Добавить в /etc/zabbix/zabbix_agentd.d/user.conf

UserParameter=hdparm.rspeed, sudo /sbin/hdparm -t /dev/vda1 | awk 'COMENZAR{s=0} /MB\/sec/ {s=$11} /kB\/sec/ {s=$11/1024} END{print s}'

Разрешаем sudo работать без консоли (обязательно отключено) и добавляем команду, которую запускаем от имени пользователя zabbix:

[root@fliber ~]# visudo#Predeterminados requirettyzabbix ALL=(ALL) NOPASSWD: /sbin/hdparm -t /dev/vda1

Мы увеличили время запроса параметра в конфигурации агента, так как hdparm измеряет себя 3-10 и более секунд, видимо, в зависимости от скачков скорости.

[root@fliber ~]# vi /etc/zabbix/zabbix_agentd.confTimeout=30
Перезапустите службу zabbix-agent.

Так же на сервере нужно исправить таймаут ответа агента

[root@pentagon ~]# vi /usr/local/etc/zabbix_server.confTimeout=30

Заходим в Zabbix Web Admin и добавляем новый параметр в конфигурацию хоста (Конфигурация->Хосты->Ваш_сервер_агент->Элементы) или в некоторые шаблоны, например ОС Linux (Конфигурация->Шаблоны->Шаблон ОС Linux->Статья) - нажмите «Создать статью»:

Имя: Hdparm: Ключ скорости жесткого диска: hdparm.rspeed Тип информации: Числовой (плавающий) Единицы: МБ/с Интервал обновления (в секундах): 601 Приложения: Файловые системы

Перейдите в «Графики» -> «Создать график».

Имя: Hdparm: Скорость чтения жесткого диска по оси Y Минимальное значение: Фиксированное 0,0000 Элементы: Добавить: «Hdparm: Скорость жесткого диска»

Подготовить! У нас есть параметр и график для него. Если вы добавили в шаблон, прикрепите шаблон к хосту. Мы восхищаемся!

PostgreSQL + php-fpm + nginx + монитор диска с Zabbix (3)

В нашем случае плохо то, что было до 31 июля, хотя средняя скорость была высокой, но часто опускалась ниже 1МБ/с. Сейчас (после переноса на следующую ноду) работает стабильно и редко падает, хотя имеет не менее 5-6 МБ/с. Я думаю, что на предыдущей ноде он завис не из-за жесткого диска, а из-за использования каких-то других более важных ресурсов, но главное, что мы видим баги!
Хороший параметр, но не выключайте его слишком часто, т. к. в эти 3-10 секунд измерения жесткий диск будет сильно загружен, рекомендую раз в 10-60 минут, или выключайте совсем, если вам нравится статистика и мы не от того. мучить хозяина.


Реестр моего монитора - nginx

Казалось бы, зачем мониторить логи? Подключил метрики, да, аналитику, посмотрел там все. Но эти ребята не показывают нам ботов, которые не запускают js на странице, и не показывают нам людей, если они отключили js. Предлагаемое решение показывает, как часто боты сканируют ваши страницы, и предотвращает перегрузку вашего сервера поисковыми ботами. Ну и вся статистика, если вы выберете loghttp.sh

Добавить в /etc/zabbix/zabbix_agentd.d/user.conf

UserParameter=log.http.all,/etc/zabbix/scripts/loghttp.sh

мы спросилиloghttp.shв /etc/zabbix/scripts, в той же папке, в которой мы запускаем

(Video) Установка Zabbix 6.0 на Ubuntu 20.04

chmod o+x loghttp.shyum установить curlchown zabbix:zabbix /etc/zabbix/scriptsservice zabbix-agent reiciar

Проверьте путь к access.log

[root@fliber ~]# vi loghttp.shLOG=path_to_nginx_log

мы важныloghttp.xmlв шаблонах zabbix: Настройки -> Шаблоны, в заголовке "НАСТРОЙКИ ШАБЛОНОВ" справа ищем кнопку "Импорт", выбираем файл, импортируем.
Подключаем шаблон к хосту: Настройки->Хосты->ваш_сервер_агент, вкладка "Шаблоны", в поле "Связать новые шаблоны" начните вводить "Протоколы", появится выпадающий список - выбираем наш шаблон. «Добавить», «Сохранить».
В шаблоне указано, что журнал следует отслеживать каждые 10 минут. Так что найдите время, чтобы посмотреть на графики, но вы можете проверить журналы. "/var/log/zabbix/zabbix_agentd.log" на стороне клиента и "/tmp/zabbix_server.log" или "/var/log/zabbix/zabbix_server.log" на стороне сервера.
Если все пойдет хорошо, вскоре вы увидите похожее изображение:

PostgreSQL + php-fpm + nginx + монитор диска с Zabbix (4)

Гугл молодец: проверяет так же быстро, иногда почта проходит, редко Bing и Yahoo нигде нет. Яндекс индексирует с разной степенью успешности, но много — если бы это появилось в результатах поиска, было бы здорово :)
На графике Гугл и Яндекс слева, остальные справа. Значение шкалы — это количество посещений от меры к мере, то есть за 10 минут. Вы можете установить его на 1 час, но мы рискуем потерять слишком много хитов в рекордно короткие сроки.


mi монитор ist nginx

Зачем мониторить Nginx? Я до сих пор не знаю, у меня никогда не было с этим проблем. Но так и быть, судя по статистике. Я пытался использовать набор шаблонов ZTC, но мне очень не нравится показывать процессы Python в памяти, по 10 МБ каждый. Хочу родной, хочу баш! И главное собрать все параметры в один запрос. Именно этого я и хотел добиться мониторингом всех сервисов: минимум нагрузки на сервер и максимум параметров.
Вы можете найти много таких скриптов, но поскольку я описал мониторинг веб-сервера комплексно, я публикую свою версию.

Научим nginx печатать статусную страницу и добавлять конфигурацию для localhost

сервер { слушать локальный хост; имя сервера status.localhost; keepalive_timeout 0; разрешить 127.0.0.1; отрицать все; Расположение/статус сервера { stub_status en; } access_log выключен;}

Не забудьте применить изменения:

Nginx-NeuladedienstКомментарий

Добавить в /etc/zabbix/zabbix_agentd.d/user.conf

UserParameter=nginx.ping,/etc/zabbix/scripts/nginx.sh

мы спросилиnginx.shв /etc/zabbix/scripts, в той же папке, в которой мы запускаем

chmod o+x nginx.shservice Перезапустить агент Zabbix

Если вы не установили curl на предыдущем шаге, вы должны установить:

завиток уже установлен

На всякий случай убедитесь, что в nginx.sh переменные SENDER и CURL имеют правильные пути.

мы важныloghttp.xmlВ шаблоне zabbix подключаю шаблон к хосту.
Что ж, наслаждайтесь фотографиями!

PostgreSQL + php-fpm + nginx + монитор диска с Zabbix (5)

Этот монитор может сообщить вам, что nginx не работает или отвечает очень медленно. По умолчанию порог следующий: Если за последние 10 измерений скорость ответа nginx не падает ниже 10 мс, мы создаем алерт. Монитор сообщает, когда сервер возвращает плохой статус (nginx находится в памяти, но отвечает мусором).


мониторинг php-fpm

Полезно, если у вас есть набор динамических процессов (pm=dynamic в /etc/php-fpm.d/www.conf) по умолчанию или по дизайну. Монитор может предупредить о недоступности сервиса или его медлительности.
Я попытался запросить службу без nginx, но не смог найти установленную программу, которая помогла бы мне взаимодействовать с php-fpm. Подскажите варианты, если кто знает.

Возможно, php-fpm не возвращает статус, проверьте это

[root@fliber ~]# vi /etc/php-fpm.d/www.confpm.status_path = /status

Если что-то изменилось, примените:

php-fpm-Новости

Добавить в /etc/zabbix/zabbix_agentd.d/user.conf

UserParameter=php.fpm.ping,/etc/zabbix/scripts/php-fpm.sh

мы спросилиphp-fpm.shв /etc/zabbix/scripts, в той же папке, в которой мы запускаем

(Video) NGINX с нуля до профи. Nginx что это, как работает, как парсит конфиги?

chmod o+x php-fpm.shservice Перезапустить агент Zabbix

Пропишите путь к серверу FastCGI в php-fpm.sh (обратите внимание на параметр в /etc/php-fpm.d/www.conf)

[root@fliber ~]# vi /etc/zabbix/scripts/php-fpm.shLISTEN='127.0.0.1:9000'

Коннекторы также поддерживаются.

Если cgi-fcgi не установлен, вам необходимо установить:

день установки fcgi

мы важныphp-fpm.xmlВ шаблоне zabbix подключаю шаблон к хосту.

PostgreSQL + php-fpm + nginx + монитор диска с Zabbix (6)

Мониторинг PostgreSQL

Это главное блюдо! Ваш повар уже приготовил больше :)
В качестве прототипа был выбран pg_monz: с открытым исходным кодом, совместим, много параметров, работает с последней версией Postgres. Минус глобальный - я собираю все сервисные параметры, потому что не знаю какой "прыгает" и когда.
Когда я обнаружил pg_monz и включил сбор всех параметров по базам данных и таблицам, всего около 700, нагрузка на сервер увеличилась в 10 раз! (Вероятно, с pgbouncer это будет не так заметно) Хотя параметры собирались раз в 300 секунд. Это и понятно: по каждому параметру psql запускает и выполняет запрос, как правило, по одним и тем же таблицам, только по разным полям. Как правило, от pg_monz оставались только названия полей и таблиц. Ну давай попробуем!

Добавить в /etc/zabbix/zabbix_agentd.d/user.conf

UserParameter=psql.ping[*],/etc/zabbix/scripts/psql.sh $1 $2 $3 $4 $5UserParameter=psql.db.ping[*],/etc/zabbix/scripts/psql_db_stats.sh $1 $2 $3 $4 " $5"UserParameter=psql.db.discovery[*],psql -h $1 -p $2 -U $3 -d $4 -t -c "wähle '{\"Daten\":['||string_agg('{\" {#NOMBREBD}\":\"'||nombre_datos||'\"}',',')||' ]}' базы данных pg_database, содержащей список дат и имя_даты~'$5'"UserParameter=psql.t.discovery[*],/etc/zabbix/scripts/psql_table_list.sh $1 $2 $3 $4 "$5" "$6"

мы спросилиpsql*.shв /etc/zabbix/scripts, в той же папке, в которой мы запускаем

chmod o+x psql*.shservice Перезапустить агент Zabbix

В качестве меры предосторожности убедитесь, что переменная PSQLC в файлах nginx.sh и psql_db_stats.sh содержит правильный путь к psql.

мы важныpsql.xmlк шаблонам zabbix. Если вы не планируете собирать данные в базы данных и таблицы, немедленно отключите шаблоны PSQL DB List и PSQL Table List на вкладке Discovery. И если вы планируете это сделать, сначала настройте макрос на вкладке "Макросы" агента {$PGTBL_REGEXP} - имя таблицы, за которой вы будете подробно следить. Хотя вы, вероятно, захотите сначала увидеть все таблицы :)

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

PostgreSQL + php-fpm + nginx + монитор диска с Zabbix (7)

Все параметры шаблона (унаследованные от pg_monz) и их значения по умолчанию можно увидеть во вкладке «Макросы» шаблона. Попробую описать эти параметры:

макросСтандартОписание
{$PGDATABASE}постгрИмя базы данных для подключения
{$ПОСТ}127.0.0.1Хост PostgreSQL (относительно агента Zabbix, если равен: 127.0.0.1)
{$PGLOGDIR}/var/lib/pgsql/9.3/данные/pg_logКаталог с логами PostgreSQL
{$PGPORT}5432PostgreSQL-номер порта
{$PGROLE}постгрИмя пользователя для подключения к PostgreSQL
{$PGDB_REGEXP}.
(тодо Бассен)
Название базы для сбора подробной информации*
{$PGTBL_REGEXP}.
(все столы)
Название таблицы для сбора подробной информации*
{$PGCHECKPOINTS_THRESHOLD}10Когда количество контрольных точек превышает этот порог, срабатывает триггер.
{$PGCONNECTIONS_THRESHOLD}2Когда среднее количество сеансов за последние 10 минут превышает заданный порог, срабатывает триггер
{$PGDBSIZE_THRESHOLD}1073741824Когда размер базы данных превышает указанный лимит в байтах, срабатывает триггер
{$PGTEMPBYTES_THRESHOLD}1048576Если скорость записи во временные файлы превышает PGTEMPBYTES_THRESHOLD в байтах за последние 10 минут, срабатывает триггер.
{$PGCACHEHIT_THRESHOLD}90Если среднее число попаданий в кэш ниже порогового значения за последние 10 минут, срабатывает базовый триггер.
{$PGDEADLOCK_THRESHOLD}0Как только количество блокировок превышает установленный лимит, срабатывает триггер.
{$PGSLOWQUERY_SEC}1Если запрос занимает больше PGSLOWQUERY_SEC секунд, считайте его медленным.
{$PGSLOWQUERY_THRESHOLD}1Когда среднее количество медленных запросов за последние 10 минут превышает пороговое значение, срабатывает триггер.

* Регулярное выражение, например, используется в качестве параметра
Организация— все таблицы и схемы, содержащие подстроку org
\.(Организация|Ресурс|оквед)$- Таблицы с именами Организация, Ресурс, Оквед в любой схеме
^msn\.- все таблицы в схеме MSN

Получается, что параметры {$PGDB_REGEXP} и {$PGTBL_REGEXP} — это не просто имена, а подстрока, которая ищется в именах всех баз данных и schema.tables.
Но работают не все регулярные выражения, а только те, которые не содержат символов \, ', ", `, *, ?, [, ], {, }, ~, $, !, &, ;, (, ) , < , >, |, #, @, 0x0a Если вы хотите снять это ограничение, отредактируйте /etc/zabbix/zabbix_agentd.conf

Небезопасные пользовательские параметры = 1

После этого все, что вам нужно сделать, это использовать двойные кавычки "" для определения одного. Информацию о регулярных выражениях в PostgreSQL можно найти здесь:
www.postgresql.org/docs/9.3/static/functions-matching.html#FUNCTIONS-POSIX-REGEXP

Если вы не видите параметр «Журнал ошибок PSQL», вероятно, путь {$PGLOGDIR} задан неправильно; Найдите файл postgresql-sun.log на агенте. где она находится пропишите эту папку в макросе


мониторить php-opcache

Как принято в лучших домах - десерт!
В этой статье вы увидите всю цепочку от запроса пользователя до данных, кроме одного узла: самого php. Чтобы немного раскрыть его, давайте попробуем собрать статистику из встроенного в php5 ускорителя Opcache, используя функцию opcache_get_status.

Добавить в /etc/zabbix/zabbix_agentd.d/user.conf

(Video) Мониторинг проектов׃ сравнительный анализ существующих решений

UserParameter=php.opc.ping,/etc/zabbix/scripts/php-opc.shUserParameter=php.opc.discovery,/etc/zabbix/scripts/php-opc.sh descubra

мы спросилиphp-opc.*в /etc/zabbix/scripts, в той же папке, в которой мы запускаем

chmod или php-opc.phpchmod или php-opc.shservice повторное использование агента zabbix

Прописать путь к серверу FastCGI в php-opc.sh (обратите внимание на параметр в /etc/php-fpm.d/www.conf)

[root@fliber ~]# vi /etc/zabbix/scripts/php-opc.shLISTEN='127.0.0.1:9000'

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

Если у вас не установлен fcgi для мониторинга php-fpm, вам необходимо установить:

день установки fcgi

мы важныphp-opc.xmlВ шаблоне zabbix подключаю шаблон к хосту.

PostgreSQL + php-fpm + nginx + монитор диска с Zabbix (8)

При создании триггеров я уменьшил размер кеша в 2 раза для своего opcache. Так что есть смысл посмотреть на эту статистику. Если бы проект на этом сервере не был обновлен новыми модулями, он бы легко сократился в 4 раза.


Диплом

Я до сих пор не знаю, какие еще параметры можно контролировать. Это основные службы, работающие на нашей машине VDS. Конечно, если он у меня есть, я поделюсь. Хорошо бы добавить шаблон скрипта MySQL, но задачи пока нет. Если очень надо, то сделаю :)
Подход спорный - у меня на каждый сервис отдельные устройства, и это тоже неплохо - взял скрипт, добавил настройки, залил шаблон - все.
Очевидно, что если вы соберете эти мониторы в один пакет, вам придется выполнять дополнительное обнаружение для каждого сервиса. может быть несколько nginx, php-fpm, postgres. Вы можете прослушивать как порты, так и сокеты.

версия

CentOS версии 6.5 (финальная)
ZabbixServer 2.2.4
Zabbix-Агент 2.2.4
hdparm 9.43
нгинкс 1.6.1
php-fpm 5.3.3
Постгрес SQL 9.3.4
php-opcache 5.5.15

Шаблоны и скрипты здесь:http://www.uralati.ru/frontend/for_articles/2014-08-habr-zabbix-mons.zip

Для мониторинга php-fpm и pfp-opcache в архиве есть версия скриптов для работы с curl (с использованием тех же шаблонов). Описание настроек закомментировано в соответствующих скриптах.php-*_curl.sh, версия upd2

upd1

Теперь вам больше не нужно устанавливать "HOST=Ваш_адрес_агента", "SERVER=Ваш_адрес_сервера".
Но вам нужно установить «Hostname=Your_agent_addr» в zabbix_agentd.conf. Значение «system.hostname» не подходит.
Устаревшие шаблоны и скрипты здесь:удалить
Спасибо за советксеносзавр.

upd2

Теперь для мониторинга php-fpm не нужно регистрировать конфигурацию nginx.

server {... location ~ ^/(state|ping)$ { include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:9000; Выберите fastcgi_param SCRIPT_FILENAME; }...}
Nginx-NeuladedienstКомментарий

Теперь для мониторинга php-opcache не нужно регистрировать конфигурацию nginx.

(Video) Мониторинг в высоконагруженных (и не только) проектах / Е. Потапов, А. Баранов (ITSumma)

server {... location /opc-status { include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME /etc/zabbix/scripts/php-opc.php; }...}
Nginx-NeuladedienstКомментарий

Но для этого нужно написать LISTEN to php-fpm в скриптах и ​​установить cgi-fcgi:

день установки fcgi

Это изменение с curl на fcgi позволило сократить время выполнения запросов монитора в 2 раза.
Также добавлены проверки авторских прав и исправление путей для программ. Теперь, когда вы запускаете скрипт в консоли, вы можете ругаться, что если вы не запустите его в консоли, ошибка будет записана в логах сервера как неправильный ответ.

Устаревшие шаблоны и скрипты здесь:удалить

(Video) Система мониторинга Zabbix

Videos

1. Как поднять web-сервер на FreeBSD [GeekBrains]
(GeekBrains)
2. Горизонтальное масштабирование что, зачем, когда и как / Александр Макаров (Yii, Stay.com)
(HighLoad Channel)
Top Articles
Latest Posts
Article information

Author: Chrissy Homenick

Last Updated: 04/05/2023

Views: 5911

Rating: 4.3 / 5 (54 voted)

Reviews: 85% of readers found this page helpful

Author information

Name: Chrissy Homenick

Birthday: 2001-10-22

Address: 611 Kuhn Oval, Feltonbury, NY 02783-3818

Phone: +96619177651654

Job: Mining Representative

Hobby: amateur radio, Sculling, Knife making, Gardening, Watching movies, Gunsmithing, Video gaming

Introduction: My name is Chrissy Homenick, I am a tender, funny, determined, tender, glorious, fancy, enthusiastic person who loves writing and wants to share my knowledge and understanding with you.