监控redis通过info信息来监控redis的状态

    cat /etc/zabbix/scripts/redis_parameter #自动发现redis脚本参数的脚本

    1. #!/bin/bash
    2. /usr/local/bin/redis-cli -p 3000 -a redis66cs "info">/home/zabbix/tmp/info.txt
    3. cat /tmp/info.txt |grep -v "^#"|awk -F ":" {'print $1'}|grep -v [[:space:]] >/home/zabbix/tmp/info_parameter
    4. Redis_parameter_discovery () {
    5. Redis_Site=`cat /home/zabbix/tmp/info_parameter`
    6. Redis_Site_Num=`echo ${Redis_Site}|awk {'print NF'}`
    7. Redis_Site_parameter=($Redis_Site)
    8. printf '{\n'
    9. printf '\t"data":[\n'
    10. for((i=0;i<${Redis_Site_Num};i++))
    11. {
    12. if [ `expr $i + 1 ` != ${Redis_Site_Num} ];then
    13. printf "\t{\"{#SITENAME}\":\"${Redis_Site_parameter[$i]}\"},\n"
    14. else
    15. printf "\t{\"{#SITENAME}\":\"${Redis_Site_parameter[$i]}\"}\n"
    16. fi
    17. }
    18. printf '\t]\n'
    19. printf '}\n'
    20. }
    21. case "$1" in
    22. redis_parameter_discovery)
    23. Redis_parameter_discovery
    24. ;;
    25. *)
    26. echo "Usage:$0 redis_parameter_discovery"
    27. ;;
    28. esac

    创建上面脚本对应的目录和文件:

    1. #mkdir /home/zabbix/tmp
    2. #touch /home/zabbix/tmp/info.txt
    3. #touch /home/zabbix/tmp/info_parameter
    4. #chown -R zabbix:zabbix /home/zabbix
    5. #chmod 777 /home/zabbix/tmp/{info.txt,info_parameter}

    编写redis的info取值的脚本

    cat /etc/zabbix/scripts/redis_info.sh #这个脚本就是根据自动发现传过来的info的参数名进行grep取值

    1. #!/bin/bash
    2. /usr/local/bin/redis-cli -p 3000 -a redis66cs "info">/home/zabbix/tmp/info.txt
    3. Redis_Site=`cat /home/zabbix/tmp/info_parameter`
    4. Redis_info_value=$(grep "$1"\: /home/zabbix/tmp/info.txt|awk -F ":" {'print $NF'})
    5. echo $Redis_info_value

    注意这里一定grep 一定要是”$1”:这种以:结尾,比如:used_memory:和 used_memory_human:,会精确匹配而非模糊匹配

    cat /etc/zabbix/zabbix_agentd.conf.d/redis_parameter_discovery.conf

    脚本中的redis.parameter.discovery就是我们自定义的key

    1. UserParameter=redis.parameter.discovery,/etc/zabbix/scripts/redis_parameter redis_parameter_discovery

    redis.parameter.discovery这个key的作用就是调用redis_parameter这个脚本,将redis的所有info的参数名提取出来。

    cat /etc/zabbix/zabbix_agentd.conf.d/redis_info_value.conf
    通过上面自动发现提取出来的参数名作为$1传递给下面的脚本

    1. UserParameter=redis.info.value[*],/etc/zabbix/scripts/redis_info.sh $1
    1. #chown -R zabbix:zabbix /etc/zabbix
    1. #/etc/init.d/zabbix/zabbix_agentd restart

    zabbix_get -s 192.168.14.56 -k redis.parameter.discovery #测试redis的自动发现info参数的脚本

    1. {
    2. "data":[
    3. {"{#SITENAME}":"redis_version"},
    4. {"{#SITENAME}":"redis_git_sha1"},
    5. {"{#SITENAME}":"redis_git_dirty"},
    6. {"{#SITENAME}":"redis_build_id"},
    7. {"{#SITENAME}":"redis_mode"},
    8. {"{#SITENAME}":"os"},
    9. {"{#SITENAME}":"arch_bits"},
    10. {"{#SITENAME}":"multiplexing_api"},
    11. {"{#SITENAME}":"gcc_version"},
    12. {"{#SITENAME}":"process_id"},
    13. {"{#SITENAME}":"run_id"},
    14. {"{#SITENAME}":"tcp_port"},
    15. {"{#SITENAME}":"uptime_in_seconds"},
    16. {"{#SITENAME}":"uptime_in_days"},
    17. {"{#SITENAME}":"hz"},
    18. {"{#SITENAME}":"lru_clock"},
    19. {"{#SITENAME}":"executable"},
    20. {"{#SITENAME}":"config_file"},
    21. {"{#SITENAME}":"connected_clients"},
    22. {"{#SITENAME}":"client_longest_output_list"},
    23. {"{#SITENAME}":"client_biggest_input_buf"},
    24. {"{#SITENAME}":"blocked_clients"},
    25. {"{#SITENAME}":"used_memory"},
    26. {"{#SITENAME}":"used_memory_human"},
    27. {"{#SITENAME}":"used_memory_rss"},
    28. {"{#SITENAME}":"used_memory_rss_human"},
    29. {"{#SITENAME}":"used_memory_peak"},
    30. {"{#SITENAME}":"used_memory_peak_human"},
    31. {"{#SITENAME}":"total_system_memory"},
    32. {"{#SITENAME}":"total_system_memory_human"},
    33. {"{#SITENAME}":"used_memory_lua"},
    34. {"{#SITENAME}":"used_memory_lua_human"},
    35. {"{#SITENAME}":"maxmemory"},
    36. {"{#SITENAME}":"maxmemory_human"},
    37. {"{#SITENAME}":"maxmemory_policy"},
    38. {"{#SITENAME}":"mem_fragmentation_ratio"},
    39. {"{#SITENAME}":"mem_allocator"},
    40. {"{#SITENAME}":"loading"},
    41. {"{#SITENAME}":"rdb_changes_since_last_save"},
    42. {"{#SITENAME}":"rdb_bgsave_in_progress"},
    43. {"{#SITENAME}":"rdb_last_save_time"},
    44. {"{#SITENAME}":"rdb_last_bgsave_status"},
    45. {"{#SITENAME}":"rdb_last_bgsave_time_sec"},
    46. {"{#SITENAME}":"rdb_current_bgsave_time_sec"},
    47. {"{#SITENAME}":"aof_enabled"},
    48. {"{#SITENAME}":"aof_rewrite_in_progress"},
    49. {"{#SITENAME}":"aof_rewrite_scheduled"},
    50. {"{#SITENAME}":"aof_last_rewrite_time_sec"},
    51. {"{#SITENAME}":"aof_current_rewrite_time_sec"},
    52. {"{#SITENAME}":"aof_last_bgrewrite_status"},
    53. {"{#SITENAME}":"aof_last_write_status"},
    54. {"{#SITENAME}":"total_connections_received"},
    55. {"{#SITENAME}":"total_commands_processed"},
    56. {"{#SITENAME}":"instantaneous_ops_per_sec"},
    57. {"{#SITENAME}":"total_net_input_bytes"},
    58. {"{#SITENAME}":"total_net_output_bytes"},
    59. {"{#SITENAME}":"instantaneous_input_kbps"},
    60. {"{#SITENAME}":"instantaneous_output_kbps"},
    61. {"{#SITENAME}":"rejected_connections"},
    62. {"{#SITENAME}":"sync_full"},
    63. {"{#SITENAME}":"sync_partial_ok"},
    64. {"{#SITENAME}":"sync_partial_err"},
    65. {"{#SITENAME}":"expired_keys"},
    66. {"{#SITENAME}":"evicted_keys"},
    67. {"{#SITENAME}":"keyspace_hits"},
    68. {"{#SITENAME}":"keyspace_misses"},
    69. {"{#SITENAME}":"pubsub_channels"},
    70. {"{#SITENAME}":"pubsub_patterns"},
    71. {"{#SITENAME}":"latest_fork_usec"},
    72. {"{#SITENAME}":"migrate_cached_sockets"},
    73. {"{#SITENAME}":"role"},
    74. {"{#SITENAME}":"connected_slaves"},
    75. {"{#SITENAME}":"master_repl_offset"},
    76. {"{#SITENAME}":"repl_backlog_active"},
    77. {"{#SITENAME}":"repl_backlog_size"},
    78. {"{#SITENAME}":"repl_backlog_first_byte_offset"},
    79. {"{#SITENAME}":"repl_backlog_histlen"},
    80. {"{#SITENAME}":"used_cpu_sys"},
    81. {"{#SITENAME}":"used_cpu_user"},
    82. {"{#SITENAME}":"used_cpu_sys_children"},
    83. {"{#SITENAME}":"used_cpu_user_children"},
    84. {"{#SITENAME}":"cluster_enabled"}
    85. ]
    86. }

    redis的Info信息总共有82个参数,用上面的自定义key已经都取出来了。

    /usr/local/zabbix/bin/zabbix_get -s 192.168.14.56 -k redis.info.value[used_memory]  #测试redis.info.value传参也可以
    
    821512
    

    1.创建模板
    Zabbix监控Redis状态 - 灰信网(软件开发博客聚合) - 图1

    2.创建应用集
    Zabbix监控Redis状态 - 灰信网(软件开发博客聚合) - 图2

    3.添加自动发现规则
    Zabbix监控Redis状态 - 灰信网(软件开发博客聚合) - 图3

    Zabbix监控Redis状态 - 灰信网(软件开发博客聚合) - 图4

    上面已经将一个简单的Redis模板创建完成了,现在找一个主机进行添加吧。
    Zabbix监控Redis状态 - 灰信网(软件开发博客聚合) - 图5

    点击此主机的自动发现,如果最后边的状态有红色的叹号,说明哪里会有问题,鼠标移动到叹号哪里也会有提示
    Zabbix监控Redis状态 - 灰信网(软件开发博客聚合) - 图6

    点击此主机的监控项选择Redis应用集,可以看到我们设置的自动发现规则里面的监控项原型生效了。一共两页82行。

    查看最新数据,选择主机以及应用集,查看是否能采集到数据。
    Zabbix监控Redis状态 - 灰信网(软件开发博客聚合) - 图7

    从上图可以看到我们已经可以对redis的info信息的每一项参数进行数据采集了.

    Zabbix监控Redis状态 - 灰信网(软件开发博客聚合) - 图8

    原创地址:http://www.51niux.com/?id=184
    原创作者:柴少鹏

    Zabbix监控Redis状态 : https://mp.weixin.qq.com/s/t4RpWW5ks-8erGfJLfxfSg