collectd监控应用cpu使用情况

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

你可能感兴趣的:(collectd,python2.7)