1.Получение Redis-статистики
Если используем подключение к порту
1 |
# redis-cli info |
Если используем подключение к Unix-сокету
1 |
# redis-cli -s /path/to/socke/file |
2. Настройка скрипта на Zabbix-агенте
Выполнить скрипт
1 |
# nano redis-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/redis.sh ] || touch /etc/zabbix/scripts/redis.sh chown root:zabbix /etc/zabbix/scripts/redis.sh chmod 550 /etc/zabbix/scripts/redis.sh |
Создание скрипта для проверки Redis-параметров
1 |
# nano /etc/zabbix/scripts/redis.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 |
#!/bin/bash ##### Help ##### help () { echo "Usage: $0 redis_metric" echo "For example: $0 rejected_connections" } ##### OPTIONS VERIFICATION ##### if [[ -z "$1" ]]; then help exit 1 fi ##### PARAMETERS ##### HOSTNAME=$(hostname -f) AWK=$(which awk) GREP=$(which grep) METRIC="$1" REDIS_CLI=$(which redis-cli) # To use Unix-socket instead of port # REDIS_CLI= "$(which redis-cli) -s /path/to/socket/file" CACHE_TTL="55" CACHE_FILE="/tmp/zabbix.redis.`echo $HOSTNAME | 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=`${REDIS_CLI} info 2>&1` echo "${DATACACHE}" > "${CACHE_FILE}" # !!! chmod 640 "${CACHE_FILE}" fi case ${METRIC} in rejected_connections|expired_keys|evicted_keys|keyspace_hits|keyspace_misses|connected_clients|blocked_clients|rdb_last_bgsave_status|total_connections_received|total_commands_processed|used_cpu_sys|used_cpu_user) $GREP -w ${METRIC} "${CACHE_FILE}" | $AWK -F: '{print $2}' ;; total_net_input_bytes|total_net_output_bytes) $GREP -w ${METRIC} "${CACHE_FILE}" | $AWK -F: 'x=$2 {print x/1024/1024}' ;; used_memory_rss|used_memory_peak|used_memory_overhead|used_memory_startup|used_memory_dataset|used_memory_lua|used_memory|maxmemory) $GREP -w ${METRIC} "${CACHE_FILE}" | $AWK -F: 'x=$2 {print x/1024/1024}' ;; *) help ;; esac exit 0 |
3.Настройка Zabbix-агента
1 |
# nano /etc/zabbix/zabbix_agentd.d/userparameter_redis.conf |
1 2 |
# Redis monitoring UserParameter=redis[*],/etc/zabbix/scripts/redis.sh "$1" |
Перезапуск Zabbix-агента
1 2 |
# Ubuntu14 # service zabbix-agent restart |
1 2 |
# Ubuntu16 # systemctl restart zabbix-agent |
Проверка получение Redis-метрики локально с Zabbix-агента
1 |
# sudo -u zabbix /etc/zabbix/scripts/redis.sh used_memory |
1 |
0.439476 |
1 |
# zabbix_get -s 127.0.0.1 -k "redis[used_memory]" |
1 |
0.439476 |
С Zabbix-сервера
1 |
# zabbix_get -s server1.mydomain.com -k "redis[used_memory]" |
1 |
0.439476 |
4.Настройка Zabbix-сервера
Скачиваем,распаковываем и импортируем шаблон zabbix-mytemplate-redis-agent.zip
Все параметры по памяти used_memory*, а также входящий/исходящий Redis-трафик(total_net_input/output_bytes) выдается в мегабайтах(MB)
Элементы данных/метрик в шаблоне составлялись на основе Redis версии 4.0.1
В более ранних версий может не быть некоторых метрик в выводе команды redis-cli info
Поэтому отсутствующие метрики/элементы данных можно отключить в Zabbix на хостах, на которых установлена старая версия Redis
Например, в Redis версии 2.8.4 отсутствуют такие параметры
1 2 3 4 5 6 |
total_net_input_bytes total_net_output_bytes maxmemory used_memory_dataset used_memory_overhead used_memory_startup |
Добавляем шаблон к хосту, на котором мониторим Redis.
Добавляем макросы к этом хосту для корректной работы триггеров.
Например:
1 |
{$REDIS_MAX_MEMORY_AVAILABLE} = 256 |
(Размер оперативной памяти,указанной в параметре maxmemory в конф.файле Redis redis.conf)
Глобально в шаблоне установлены следующие макросы с такими значениями:
1 2 3 |
{$REDIS_PROC_NUMB}=1 {$REDIS_REJECTED_CONNECTIONS}=0 {$REDIS_MAX_MEMORY_AVAILABLE}=512 |
Проверяем,что через 1-2 минуты на хосте появились Item с именем Redis
Monitoring->Latest Data->фильтруем по требуемому хосту в поле Hosts->Redis
В шаблоне присутствуют 5 триггеров для мониторинга:
Запущен ли Redis-процесс.
Наличие отклоненных подключений.
Использование памяти в соотношении с максимально доступной оперативной памяти(триггеры на 80% и 95%).
Состояния последней операции сохранения RBD (асинхронного копирования данных с ОЗУ на диск (в файл /var/lib/redis/dump.rdb).
Примеры графиков: