指令脚本redis线上环境监控脚本(python脚本)

摘要:
II后台Redis监视器指令可以导出上一个Redis节点操作的所有二进制文件。然而,考虑到外壳在处理本文时的局限性,考虑使用python实现(分析语言。总体感觉简单易用。在锁打包、分发等方面,它不需要像Java那样乏味!二、应用Python处理另一侧保存的监控指令集,并输出统计结果。shell脚本如下:##此shell脚本用于获取监控指令集的监控信息指定Redis节点的ns。#coding=utf8#此监控脚本基于读取的Redismonitorfile来计算相应的Redis操作Love。

在改章节中,我们要主介绍指令脚本的内容,自我觉感有个不错的议建和大家分享下

近来一个月没啥新更,边身生发太多事,结业几年来霉运太多,虽然不信命,但我信有些性命的确好,有些性命的确差,其它不说也罢。(大家定一要意注身材啊,康健比任何西东都主要)

本文要监控的这个脚本,是在一个月前阁下,对于线上redis中项指令操纵须要行进统计析分时写的一个工具:

一.需求

由于是其于client的分布式缓存,须要晓得每一个点结,前当每秒所理处的指令有哪些,要主中集在哪些操纵,哪些操纵多过,可以行进优化等.基于这些需求,须要晓得在现线上每一个redis点结下有哪些操纵。

二.背景

redis-monitor指令可以导出前当redis点结全部操纵的二进制文件(此操纵不议建常开,只是析分时用,对redis点结有性能影响)。

其中业界应用比较多的redis-live,此监控还基于图形化的方法部署,旁边我也 部署过,安装的西东很多,一堆程流,而且我们不须要这么细详的监控,只是一个析分帮助工具,所以太粗笨了,其也是基于redis-monitor的脚本析分来行进监控的。

三.工具

斟酌到我们只是须要对redis-monitor所导出的二进制文件行进一些统计,因此这样就绝对比较单简了,java,shell脚本都可以实现,当然如果要做shell是首选。

可是斟酌到shell对理处本文的局限性,因此斟酌应用python来实现(解析性语言,整体觉感是,单简,易用,还不须要像java那样烦锁的打包,布发等!)

四.要主程流

要对redis的行执指令行进统计要主分两步:

一.redis-monitor对应的输出行进重定向,统计某一段时光段的redis指令况情,保存为某个文件。

二.应用python对面上保存的monitor指令集行进理处,并输出统计结果。

shell脚本如下:

##此shell脚本用于取获指定的redis点结的monitor指令的监控信息。保存在db.txt文件中
#运行时行执脚本可即,可指定行执时光,如./monitor.sh 5s,如不指定,则认默行执2S
#!/bin/bash
lineno=1
cmd=/home/hmail/etc/redis/bin/redis-cli
host=xx.xx.xx.xx
port=xx
file=db.txt
time=$1
if [ -z $time ];then
time=2s
fi
echo "$cmd -h $host -p $port monitor run time $time "
`$cmd -h $host -p $port monitor > $file &`
sleep $time
pid=`ps aux | grep "monitor" | grep "redis-cli" | awk '{print $2}'`
echo "will kill redis monitor pid:$pid"
`kill -9 $pid`
echo "redis-cli monitor stopped"

对面上保存的db.txt文件行进理处的python脚本如下:

每日一道理
巴尔扎克说过“不幸,是天才的进升阶梯,信徒的洗礼之水,弱者的无底深渊”。风雨过后,眼前会是鸥翔鱼游的天水一色;走出荆棘,前面就是铺满鲜花的康庄大道;登上山顶,脚下便是积翠如云的空蒙山色。 在这个世界上,一星陨落,黯淡不了星空灿烂,一花凋零,荒芜不了整个春天。人生要尽全力度过每一关,不管遇到什么困难不可轻言放弃。

#coding=utf8
#此监控脚本为基于读取到的redis monitor file统计对应的redis操纵况情。
import commands, sys, os, time, string
#取time 准确到秒时暂
def getSeconds(time):
index = time.find(".")
return time[0:index]
#every same seconds ope
class SecondRecords:
allcount = 0
#"set:1"
table = {}
#init法方为了例实属性与类属性
def __init__(self, table, count):
self.table = table
self.allcount = count
def get(self):
return "all count:", self.allcount," ",self.table
def add(self, ope):
if(ope not in self.table.keys()):
self.table[ope] = 0
count = self.table[ope]
count = count + 1
self.table[ope] = count
self.allcount = self.allcount + 1;
def printResults(results):
for key in results.keys():
print key, '\t', results[key].get()
#定判否是指定时光
length = len(sys.argv)
period = None
if(length < 2):
#认默2s
period = "2"
else:
period = sys.argv[1]
cmd='./monitor.sh ' + str(period) #此monitor.sh为面上提到的shell脚本
#not result
os.system(cmd);
#wait period时光,待等采集数据
period = string.atol(period)
time.sleep(period)
#all monitor records
results = {}
# read monitor file
f = open("db.txt")
#f = open("monitor.txt")
print "monitor per seconds ope:"
line = f.readline()
while line:
strs = line.split(" ")
#判断否是及格的字符
length = len(strs)
#去除非监控指令。
if(length < 2):
line = f.readline()
continue
time = getSeconds(strs[0])
if(time not in results.keys()):
results[time] = SecondRecords({}, 0)
results[time].add(strs[1])
line = f.readline()
#close
f.close();
print "monitor records:"
printResults(results)

如果统系中有python境环,直接行执python redis_monitor.py 可即(意注,shell脚本只是为了抓取重定向文件所用的,python脚本会行执此文件,同时监控多长时光的指令,在后面增长对应的数参可即)

五.明说

以上为整个监控脚本,运行,输出的结果如下:

指令脚本redis线上环境监控脚本(python脚本)第1张

通过面上图示,可以晰清的晓得每一个点结下每秒钟各条指令行执的数目况情,从而晓得自己缓存对各个缓存的需求是多少,以及各个点结在现的性能是多少。

我们线上境环,每一个点结均匀每秒理处的redis指令在25000-30000阁下的操纵数阁下(值得明说的是像一个multi-exec操纵算两次操纵,旁边如果有批量提交,每一个操纵也算一次操纵,这样现实业务场景中很有是能可某个业务逻辑会有多次的指令操纵数,从而可以估算出相干缓存服务器性能等)

很多况情,我们在晓得我们redis指令数后,会更加解理我们产品的业务逻辑,由疑惑redis的点结性能转化到优化相干逻辑上去。

希望对你有帮助。

文章结束给大家分享下程序员的一些笑话语录: 一个程序员对自己的未来很迷茫,于是去问上帝。
"万能的上帝呀,请你告诉我,我的未来会怎样?"
上帝说"我的孩子,你去问Lippman,他现在领导的程序员的队伍可能是地球上最大的"
于是他去问Lippman。
Lippman说"程序员的未来就是驾驭程序员"
这个程序员对这个未来不满意,于是他又去问上帝。
"万能的上帝呀,请你告诉我,我的未来会怎样?"
上帝说"我的孩子,你去问Gates,他现在所拥有的财产可能是地球上最多的"
于是他去问Gates。
Gates说"程序员的未来就是榨取程序员"
这个程序员对这个未来不满意,于是他又去问上帝。
"万能的上帝呀,请你告诉我,我的未来会怎样?"
上帝说"我的孩子,你去问侯捷,他写的计算机书的读者可能是地球上最多的"
于是他去问侯捷。
侯捷说"程序员的未来就是诱惑程序员"
这个程序员对这个未来不满意,于是他又去问上帝。
"万能的上帝呀,请你告诉我,我的未来会怎样?"
上帝摇摇头"唉,我的孩子,你还是别当程序员了")

