python2.7监控flume

由于工作需要,写了python2.7监控flume的功能,下面是干货,希望能帮到大家
#!/usr/bin/env python

-- coding: utf-8 --

import datetime,os,sys,time,socket,urllib,json,urllib2,sys
import requests

#模拟curl http://ip:port/metrics,这里启动时定义是41415,默认是41414
def comm(ip,port,type):
url="http://%s:%s/metrics" %(ip,port)
req=urllib2.Request(url)
res=urllib2.urlopen(req).read()
j=json.loads(res)
sink = j["%s"%type]["EventDrainSuccessCount"]
return sink

sink4_42 = comm("10.1.1.42","41415","SINK.sink4")
sink4_43 = comm("10.1.1.43","41415","SINK.sink4")
sink4_44 = comm("10.1.1.44","41415","SINK.sink4")
sink4_45 = comm("10.1.1.45","41415","SINK.sink4")

#把结果写入文件
sink_list = ["sink42","sink43","sink44","sink45"]
for sink in sink_list:
#无文件时自动创建相应文件
if not os.path.isfile(sink+"."+"txt"):
fd = open("/tmp"+"/"+sink+"."+"txt",mode="w")
fd.close()
if sink == "sink42":
with open("/tmp/sink42.txt", "w") as f:
f.write(sink4_42 + '\n')
if sink == "sink43":
with open("/tmp/sink43.txt", "w") as f:
f.write(sink4_43 + '\n')
elif sink == "sink44":
with open("/tmp/sink44.txt", "w") as f:
f.write(sink4_44 + '\n')
elif sink == "sink45":
with open("/tmp/sink45.txt", "w") as f:
f.write(sink4_45 + '\n')

#循环检查函数
def check(ip,type,sink_file_path):
with open("%s"%sink_file_path,"r") as f1:
for line in f1.readlines():
#半小时前数据取值
line = line.strip("\n")
#半小时后取最新的值与之前的数据做对比
sink_ban = comm(ip,"41415",type)
if line == sink_ban:
DingToken = "xxxxxx"
content = "服务器ip: %s"%ip + '\n' + "flume应用:flume" + '\n' + "flume环境: 线上环境"
def send_dingtalk(content):
token = DingToken
headers = {'Content-Type': 'application/json'}
url = "https://oapi.dingtalk.com/robot/send?access_token=" + token
msg = {"msgtype": "text", "text": {"content": content}, "at": {}}
req = requests.post(url, headers=headers, data=json.dumps(msg))
if req.status_code != 200:
print(content)
send_dingtalk(content)
else:
sink4 = comm(ip,"41415",type)
#把10分钟后结果写入文件
with open("%s"%sink_file_path, "w") as f:
f.write(sink4 + '\n')

ban_time = 0
#10分钟以后时间
ban = (datetime.datetime.now()+datetime.timedelta(minutes=10)).strftime("%H:%M")
ban_time = ban

while True:
#当前时间
now = datetime.datetime.now().strftime("%H:%M")
if now == ban_time:
#当前时间加上10分钟时间
ban1 = (datetime.datetime.now()+datetime.timedelta(minutes=10)).strftime("%H:%M")
ban_time = ban1
#读取10分钟前的文件内容与10分钟后的文件做结比
check("10.1.1.42","SINK.sink4","/tmp/sink42.txt")
time.sleep(1)
check("10.1.1.43","SINK.sink4","/tmp/sink43.txt")
time.sleep(1)
check("10.1.1.44","SINK.sink4","/tmp/sink44.txt")
time.sleep(1)
check("10.1.1.45","SINK.sink4","/tmp/sink45.txt")

 else:
    time.sleep(1)

更多自动化运维,请移步到www.wangshuying.cn网站查看
里面有更多运维相关方面的知识要点。

猜你喜欢

转载自blog.51cto.com/461884/2544044