您的位置:首页 > 运维架构

collectd监控应用cpu使用情况

2016-07-06 21:01 429 查看
collectd的cpu插件并不支持查看单个应用cpu使用率的情况,因为有python插件,便可以编写脚本来进行监控,在此通过top命令获取应用的CPU使用率,因为单个应用有多个pid,所以在此将其排序后,使应用名称相同的cpu使用率相加。此代码片段列表,元组,字典相互转换较多。

def get_stats():
line_split=()
subprocess.Popen("top -b -n 1 | grep -E 'mysql|rcuob' | awk '{print $12,$9}'  > /root/cpu_info" ,shell=True)
with open('/root/cpu_info', 'r') as f:

lines = f.readlines()

for line in lines:
lines_split = line.split()
line_split += lines_split,
list_line_split = list(line_split)
list_line_split.sort()
for i in range(len(list_line_split)-1):
list_line_num=float(list_line_split[i][1])
if cmp(list_line_split[i][0] , list_line_split[i+1][0]) == 0:
list_line_num += float(list_line_split[i+1][1])
list_line_split[i+1][1] = str(list_line_num)

for i in range(len(list_line_split)-1):
for j in range(len(list_line_split)-1):
if (cmp(list_line_split[i][0] , list_line_split[j][0]) == 0) and (float(list_line_split[i][1]) <= float(list_line_split[j][1])):
list_line_split[i][1]=list_line_split[j][1]
dict_line_split=dict(list_line_split)
list_line_split = list(zip(dict_line_split,dict_line_split.values()))
line_split = tuple(list_line_split)
return line_split


这段代码能用吧,但我不会想看第二遍,命令和逻辑(主要是命名,当初太随意了)让人头痛,改进空间蛮大的,亦可使用python的psutil模块也能监控进程的cpu使用率。

若想在collectd中使用,请参考:

https://github.com/anryko/cpu-collectd-plugin
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python collectd cpu 插件