Last active
February 25, 2020 10:05
-
-
Save mttjohnson/19f3bd4db35444b6c49ef5c9d7f8192c to your computer and use it in GitHub Desktop.
Redis Activity Monitoring
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Poll for various system stats for monitoring system | |
| # Just copy and paste the commands into a bash prompt | |
| # Use Ctrl-C to exit the polling | |
| # Defaults that can be overriden | |
| [[ -z "$REDIS_CONN" ]] && REDIS_CONN="-h 127.0.0.1 -p 6379" | |
| [[ -z "$SLEEP_SECONDS" ]] && SLEEP_SECONDS=60 | |
| # Header info | |
| CUR_TIME='timestamp' | |
| REDIS_CONNECTIONS="CON" | |
| REDIS_COMMANDS="COMMANDS" | |
| REDIS_BYTES_SENT="KBIT_SEC_SENT" | |
| REDIS_CMD_LIST=" | |
| cmdstat_del | |
| cmdstat_exists | |
| cmdstat_sadd | |
| cmdstat_srem | |
| cmdstat_sinter | |
| cmdstat_smembers | |
| cmdstat_hget | |
| cmdstat_hmset | |
| cmdstat_expire | |
| cmdstat_ping | |
| cmdstat_psync | |
| cmdstat_replconf | |
| cmdstat_flushdb | |
| cmdstat_info | |
| cmdstat_monitor | |
| cmdstat_slowlog | |
| " | |
| PRINT_REDIS_COMMANDSTATS="" | |
| PRINT_REDIS_COMMANDSTATS_SPACES="0" | |
| REDIS_COMMANDSTAT_SPACES="9" | |
| while read -r EACH_REDIS_CMD; do | |
| if [ ! -z "${EACH_REDIS_CMD}" ]; then | |
| PRINT_REDIS_COMMANDSTATS="${PRINT_REDIS_COMMANDSTATS}$(printf "%-${REDIS_COMMANDSTAT_SPACES}s" "$(echo "${EACH_REDIS_CMD}" | perl -p -e 's/cmdstat_//')")" | |
| PRINT_REDIS_COMMANDSTATS_SPACES=$(echo "scale=0 ; ${PRINT_REDIS_COMMANDSTATS_SPACES} + ${REDIS_COMMANDSTAT_SPACES}" | bc) | |
| fi | |
| done <<< "${REDIS_CMD_LIST}" | |
| ROW_TEMPLATE="%-20s %-5s %-8s %-13s %-${PRINT_REDIS_COMMANDSTATS_SPACES}s\n" | |
| ECHO_HEADER=1 | |
| while true; do | |
| [ $ECHO_HEADER -eq 1 ] && ECHO_HEADER=0 && printf "$ROW_TEMPLATE" "$CUR_TIME" "$REDIS_CONNECTIONS" "$REDIS_COMMANDS" "$REDIS_BYTES_SENT" "$PRINT_REDIS_COMMANDSTATS" | |
| CUR_TIME=$(date '+%Y-%m-%d %H:%M:%S') | |
| # Redis Info | |
| REDIS_INFO=$(redis-cli $REDIS_CONN info all) | |
| [[ -z "$CURR_REDIS_CONNECTIONS" ]] && CURR_REDIS_CONNECTIONS="0" | |
| LAST_REDIS_CONNECTIONS="" | |
| REDIS_CONNECTIONS="" | |
| [[ ! -z "$REDIS_CONN" ]] && LAST_REDIS_CONNECTIONS=${CURR_REDIS_CONNECTIONS} | |
| [[ ! -z "$REDIS_CONN" ]] && CURR_REDIS_CONNECTIONS="$(echo "${REDIS_INFO}" | grep total_connections_received: | cut -d: -f2 | tr -d '\r' | tr -d '\n')" | |
| [[ ! -z "$REDIS_CONN" ]] && REDIS_CONNECTIONS="$(expr ${CURR_REDIS_CONNECTIONS} - ${LAST_REDIS_CONNECTIONS} | tr -d '\r' | tr -d '\n')" | |
| [[ -z "$CURR_REDIS_COMMANDS" ]] && CURR_REDIS_COMMANDS="0" | |
| LAST_REDIS_COMMANDS="" | |
| REDIS_COMMANDS="" | |
| [[ ! -z "$REDIS_CONN" ]] && LAST_REDIS_COMMANDS=${CURR_REDIS_COMMANDS} | |
| [[ ! -z "$REDIS_CONN" ]] && CURR_REDIS_COMMANDS=$(echo "${REDIS_INFO}" | grep total_commands_processed: | cut -d: -f2 | tr -d '\r' | tr -d '\n') | |
| [[ ! -z "$REDIS_CONN" ]] && REDIS_COMMANDS=$(expr ${CURR_REDIS_COMMANDS} - ${LAST_REDIS_COMMANDS} | tr -d '\r' | tr -d '\n') | |
| [[ -z "$CURR_REDIS_BYTES_SENT" ]] && CURR_REDIS_BYTES_SENT="0" | |
| LAST_REDIS_BYTES_SENT="" | |
| REDIS_BYTES_SENT="" | |
| [[ ! -z "$REDIS_CONN" ]] && LAST_REDIS_BYTES_SENT=${CURR_REDIS_BYTES_SENT} | |
| [[ ! -z "$REDIS_CONN" ]] && CURR_REDIS_BYTES_SENT=$(echo "${REDIS_INFO}" | grep total_net_output_bytes: | cut -d: -f2 | tr -d '\r' | tr -d '\n') | |
| [[ ! -z "$REDIS_CONN" ]] && REDIS_BYTES_SENT=$(printf '%.2f' $(echo "scale=2 ; (${CURR_REDIS_BYTES_SENT} - ${LAST_REDIS_BYTES_SENT}) / 8 / 1024 / $SLEEP_SECONDS" | bc)) | |
| # Redis Command Stats | |
| PRINT_REDIS_COMMANDSTATS="" | |
| while read -r EACH_REDIS_CMD; do | |
| if [ ! -z "${EACH_REDIS_CMD}" ]; then | |
| CURR_VARNAME=CURR_REDIS_CMD_${EACH_REDIS_CMD} | |
| LAST_VARNAME=LAST_REDIS_CMD_${EACH_REDIS_CMD} | |
| VARNAME=REDIS_CMD_${EACH_REDIS_CMD} | |
| [[ -z "${!CURR_VARNAME}" ]] && declare "${CURR_VARNAME}"="0" | |
| declare "${LAST_VARNAME}"="" | |
| declare "${VARNAME}"="" | |
| [[ ! -z "$REDIS_CONN" ]] && declare "${LAST_VARNAME}"=${!CURR_VARNAME} | |
| [[ ! -z "$REDIS_CONN" ]] && declare "${CURR_VARNAME}"=$(echo "${REDIS_INFO}" | grep ${EACH_REDIS_CMD}: | cut -d: -f2 | cut -d, -f1 | cut -d= -f2 | tr -d '\r' | tr -d '\n') | |
| [[ -z "${!CURR_VARNAME}" ]] && declare "${CURR_VARNAME}"="0" | |
| [[ ! -z "$REDIS_CONN" ]] && declare "${VARNAME}"=$(expr ${!CURR_VARNAME} - ${!LAST_VARNAME} | tr -d '\r' | tr -d '\n') | |
| PRINT_REDIS_COMMANDSTATS="${PRINT_REDIS_COMMANDSTATS}$(printf "%-${REDIS_COMMANDSTAT_SPACES}s" "${!VARNAME}")" | |
| fi | |
| done <<< "${REDIS_CMD_LIST}" | |
| printf "$ROW_TEMPLATE" "$CUR_TIME" "$REDIS_CONNECTIONS" "$REDIS_COMMANDS" "$REDIS_BYTES_SENT" "$PRINT_REDIS_COMMANDSTATS" | |
| sleep $SLEEP_SECONDS | |
| done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment