zoukankan      html  css  js  c++  java
  • 使用python获取整月每一天的系统监控数据生成报表

    1.安装阿里开源监控工具tsar

    tsar官方网站 

    wget -O tsar.zip https://github.com/alibaba/tsar/archive/master.zip --no-check-certificate
    unzip tsar.zip
    cd tsar
    make && make install

    安装后,您可能会看到以下文件:

    • /etc/tsar/tsar.conf,这是tsar的主要配置文件;
    • /etc/cron.d/tsar,用来运行tsar每分钟收集信息;
    • /etc/logrotate.d/tsar 将每月轮换tsar的日志文件;
    • /usr/local/tsar/modules 是所有模块库(* .so)所在的目录;

    用法

      运行tsar -l以查看实时监控是否有效,例如,每秒显示状态(-i 1)

    • null:查看默认mods历史数据, tsar
    • --modname:指定要显示的模块, tsar --cpu
    • -L / - list:列出可用的moudule, tsar -L
    • -l / - live:显示实时信息, tsar -l --cpu
    • -i / - interval:设置报告的间隔, tsar -i 1 --cpu
    • -s / - spec:指定模块详细信息字段, tsar --cpu -s sys,util
    • -D / - detail:不要将数据转换为K / M / G, tsar --mem -D
    • -m / - merge:将multiply项合并为一, tsar --io -m
    • -I / - item:显示规格项数据, tsar --io -I sda
    • -d / - date:指定数据,YYYYMMDD或n表示n天前
    • -C / - 检查:显示最后的收集数据
    • -h / - help:显示帮助, tsar -h

    2.写python脚本

     python 2.7.5 的环境

    #!/bin/python
    # encoding=utf-8
    # Author By:BenjaminYang 
    import calendar
    import time
    import os
    date=str(input('请输入你要查询的年月:
    (格式如:201811)
    ----------------
    '))
    print('###############################################################################################')
    year=int(date[0:4])  #数据切片取得年
    month=int(date[4:6]) #数据切片取得月
    total_days=calendar.monthrange(year,month)[1] #根据年月组合获取该月共有多少天
    start_time=time.time()
    def report_check():
        i=0
        #定义开始时间
    #遍历每一天的tsar监控数据
        while i<total_days:
            if i<9:
                  i=i+1
                  date=str(year)+str(month)+str(0)+str(i)
            else:
                i=i+1
                date=str(year)+str(month)+str(i)
            os.environ['date']=date
            #将获取到的数据写入文件
            cpu=os.popen("tsar -d $date|grep MEAN|awk '{print $2}'").read()
            mem=os.popen("tsar -d $date|grep MEAN|awk '{print $3}'").read()
            tcp=os.popen("tsar -d $date|grep MEAN|awk '{print $4}'").read()
            bytein=os.popen("tsar -d $date|grep MEAN|awk '{print $5}'").read()
            byteout=os.popen("tsar -d $date|grep MEAN|awk '{print $6}'").read()
            sda=os.popen("tsar -d $date|grep MEAN|awk '{print $7}'").read()
            sdb=os.popen("tsar -d $date|grep MEAN|awk '{print $8}'").read()
            load=os.popen("tsar -d $date|grep MEAN|awk '{print $9}'").read()
            print date
            print os.popen("tsar -d $date|grep MEAN").read()
            with open("data.csv","a+") as f:
                if cpu.strip()=='':
                    f.write(str(date)+','+'have null data'+'
    ')
                else:    
                    f.write(str(date+','+cpu+','+mem+','+tcp+','+bytein+','+byteout+','+sda+','+sdb+','+load).replace("
    ","")+"
    ")    
    os.system('>data.csv')
    ag=['adsag','dockerag','ecsag','odpsag','opsag','ossag','rdsag','slbag']
    with open("data.csv","a+") as f:
           f.write(str('check_date'+','+'cpu'+','+'mem'+','+'tcp'+','+'bytein'+','+'byteout'+','+'sda'+','+'sdb'+','+'load').replace("
    ","")+"
    ")
    
    report_check()
    
    end_time=time.time()
    total_time=end_time-start_time
    print "此次生成报表总共耗时:",total_time

    3.执行效果

    会生成一个data.csv的报表

    将他导出到我们本地

  • 相关阅读:
    Linux进阶之Linux中的标准输入输出
    PermCheck
    FrogRiverOne
    PermMissingElem
    FrogJmp
    TapeEquilibrium
    恒生电子长沙2016实习生笔试题
    接口和抽象类的异同点?
    C#实现二叉树
    C#实现栈和队列
  • 原文地址:https://www.cnblogs.com/benjamin77/p/9939331.html
Copyright © 2011-2022 走看看