一个简单的监控redis性能的python脚本(代码片段)

author author     2022-11-22     389

关键词:

一个简单的监控redis性能的python脚本

上一篇已经讲了如何监控memcached了,现在也顺带讲如何监控redis。

首先介绍下监控redis那些信息:

  • Redis ping:检验ping
  • Redis alive:查看检查端口是否alive
  • Redis connections:查看连接数
  • Redis blockedClients:正在等待阻塞客户端数量
  • Redis connectionsUsage:redis的连接使用率
  • Redis memoryUsage:redis内存使用量
  • Redis memoryUsageRate:redis内存使用率
  • Redis evictedKeys:运行以来删除过的key的数量
  • Redis rejectedConnections:拒绝连接数
  • Redis ops:redis的OPS
  • Redis hitRate:redis命中率

安装需要的环境

pip install redis

脚本内容

#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = ‘chenmingle‘

import sys
import subprocess
import json

try:
    import redis
except Exception, e:
    print ‘pip install redis‘
    sys.exit(1)

class Redis(object):  
    def __init__(self, host, port, password=None):
        self.host = host
        self.port = port
        self.password = password
        if self.password:
            self.rds = redis.StrictRedis(host=host, port=port, password=self.password)
        else:
            self.rds = redis.StrictRedis(host=host, port=port)
        try:
            self.info = self.rds.info()
        except Exception, e:
            self.info = None

    def redis_connections(self):
        try:
            return self.info[‘connected_clients‘]
        except Exception, e:
            return 0

    def redis_connections_usage(self):
        try:
            curr_connections = self.redis_connections()
            max_clients = self.parse_config(‘maxclients‘)
            rate = float(curr_connections) / float(max_clients)
            return "%.2f" % (rate * 100)
        except Exception, e:
            return 0

    def redis_used_memory(self):
        try:
            return self.info[‘used_memory‘]
        except Exception, e:
            return 0

    def redis_memory_usage(self):
        try:
            used_memory = self.info[‘used_memory‘]
            max_memory = self.info[‘maxmemory‘]
            system_memory = self.info[‘total_system_memory‘]
            if max_memory:
                rate = float(used_memory) / float(max_memory)
            else:
                rate = float(used_memory) / float(system_memory)
            return "%.2f" % (rate * 100)
        except Exception, e:
            return 0

    def redis_ping(self):
        try:
            return self.rds.ping()
        except Exception, e:
            return False

    def rejected_connections(self):
        try:
            return self.info[‘rejected_connections‘]
        except Exception, e:
            return 999

    def evicted_keys(self):
        try:
            return self.info[‘evicted_keys‘]
        except Exception, e:
            return 999

    def blocked_clients(self):
        try:
            return self.info[‘blocked_clients‘]
        except Exception, e:
            return 0

    def ops(self):
        try:
            return self.info[‘instantaneous_ops_per_sec‘]
        except Exception, e:
            return 0

    def hitRate(self):
        try:
            misses = self.info[‘keyspace_misses‘]
            hits = self.info[‘keyspace_hits‘]
            rate = float(hits) / float(int(hits) + int(misses))
            return "%.2f" % (rate * 100)
        except Exception, e:
            return 0

    def parse_config(self, type):
        try:
            return self.rds.config_get(type)[type]
        except Exception, e:
            return None

    def test(self):
        print ‘Redis ping: %s‘ % self.redis_ping()
        print ‘Redis alive: %s ‘ % check_alive(self.host, self.port)
        print ‘Redis connections: %s‘ % self.redis_connections()
        print ‘Redis blockedClients %s‘ % self.blocked_clients()
        print ‘Redis connectionsUsage: %s%%‘ % self.redis_connections_usage()
        print ‘Redis memoryUsage: %s‘ % self.redis_used_memory()
        print ‘Redis memoryUsageRate: %s%%‘ % self.redis_memory_usage()
        print ‘Redis evictedKeys: %s‘ % self.evicted_keys()
        print ‘Redis rejectedConnections: %s‘ % self.rejected_connections()
        print ‘Redis ops: %s‘ % self.ops()
        print ‘Redis hitRate: %s%%‘ % self.hitRate()

