Мониторинг количества подключений к Nginx при помощи Zabbix

    Общий рейтинг статьи: 0 (проголосовало 0 )
    Опубликовано:  [просмотров 717]


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

    Для мониторинга мы будем использовать нестандартную конфигурацию Zabbix.

    Мониторинг Nginx при помощи Zabbix

    Для zabbix-агента установленного на сервере необходима информация о количестве текущих соединений и запросов, данную информацию может предоставить модуль статистики (естественно Nginx должен быть собран с его поддержкой --with- http_stub_status_module). Назначим URL-доступа к статистике и ограничим диапазон адресов которые имеют к ней доступ, для этого внесите в конфигурацию Nginx следующую модификацию:

    location /nginx-stats {
    stub_status on;
    access_log off;
    allow 127.0.0.1;
    allow ::1;
    deny all;
    }

    Сообщаем Nginx, что конфигурация изменилась и необходима переконфигурация (если сервер не боевой, то можно просто перезапустить Nginx):

    # service nginx reload

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

    # curl http://127.0.0.1/nginx-stats/

    Скрипт разбора данных взят из инструкции (http://wiki.enchtex.info/howto/zabbix/nginx_monitoring). Создайте файл /etc/zabbix/nginx-stats.sh следующего содержания:

    #!/bin/bash
    ##### OPTIONS VERIFICATION #####
    if [[ -z "$1" || -z "$2" || -z "$3" ]]; then
    exit 1
    fi
    ##### PARAMETERS #####
    RESERVED="$1"
    METRIC="$2"
    STATSURL="$3"
    CURL="/usr/bin/curl"
    CACHE_TTL="55"
    CACHE_FILE="/tmp/zabbix.nginx.`echo $STATSURL | md5sum | cut -d" " -f1`.cache"
    EXEC_TIMEOUT="1"
    NOW_TIME=`date '+%s'`
    ##### RUN #####
    if [ -s "${CACHE_FILE}" ]; then
    CACHE_TIME=`stat -c"%Y" "${CACHE_FILE}"`
    else
    CACHE_TIME=0
    fi
    DELTA_TIME=$((${NOW_TIME} - ${CACHE_TIME}))
    #
    if [ ${DELTA_TIME} -lt ${EXEC_TIMEOUT} ]; then
    sleep $((${EXEC_TIMEOUT} - ${DELTA_TIME}))
    elif [ ${DELTA_TIME} -gt ${CACHE_TTL} ]; then
    echo "" >> "${CACHE_FILE}" # !!!
    DATACACHE=`${CURL} -sS --insecure --max-time ${EXEC_TIMEOUT} "${STATSURL}" 2>&1`
    echo "${DATACACHE}" > "${CACHE_FILE}" # !!!
    chmod 640 "${CACHE_FILE}"
    fi
    #
    if [ "${METRIC}" = "active" ]; then
    cat "${CACHE_FILE}" | grep "Active connections" | cut -d':' -f2
    fi
    if [ "${METRIC}" = "accepts" ]; then
    cat "${CACHE_FILE}" | sed -n '3p' | cut -d" " -f2
    fi
    if [ "${METRIC}" = "handled" ]; then
    cat "${CACHE_FILE}" | sed -n '3p' | cut -d" " -f3
    fi
    if [ "${METRIC}" = "requests" ]; then
    cat "${CACHE_FILE}" | sed -n '3p' | cut -d" " -f4
    fi
    if [ "${METRIC}" = "reading" ]; then
    cat "${CACHE_FILE}" | grep "Reading" | cut -d':' -f2 | cut -d' ' -f2
    fi
    if [ "${METRIC}" = "writing" ]; then
    cat "${CACHE_FILE}" | grep "Writing" | cut -d':' -f3 | cut -d' ' -f2
    fi
    if [ "${METRIC}" = "waiting" ]; then
    cat "${CACHE_FILE}" | grep "Waiting" | cut -d':' -f4 | cut -d' ' -f2
    fi
    #
    exit 0

    Сменим владельца файла и сделаем его исполняемым (владельцем файла должен быть Zabbix):

    # chown zabbix /etc/zabbix/nginx-stats.sh
    # chmod +x /etc/zabbix/nginx-stats.sh

    Добавляем в конфигурацию Zabbix-agent (/etc/zabbix/zabbix_agentd.conf) параметры запроса запуска скрипта выполняющего запросы к nginx:

    UserParameter=nginx[*],/etc/zabbix/nginx-stats.sh "none" "$1" "$2"

    Перезапускаем Zabbix-агент:

    # service zabbix-agent restart

    При помощи Zabbix-get проверяем, что Zabbix-agent может получить доступ к требуемым сведениям:

    # zabbix_get -s 127.0.0.1 -k "nginx[active,http://127.0.0.1/nginx-stats/]"

    Шаблон для Zabbix можно скачать у разработчиков (http://wiki.enchtex.info/_media/handmade/zabbix/zabbix2-mytemplate-nginx-agent.xml), после добавления шаблона к требуемому хосту обязательно пропишите макрос доступа к URL-статистики:

    {$NGINX_STATS_URL} => http://127.0.0.1/nginx-stats/

    Добавьте данные на комплексный экран и пользуйтесь с удовольствием.


    Обсуждение статьи

    Ваш комментарий: