Мониторинг веб-сервера Nginx [сообщение #1202] |
Пнд, 12 Август 2013 17:15 |
rodion
Сообщений: 60 Зарегистрирован: Март 2005
|
Member Administrator |
|
|
Рассмотрим случай, когда требуется настроить мониторинг сервера по множеству однотипных или динамических метрик, которые отсутствуют в zabbix-агенте.
В такой ситуации в zabbix-агенте можно создавать ключи для проверки с помощью параметра конфигурации - UserParameter. Для каждого параметра в zabbix_agentd.conf создаётся строка вида:
UserParameter=<key>,<shell command>
Однако, если значений слишком много, такой способ может оказаться не удобным.
Второй способ заключается в использовании элемента данных zabbix типа trapper (zabbix-ловушки). Принцип очень простой: в zabbix-сервере создаются элементы данных этого типа с произвольным именем ключа. Затем, с помощью утилиты zabbix_sender формируется специальный запрос, в котором указывается ключ ловушки, значение параметра и имя хоста. Если параметров много, то можно сформировать файл в формате zabbix_sender и отправить все значения из файла за одно соединение с сервером.
Строки в файле должны быть оформлены в таком виде:
- <ключ> <значение> (дефис в начале строки обязателен)
или
<имя_хоста> <ключ> <значение>
Рассмотрим, как использовать эту возможность на примере мониторинга популярного веб-сервера Nginx. Для этого веб-сервера есть возможнось использовать модуль stub_status, который показывает в цифрах текущую нагрузку на Nginx примерно в таком виде:
Active connections: 26
server accepts handled requests
1344375 1344375 3208201
Reading: 0 Writing: 2 Waiting: 24
Из этих данных мы можем получить, например, такие метрики для мониторинга:
nginx_status.active - количество всех открытых соединений
nginx_status.reading - количество запросов, у которых nginx читает заголовки запроса
nginx_status.writing - количество запросов, у которых в данный момент сервер читает тело запроса, обрабатывает запрос или пишет ответ клиенту
nginx_status.waiting - количество неактивных(keep-alive) соединений
nginx_status.accepts - количество принятых запросов в секунду
nginx_status.handled - количество обрабатываемых запросов в секунду
nginx_status.requests - количество запросов в секунду
Благодаря этим параметрам можно оценить нагрузку на сервер (в течении дня, недели и т.д.) , а также оценить узкие места в его работе (медленный ли канал у сервера, медленные ли каналы у клиентов, медленно ли обрабабатываются запросы и т.д.).
Скрипт, формирующий файл для zabbix_sender-а и запускающий zabbix_sender, может запускаться zabbix-агентом.
Для этого в конфигурационном файле агента zabbix_agentd.conf создадим ключ nginx_status:
UserParameter=nginx_status,/home/zabbix/nginx.sh 127.0.0.1
Содержимое /home/zabbix/nginx.sh примерно такое:
#!/bin/sh
# this script tries to collect nginx data
########################################
# Active connections: 768 #
# server accepts handled requests #
# 133844 133844 601894 #
# Reading: 63 Writing: 21 Waiting: 684 #
########################################
WGET="/usr/local/bin/wget"
ZBX_STATS_FILE="/var/log/zabbix/ZabbixStats.txt"
ZBX_SENDER="/home/zabbix/bin/zabbix_sender"
ZBX_CONFIG="/home/zabbix/conf/zabbix_agentd.conf"
ZBX_HOSTNAME=`grep "^Hostname" ${ZBX_CONFIG} | cut -f2 -d"="`
NGX_STATS_FILE="/var/log/zabbix/NginxStats.txt"
if [ -z $1 ]; then
NGX_HOSTNAME="localhost"
else
NGX_HOSTNAME="${1}"
fi
$WGET -q -O ${NGX_STATS_FILE} -t3 -T5 http://${NGX_HOSTNAME}/nginx-status
if [ $? == 0 ]; then
cat ${NGX_STATS_FILE} | awk -v myhost=$ZBX_HOSTNAME '/Active connections/ {active = int($NF)}
/\W*([0-9]+)\W*([0-9]+)\W*([0-9]+)/ {accepts = int($1); handled = int($2); requests = int($3)}
/Reading:/ {reading = int($2); writing = int($4); waiting = int($NF)}
END {
print myhost, "nginx_status.active", active;
print myhost, "nginx_status.reading", reading;
print myhost, "nginx_status.writing", writing;
print myhost, "nginx_status.waiting", waiting;
print myhost, "nginx_status.accepts", accepts;
print myhost, "nginx_status.handled", handled;
print myhost, "nginx_status.requests", requests;
}' > ${ZBX_STATS_FILE}
${ZBX_SENDER} -i ${ZBX_STATS_FILE} -c ${ZBX_CONFIG} >/dev/null
echo 1;
exit 0
else
echo "0"
exit 1
fi
При запросе сервером zabbix ключа nginx_status, скрипт вышлет данные серверу.
Создаем в zabbix-сервере шаблон - Template App Nginx.
Создаём в шаблоне элемент данных типа zabbix agent, запускающий скрипт /home/zabbix/nginx.sh (Рис. 1).
![http://forum.itrm.ru/images/nginx/pic2.jpg](http://forum.itrm.ru/images/nginx/pic2.jpg)
Рисунок. 1 Элемент данных, запускающий скрипт /home/zabbix/nginx.sh
Скрипт в случае успешного получения страницы nginx-status возвращает 1 и 0 - в противном случае. Полезно создать триггер отслеживающий эту ситуацию (Рис. 2).
![http://forum.itrm.ru/images/nginx/pic3.jpg](http://forum.itrm.ru/images/nginx/pic3.jpg)
Рисунок 2. Тригер, отслеживаюший возможность получения статуса с Nginx.
Далее для каждого параметра создаем элемент данных типа zabbix trapper. На Рис.2 пример для метритки nginx active connections.
![http://forum.itrm.ru/images/nginx/pic4.jpg](http://forum.itrm.ru/images/nginx/pic4.jpg)
Рисунок 3. Создание элемента данных для метрики nginx active connections.
По аналогии делаем элементы для остальных метрик. Изменяется только название элемента данных (Name) и ключ (Key).
После объединения графиков в группы получаются графики как на Рис. 4 и Рис. 5.
![http://forum.itrm.ru/images/nginx/pic5.jpg](http://forum.itrm.ru/images/nginx/pic5.jpg)
Рисунок 4. Статус соединений.
![http://forum.itrm.ru/images/nginx/pic6.jpg](http://forum.itrm.ru/images/nginx/pic6.jpg)
Рисунок 5. Нагрузка на сервер.
Шаблон для мониторинга nginx можно скачать отсюда: http://forum.itrm.ru/fa/50/
[Обновления: Пнд, 12 Август 2013 17:17] Известить модератора
|
|
|