def check_alive(host, port):
    cmd = ‘nc -z %s %s > /dev/null 2>&1‘ % (host, port)
    return subprocess.call(cmd, shell=True)

def parse(type, host, port, password):
    rds = Redis(host, port, password)
    if type == ‘connections‘:
        print rds.redis_connections()
    elif type == ‘connectionsUsage‘:
        print rds.redis_connections_usage()
    elif type == ‘blockedClients‘:
        print rds.blocked_clients()
    elif type == ‘ping‘:
        print rds.redis_ping()
    elif type == ‘alive‘:
        print check_alive(host, port)
    elif type == ‘memoryUsage‘:
        print rds.redis_used_memory()
    elif type == ‘memoryUsageRate‘:
        print rds.redis_memory_usage()
    elif type == ‘rejectedConnections‘:
        print rds.rejected_connections()
    elif type == ‘evictedKeys‘:
        print rds.evicted_keys()
    elif type == ‘hitRate‘:
        print rds.hitRate()
    elif type == ‘ops‘:
        print rds.ops()
    else:
        rds.test()

if __name__ == ‘__main__‘:
    try:
        type = sys.argv[1]
        host = sys.argv[2]
        port = sys.argv[3]
        if sys.argv.__len__() >=5:
            password = sys.argv[4]
        else:
            password = None
    except Exception, e:
        print "Usage: python %s type 127.0.0.1 6379" % sys.argv[0]
        sys.exit(1)
    parse(type, host, port, password)

测试脚本,查看监控redis信息(假如redis没设置密码,可不填密码执行):

/bin/python /home/python/check_redis.py test 192.168.4.18 6379 password
Redis ping: True
Redis alive: 0
Redis connections: 447
Redis blockedClients 0
Redis connectionsUsage: 4.47%
Redis memoryUsage: 2885122048
Redis memoryUsageRate: 17.32%
Redis evictedKeys: 0
Redis rejectedConnections: 0
Redis ops: 1050
Redis hitRate: 71.87%

最后加入到zabbix自定义key上

cat /etc/zabbix/zabbix_agentd.d/redis.conf
# Redis
UserParameter=redis.stats[*],/bin/python /home/python/check_redis.py $1 192.168.4.18 6379 password

接下来加入自定义模版的操作可以参考上一篇博客

redis实战专题「性能监控系列」全方位探索redis的性能监控以及优化指南(代码片段)

Redis基本简介Redis是一个开源(BSD许可)、内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合等数据类型。内置复制、Lua脚本、LRU收回、事务以... 查看详情

一个监控系统性能的脚本

[[email protected]~]#catmonitor.sh#!/bin/bash#chkconfig:23450892#description: Thescriptsistomonitorsystemhealth!Today=`date+%Y%m%d`functiondisk{       &nbs 查看详情

nagios监控redis

...:http://download.csdn.net/detail/hellopengyl/9617697,有2个版本,一个是perl脚本写成的,一个是php脚本写成的,可以任意选择一个,里面另外两个是监控mysql的这里选择的是perl脚本。[[email protected] libexec]# chmod +x check_redi... 查看详情

普罗米修斯监控能否监控redis耗时

普罗米修斯(Prometheus)是一个开源的监控系统,可以用于监控各种应用和服务的性能和状态。Prometheus可以通过对应用程序或服务的监控指标进行采集,来监控应用程序或服务的性能和状态。这些监控指标可以是应用程序或服务... 查看详情

一个性能较好的jvm參数配置以及jvm的简单介绍

一个性能较好的webserverjvm參数配置:-server //服务器模式-Xmx2g//JVM最大同意分配的堆内存,按需分配-Xms2g//JVM初始分配的堆内存。一般和Xmx配置成一样以避免每次gc后JVM又一次分配内存。-Xmn256m//年轻代内存大小。整个JVM内存=年轻代... 查看详情

redis性能监控及优化(代码片段)

