<代码>猎鹰结合脚本redis-monitor.py进行监控复述 * * * * * python/usr/local/openfalcon - 0.2/mymon/redis-monitor。py和比;/usr/local/openfalcon - 0.2/mymon/redis-monitor.log 猫redis-monitor.py #注意修改配置项:_redis_cli, def __init__ insts_list、ip # !/bin/env python # - * -编码:utf - 8 - * 进口json 导入的时间 进口套接字 进口操作系统 进口再保险 导入系统 导入命令 进口urllib2 base64 类RedisStats: #如果你是自己编译部署到复述,请将下面的值替换为你到redis-cli路径 _redis_cli=/usr/地方/bin/redis-cli的 _stat_regex=re.compile (ur (\ w +): ([0 - 9] + \。? [0 - 9] *) \ r ') def __init__(自我,端口=' 6379 ',passwd=None,主机=127.0.0.1): 自我。_cmd=' % s - h % s - p % s信息“%(自我。_redis_cli、主机端口) 如果密码不是在[",没有一个): 自我。_cmd=' % s - h % s - p % s——% s信息“%(自我。_redis_cli、主机、端口、密码) def统计(自我): “返回包含复述dict类型统计” 信息=commands.getoutput (self._cmd) #打印信息 返回dict (self._stat_regex.findall(信息)) def main (): ip=' 192.168.1.1 ' # ip=socket.gethostname () 时间戳=int (time.time ()) 一步=60 # inst_list中保存了复述,配置文件列表,程序将从这些配置中读取端口和密码,建议使用动态发现的方法获得,如: # inst_list=[我的命令。getoutput (/etc/- name“找到”复述*。conf”) .split (“\ n”)] insts_list=[/etc/复述,复述。参看'] p=[] monit_keys=[ (“connected_clients”,“规”), (“blocked_clients”,“规”), (“used_memory”,“规”), (“used_memory_rss”,“规”), (“mem_fragmentation_ratio”,“规”), (“total_commands_processed”、“计数器”), (“rejected_connections”、“计数器”), (“expired_keys”、“计数器”), (“evicted_keys”、“计数器”), (“keyspace_hits”、“计数器”), (“keyspace_misses”、“计数器”), (“keyspace_hit_ratio”,“规”), ] 本月在insts_list: 端口=命令。getoutput (“sed - n ' s/* ^港口\ ([0 - 9]\ {4 5 \}\)/\ \ 1/p ' % s“%本月) passwd=命令。getoutput (“sed - n ' s/^ requirepass * \ [^] * \/\ \ 1/p ' % s“%本月) 度量=案词觥? 端点=ip 标签='端口=% s ' %端口 试一试: 康涅狄格州=RedisStats(端口、密码) 统计=conn.stats () 除了例外,e: 继续 关键,vtype monit_keys: #一些老版本的复述中信息输出的信息很少,如果缺少一些我们需要采集的关键就跳过 如果关键不在stats.keys (): 继续 #计算命中率 如果键==発eyspace_hit_ratio”: 试一试: 值=https://www.yisu.com/zixun/float(统计[' keyspace_hits '])/(int(统计[' keyspace_hits ']) + int(统计[' keyspace_misses '])) 除了ZeroDivisionError: 值=https://www.yisu.com/zixun/0 #碎片率是浮点数 elif关键==癿em_fragmentation_ratio”: 值=https://www.yisu.com/zixun/float(统计(例子)) 其他: #其他的都采集成计数器,int 试一试: 值=int(统计(例子)) 除了: 继续 i={“指标”:“% s。% s ' %(指标、关键), “端点”:端点, “时间戳”:时间戳, “步骤”:一步, “价值”:值, 的相等物:vtype, 标签:标签 } p.append(我) 打印json。转储(p, sort_keys=True,缩进=4) 方法=胺⒉肌? 处理程序=urllib2.HTTPHandler () 刀=urllib2.build_opener(处理器) url=http://127.0.0.1:1998/v1/推动的=urllib2请求。请求(url, data=https://www.yisu.com/zixun/json.dumps (p)) request.add_header(“内容类型”、“application/json”) 请求。get_method=λ:方法 试一试: 连接=opener.open(请求) 除了urllib2.HTTPError, e: 连接=e #检查。以适当的HTTP代码替换。 如果连接。代码==200: 打印connection.read () 其他: 打印“{“犯错”:1、“味精”:“% s”} ' %连接 if __name__==癬_main__”: proc=命令。getoutput (“p ef | grep % s | grep - v grep | wc - l ' % os.path.basename (sys.argv [0])) sys.stdout.flush () 如果int (proc) & lt;5: main() 代码>
复述,进程监控
复述状态监控