1.Получение Mongo-статистики
1 |
# mongostat --all --noheaders --humanReadable=false -n 1 |
1 |
*0 *0 *0 *0 0 2|0 0.1 49.3 0 3448766464 1941962752 0|0 1|0 158 61275 20 rs0 SEC 2018-08-29T12:01:50+01:00 |
Если используется аутентификация в Mongo, то выполняем команду
1 |
# mongostat -u "mysuperuser" -p "mysuperpassword" --authenticationDatabase "admin" --all --noheaders --humanReadable=false -n 1 |
Где пользователь mysuperuser с паролем mysuperpassword должен иметь право выполнять команду serverStatus
Встроенная роль clusterMonitor включает в себя в том числе право на выполнение команды serverStatus
https://docs.mongodb.com/manual/reference/privilege-actions/#serverStatus
https://docs.mongodb.com/manual/reference/built-in-roles/#clusterMonitor
Для просмотра полей вывода команды mongostat и человекоудобном формате выполните команду
1 |
# mongostat --all -n 1 |
2. Настройка скрипта на Zabbix-агенте
Выполнить скрипт
1 |
# nano mongo-prepare.sh |
1 2 3 4 5 6 7 8 9 |
#!/bin/bash [ -d /etc/zabbix/scripts ] || mkdir /etc/zabbix/scripts/ chown root:zabbix -R /etc/zabbix/scripts/ chmod 750 /etc/zabbix/scripts/ [ -f /etc/zabbix/scripts/mongodb.sh ] || touch /etc/zabbix/scripts/mongodb.sh chown root:zabbix /etc/zabbix/scripts/mongodb.sh chmod 550 /etc/zabbix/scripts/mongodb.sh |
Создание скрипта для проверки Mongo-параметров
1 |
# nano /etc/zabbix/scripts/mongodb.sh |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
#!/bin/bash ##### Help ##### help () { echo "Usage: $0 mongostat_metric" echo "For example: $0 net_in" } ##### OPTIONS VERIFICATION ##### if [[ -z "$1" ]]; then help exit 1 fi ##### PARAMETERS ##### HOSTNAME=$(hostname -f) AWK=$(which awk) GREP=$(which grep) METRIC="$1" MONGOSTAT=$(which mongostat) CACHE_TTL="55" CACHE_FILE="/tmp/zabbix.mongo.`echo $HOSTNAME | md5sum | cut -d" " -f1`.cache" EXEC_TIMEOUT="1" NOW_TIME=`date '+%s'` DB_USERNAME="" DB_PASSWORD="" ##### 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}" # !!! if [ -z ${DB_USERNAME} ] || [ -z ${DB_PASSWORD} ]; then ### Access without authentication DATACACHE=`${MONGOSTAT} --all --noheaders --humanReadable=false -n 1 | sed 's/^[ \t]*//;s/*//g' 2>&1` else ### Access with authentication DATACACHE=`${MONGOSTAT} -u "${DB_USERNAME}" -p "${DB_PASSWORD}" --authenticationDatabase "admin" --all --noheaders --humanReadable=false -n 1 | sed 's/^[ \t]*//;s/*//g' 2>&1` fi echo "${DATACACHE}" > "${CACHE_FILE}" # !!! chmod 640 "${CACHE_FILE}" fi case ${METRIC} in ops_insert) awk '{print $1}' "${CACHE_FILE}" ;; ops_query) awk '{print $2}' "${CACHE_FILE}" ;; ops_update) awk '{print $3}' "${CACHE_FILE}" ;; ops_delete) awk '{print $4}' "${CACHE_FILE}" ;; ops_getmore) awk '{print $5}' "${CACHE_FILE}" ;; command_local) awk '{print $6}' "${CACHE_FILE}" | awk -F\| '{print $1}' ;; command_replicated) awk '{print $6}' "${CACHE_FILE}" | awk -F\| '{print $2}' ;; cache_dirty) awk '{print $7}' "${CACHE_FILE}" ;; cache_used) awk '{print $8}' "${CACHE_FILE}" ;; flushes) awk '{print $9}' "${CACHE_FILE}" ;; memory_vsize) awk 'x=$10 {print x/1024/1024}' "${CACHE_FILE}" ;; memory_res) awk 'x=$11 {print x/1024/1024}' "${CACHE_FILE}" ;; queue_read) awk '{print $12}' "${CACHE_FILE}" | awk -F\| '{print $1}' ;; queue_write) awk '{print $12}' "${CACHE_FILE}" | awk -F\| '{print $2}' ;; active_read) awk '{print $13}' "${CACHE_FILE}" | awk -F\| '{print $1}' ;; active_write) awk '{print $13}' "${CACHE_FILE}" | awk -F\| '{print $2}' ;; net_in) awk 'x=$14 {print x/1024}' "${CACHE_FILE}" ;; net_out) awk 'x=$15 {print x/1024}' "${CACHE_FILE}" ;; total_connections) awk '{print $16}' "${CACHE_FILE}" ;; replset) awk '{print $17}' "${CACHE_FILE}" ;; replrole) awk '{print $18}' "${CACHE_FILE}" ;; *) help ;; esac exit 0 |
Если используется аутентификация для доступа к Mongo,то необходимо указать логин/пароль в скрипте в параметрах
1 2 |
DB_USERNAME="" DB_PASSWORD="" |
3.Настройка Zabbix-агента
1 |
# nano /etc/zabbix/zabbix_agentd.d/userparameter_mongodb.conf |
1 2 |
# MongoDB monitoring UserParameter=mongodb[*],/etc/zabbix/scripts/mongodb.sh "$1" |
Перезапуск Zabbix-агента
1 |
# systemctl restart zabbix-agent |
Проверка получение MongoDB-метрики локально с Zabbix-агента
1 |
# sudo -u zabbix /etc/zabbix/scripts/mongodb.sh net_in |
1 |
0.154297 |
1 |
# cat /tmp/zabbix.mongo.d4f7cee975685eeb8c495d56c728fff5.cache |
1 |
0 0 0 0 0 2|0 0.1 49.3 0 3448766464 1941962752 0|0 1|0 158 61288 23 rs0 SEC 2018-08-29T12:24:29+01:00 |
1 |
# zabbix_get -s 127.0.0.1 -k "mongodb[net_in]" |
1 |
0.154297 |
С Zabbix-сервера
1 |
# zabbix_get -s mongodbserver.domain.com -k "mongodb[net_in]" |
1 |
0.154297 |
4.Настройка Zabbix-сервера
Скачиваем,распаковываем и импортируем шаблон zabbix-mytemplate_mongodb_agent.zip
Добавляем шаблон к хосту, на котором мониторим MongoDB.
При необходимости добавляем к хосту макросы, которые переопределят глобально установленные в шаблоне макросы
На уровне шаблона установлены следующие макросы, которые используются в триггерах
Critical/Warning процент использованного кеша WiredTiger
1 2 |
{$USED_CACHE_CRITICAL} = 90% {$USED_CACHE_WARNING} = 70% |
Critical/Warning процент т.н. грязного кеша WiredTiger
1 2 |
{$DIRTY_CACHE_CRITICAL} = 40% {$DIRTY_CACHE_WARNING} = 20% |
Кол-во запущенны mongodb-процессов
1 |
{$MONGOD_PROC_NUMB} = 1 |
В шаблоне созданы триггеры, на основе указанных выше макросов для мониторинга использования кеша и наличие процесса mongod
Также созданы следующие графики (на основе метрик собираемых метрик)
1 2 3 4 5 6 7 8 |
Cache usage Database operations Memory usage Network usage Queues Flushing performance Total number of open connections Active clients |
Значения сетевого трафика выводятся в KB/s(килобайтах/секунду)
Значения используемой(resident) и виртуальной(virtual) памяти указаны в MB(мегабайтах)
Метрики/элементы данных строились из вывода команды mongostat версии 3.6.7 с использование WiredTiger-движка хранения данных
Latest Data
Триггеры
Примеры графиков