...增3.5数据淘汰引发的延迟3.6引入读写分离机制  Redis是一个纯内存的Key-Value型数据库,可以提供高并发和低延时的服务,生产上Redis的性能将会直接影响到服务的质量。对此本文将主要对Redis的性能指标、监控工具以及... 查看详情

redis性能测试与监控(代码片段)

...命令如下:redis-benchmark[option][optionvalue]例如我在本地搭建一个redis服务,IP地址是 查看详情

性能测试之redis和nginx性能监控(代码片段)

...种是使用redis-stat工具。两者其实本质是一样的,不过一个是命令行的模式下查看监控数据,而另外一种是图形化页面查看。但是实际上,我们性能测试主要更多的是关注性能测试指标本身。首先,我们来查看一下... 查看详情

使用jmeter进行简单的性能测试

参考技术A1、启动jmeter代理服务器2、配置浏览器代理服务器3、配置完成后,点击jmeter的【启动】开始录制,利用代理服务器获取脚本录制时提示证书错误,解决方法:4、脚本增强(1)1)响应断言:监测程序运行是否跳转至正... 查看详情

cacti监控

1.监控方式1.脚本:在被监控端定义一个脚本,让这个脚本周期性的运行,管理员通过ssh连接看监控脚本的内容。2.配置插件SNMP3.端口2.cacti简介Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具,流量与性能检测... 查看详情

python+redis简单实现发红包程序(代码片段)

redis是什么?  Redis是一个高性能的key-value数据库!  想进一步了解请移步搜索引擎自行查找。编写这个小程序的目的就是对redis进行一个简单的小操作,对redis有一个初步的了解,并未有什么高大尚的骚操作,适合小白阅读... 查看详情

浏览器的性能监控工具 [重复]

...描述】:可能重复:HowtoprofileandandgetJavascriptperformance我有一个包含多个客户端脚本的页面。某些脚本会减慢页面速度,并且还可能存在内存泄漏。请问有什么工具可以清楚地告诉您哪些脚本消耗了多少时间?【问题讨 查看详情

使用.net简单实现一个redis的高性能克隆版(代码片段)

译者注该原文是AyendeRahien大佬业余自己在使用C#和.NET构建一个简单、高性能兼容Redis协议的数据库的经历。首先这个"Redis"是非常简单的实现,但是他在优化这个简单"Redis"路程很有趣,也能给我们在从事性能优... 查看详情

系统监控脚本说明

...份等。对于大多数重复性的任务,一般管理员都会写一个自动化脚本来完成这些任务。在以往运维中,查询系统、数据库等参数都比较困难,需要手动输入对应的命令,极其不方便。脚本也是我们部门的工作,... 查看详情

脚本其实很简单-windows配置核查程序(代码片段)

...安装各种过监控软件,比如360、鲁大师等等。。。其中有一个功能就是性能监控,在安全行业里面通常叫做“配置核查”,目的就是将主机的各种性能指标展示,指标包括CPU状态、内存状态、磁盘状态等等。。。本次的程序目的... 查看详情

jenkins怎么监控linux性能

...详解:配置安装环境-----搭建apache+php环境首先需要先创建一个名为nagios的帐号并给定登录口令,并创建一个用户组名为nagcmd用于从Web接口访问。将nagios用户和apache用户都加到这个组中现在开始解压安装nagios源码包。注意的是安装... 查看详情

将python脚本导入zabbix?

...发布时间】:2020-05-0708:37:05【问题描述】:所以我制作了一个简单的python脚本来监控我的postgres中的数据库大小,但现在我想形成关于要监控的结果的图表。但是我找不到将这个脚本放入WEBGUI以在zabbix/grafana中使用的单一方法。... 查看详情

关于redis批量写入的介绍

...方法是最靠谱的,一下是实现: 步骤1:首先简单写一个shell脚本:目的是生成一个用批量插入的脚本文件,步骤2:这里linux或者windows上生成的文件不能直接当做redis语句来跑,简单来说,就是因为linux,windows和dos的换行并不... 查看详情