免责声明:文章转载自《指令脚本redis线上环境监控脚本(python脚本)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇考研算法真题Ztree _ 横向显示子节点、点击文字勾选、去除指定元素input的勾选状态下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python限制进程、子进程占用内存大小、CPU时间的方法:resource模块

内置模块:resource 在mac环境下功能会存在问题。linux下可以使用:但是for i in range(10000)的值必须是10000或者更大的数值才有用。没有搞清楚为什么 #/usr/bin/env python #-*-coding:utf-8-*- import resource #soft,hard=resource.getrli...

【Python教程】 re 模块中findall() 函数返回值展现方式的用法详解

findall 函数: 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。 注意: match 和 search 是匹配一次 findall 匹配所有,match 和 search 的区别也很大,可以自行网上查找! 这里主要需要讨论的是其返回值的展现方式,即findall函数根据正则表达式的不同所返回的结果包含的不...

python 基础 7.0 import 导入

一. python 常用内置模块的使用(datetime,logging,os,command) 在日常的开发工作中,我们要写很多的python 代码,如果都写在一个文件中,会导致代码特别难维护,为了拓展代码的可维护性,我们把函数写在不同的文件里,这样每个文件包含的文件就比较少,逻辑更加清楚。在python中,我们创建的文件基本都是以py结尾,那一个py的...

python的if判断&amp;amp;两重判断

# python的if判断&两重判断# python编程中if语句用于控制程序的执行 基本形式为:#if 判断条件: # 执行语句...# else: # 执行语句...#其中“判断条件”成立时(非零),则执行后面的语句,而执行的内容可以多行。以缩进来区分同一范围# else为可选语句 在判断条件不成立时执行相关的语句# python程...

C# 通过ServiceStack 操作Redis——Hash类型的使用及示例

接着上一篇,下面转到hash类型的代码使用 Hash:结构 key-key-value,通过索引快速定位到指定元素的,可直接修改某个字段 /// <summary> /// Hash:类似dictionary,通过索引快速定位到指定元素的,耗时均等,跟string的区别在于不用反序列化,直接修改某个字段 /// str...

使用python爬虫爬取股票数据

前言: 编写一个爬虫脚本,用于爬取东方财富网的上海股票代码,并通过爬取百度股票的单个股票数据,将所有上海股票数据爬取下来并保存到本地文件中 系统环境: 64位win10系统,64位python3.6,IDE位pycharm 预备知识: BeautifulSoup的基本知识,re正则表达式的基本知识 代码: importrequests from bs4 i...