使用python获取整月每一天的系统监控数据生成报表
1.安装阿里开源监控工具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('请输入你要查询的年月:\n(格式如:201811)\n----------------\n'))
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'+'\n')
else:
f.write(str(date+','+cpu+','+mem+','+tcp+','+bytein+','+byteout+','+sda+','+sdb+','+load).replace("\n","")+"\n")
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("\n","")+"\n") report_check() end_time=time.time()
total_time=end_time-start_time
print "此次生成报表总共耗时:",total_time
3.执行效果


会生成一个data.csv的报表

将他导出到我们本地


使用python获取整月每一天的系统监控数据生成报表的更多相关文章
- 使用shell/python获取hostname/fqdn释疑
一直以来被Linux的hostname和fqdn(Fully Qualified Domain Name)困惑了好久,今天专门抽时间把它们的使用细节弄清了. 一.设置hostname/fqdn 在Li ...
- python 获取日期
转载 原文:python 获取日期 作者:m4774411wang python 获取日期我们需要用到time模块,比如time.strftime方法 time.strftime('%Y-%m-% ...
- python获取字母在字母表对应位置的几种方法及性能对比较
python获取字母在字母表对应位置的几种方法及性能对比较 某些情况下要求我们查出字母在字母表中的顺序,A = 1,B = 2 , C = 3, 以此类推,比如这道题目 https://project ...
- python获取文件大小
python获取文件大小 # !/usr/bin/python3.4 # -*- coding: utf-8 -*- import os # 字节bytes转化kb\m\g def formatSiz ...
- python 获取一个列表有多少连续列表
python 获取一个列表有多少连续列表 例如 有列表 [1,2,3] 那么连续列表就是 [1,2],[2,3],[1,2,3] 程序实现如下: 运行结果:
- [python实用代码片段]python获取当前时间的前一天,前一周,前一个月
python获取当前时间的前一天,前一周,前一个月. 实用python的datetime.timedelta方法,避免了有的月份是30和31等不同的情况. 获取前一个月的时间,方法实现:首先datet ...
- Python获取目录、文件的注意事项
Python获取指定路径下的子目录和文件有两种方法: os.listdir(dir)和os.walk(dir),前者列出dir目录下的所有直接子目录和文件的名称(均不包含完整路径),如 >> ...
- Python 获取 网卡 MAC 地址
/*********************************************************************** * Python 获取 网卡 MAC 地址 * 说明: ...
- python 获取 mac 地址 的代码
python 获取 mac 地址 的例子,有需要的朋友可以参考下. #!/bin/python import os import re def GetMac(): if os.name == ...
随机推荐
- 【EasyNetQ】- 连接RabbitMQ
如果您习惯于处理与SQL Server等关系数据库的连接,那么您可能会发现EasyNetQ处理连接的方式有点奇怪.与关系数据库的通信始终由客户端启动.客户端打开连接,发出SQL命令,在必要时处理结果, ...
- 【Linux】- ls命令详解
1 命令功能: 列出当前目录下或者指定目录下的所有文件和目录,ls是list的缩写. 2 命令语法: ls [选项] [目录名] #注:[]中的内容为非必选项 3 命令选项: -a 列出目录下 ...
- WCF身份验证二:基于消息安全模式的自定义身份验证
使用X509证书进行身份验证应该说是WCF安全模型中最”正常”的做法, 因为WCF强制要求使用证书加密身份数据, 离开了证书, 所有的身份验证机制拒绝工作, WCF支持的身份验证机制也相当复杂, 这里 ...
- maven中进行go的编译
maven提供的插件maven-antrun-plugin真是个好东东,使得maven可以利用ant的很多功能. 最近需要实现在maven中实现对go代码的编译,添加如下代码在pom文件中即可. &l ...
- js+jquery 常用选择器函数
一.获取当前标签 JS: this,如下: <button onclick="fun(this)"></button> Jquery,如下: $(" ...
- PHP变量的实现原理【转】
PHP是一门弱语言,也就说PHP的一个变量可以保存任意类型的变量,PHP是用C语言实现的,而C语言是一个强类型的语言,每个变量都有固定的类型,不能随意改变变量的类型(虽然可以通过强制类型转换,可能会出 ...
- P4018 Roy&October之取石子
题目背景 Roy和October两人在玩一个取石子的游戏. 题目描述 游戏规则是这样的:共有n个石子,两人每次都只能取 p^kpk 个(p为质数,k为自然数,且 p^kpk 小于等于当前剩余石子数), ...
- TCP/IP Note1
TCP/IP(Transmission Control Protocol / Internet Protocol)是用于Internet的通信协议. 计算机通信协议:是指对那些计算机必须遵守以便彼此通 ...
- java高精度类尝试
java高精度尝试, poj2109,比较坑的题目 import java.io.*; import java.util.*; import java.math.*; public class Mai ...
- BZOJ2118 墨墨的等式 【最短路】
题目链接 BZOJ2118 题解 orz竟然是最短路 我们去\(0\)后取出最小的\(a[i]\),记为\(p\),然后考虑模\(p\)下的\(B\) 一个数\(i\)能被凑出,那么\(i + p\) ...