⑴ 如何监控app是否在最上层 用python实现
你好,我觉得可以考虑通过获取当前最上层活动窗口的名字来实现。
使用模块win32gui
win32gui.GetForegroundWindow()可以获取最上层活动窗口的句柄
判断获取的句柄是不是你需要监控的app就好了
⑵ 有什么工具可以监控到我打开一个系统的整个操作,然后统计打开每个页签加载完成的时间,python能实现不
看提问应该是打开一个web应用,可以使用python selenum实现浏览器相应操作并计时。网页链接
⑶ 如何监控在服务器上运行的多个python脚本的状态
linux系统的话,监控工具比较好的有ganglia,zabbix
windows系统的话,用自带的“性能监视器”(老版本的windows叫性能计数器)
⑷ python 如何监测进程是否关闭
如果被监测程序是你自己编写的,那你可以在程序进程结束的时候主动去通知监测进程。
如果不是,而你要监测它的运行情况,那么这和操作系统有关。Windows和Linux下的处理方式是不一样的。
⑸ 如何用python做一个设备运维软件
Python开发的jumpserver跳板机
使用python语言编写的调度和监控工作流的平台内部用来创建、监控和调整数据管道。任何工作流都可以在这个使用Python来编写的平台上运行。
企业主要用于解决:通俗点说就是规范运维的操作,加入审批,一步一步操作的概念。
是一种允许工作流开发人员轻松创建、维护和周期性地调度运行工作流(即有向无环图或成为DAGs)的工具。这些工作流包括了如数据存储、增长分析、Email发送、A/B测试等等这些跨越多部门的用例。
这个平台拥有和 Hive、Presto、MySQL、HDFS、Postgres和S3交互的能力,并且提供了钩子使得系统拥有很好地扩展性。除了一个命令行界面,该工具还提供了一个基于Web的用户界面让您可以可视化管道的依赖关系、监控进度、触发任务等。
来个小总结
⑹ 如何通过python实现实时监控文件
比如要监控nginx的$request_time和$upstream_response_time时间,分析出最耗时的请求,然后去改进代码,这时就要对日志进行实时分析了,发现时间长的语句就要报警出来,提醒开发人员要关注,当然这是其中一个应用场景,通过这种监控方式还可以应用到任何需要判断或分析文件的地方!
⑺ 如何使用python脚本实现对windows系统监控
示例:
#!/usr/bin/envpython
#encoding:utf-8
"""
MonitorLog.py
Usage:MonitorLog.py...
Monitorthelogfile
-flogfile
-hhelpinfo
pythonMonitorLog.py-fC:monitor.log
Createdbyzhouboon2011-08-29.
"""
importsys
importos
importgetopt
importsubprocess
importtime
importcodecs
importwinsound
ABSPATH=os.path.dirname(os.path.abspath(__file__))
MONITERCONF='moniter_keyword.txt'#utf8file
defmain():
try:
opts,args=getopt.getopt(sys.argv[1:],'hf:')
exceptgetopt.GetoptError,err:
printstr(err)
print__doc__
return1
path=''
fork,vinopts:
ifk=='-f':
path=v
elifk=='-h':
print__doc__
return0
ifnot(pathandos.path.exists(path)):
print'Invalidpath:%s'%path
print__doc__
return2
#命令行元组
cmd=('tail','-f',path)
print''.join(cmd)
output=subprocess.Popen(cmd,stdout=subprocess.PIPE)
keywordMap={}
#加载监控的关键字信息
withcodecs.open(os.path.join(ABSPATH,MONITERCONF),'r','utf8')asf:
lines=f.readlines()
forlineinlines:
line=line.strip()
ifnotline:
continue
keyword,wav=line.strip().split(':')
keywordMap[keyword]=wav
whileTrue:
line=output.stdout.readline()
#processcode,得到输出信息后的处理代码
ifnotline:
time.sleep(0.01)
continue
line=line.strip().decode('utf8')
printline
forkeywordinkeywordMap:
ifline.find(keyword)>-1:
winsound.PlaySound(keywordMap[keyword],
winsound.SND_NODEFAULT)
#time.sleep(0.01)
return0
if__name__=='__main__':
sys.exit(main())
⑻ 监控常用的应用软件有什么
常用的有:
1.cactio
实际上cacti不是监控工具,而是个依赖于SNMP的数据采集和数据呈现的工具。但是很多人喜欢用来当监控(因为其功能可以很好的完成这个工作)
功能:数据采集、 保存数据[SQL, txt].
数据展示(rrdtool 绘图)。
数据分析和报警(很一般)。
2. nagios。
功能:数据报警(报警功能是Nagios的特色功能) [ 故障触发,故障恢复都可以。
依赖分析报警(能自动的识别到关键设备的故障,关联设备不会报警)。
数据采集(采集的数据是弱项,他只关心警戒位,只关心正常与否的状态,状态转换时可以实现报警,所以它采集的数据不需要保存),当然也有插件弥补这个不足,如PNP4Nagios。
3. zabbix (php)(推荐)
Nagiostcacti整合互相弥补不足!I
nagios和 cacti不适合超大规模的监控、由于大规模的带宽和网络限制,会导致监控的延迟等问题,所以有很多是 nagios+ cacti整合,但是依然不适合在大规模的环境中,不适合分布式部署, Nagios在大规模中就会出现延迟,失
去 Nagios本事的特色。
那么 zabbix同时整合了 cacti和 Nagios特点的工具,而且还具有了前两者不具有的工具,支持分布式等等。
4. 补充工具:
netdata:托管在github上的一款类型zabbix的开源监控工具https:/
/github. com/firehol/netdata
open- falcon:小米公司开源的企业级监控工具(python)(推荐)
Ganglia类似于 zabbix,大型分布式监控系统
开源监控工具对比http://www.oschina.net/news/67525/monitoring-tools
5. 监控软件数据采集的方式
SNMP 协议。
agent 代理的方式去采集数据。
shell 脚本api 接口
6. 数据展示方式
php html app
7. 数据告警
mail,msm,微信,电话,钉钉机器人
⑼ 怎样用Python写一个简单的监控系统
首先数据库建表
建立一个数据库“falcon”,建表语句如下:
CREATE TABLE `stat` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`host` varchar(256) DEFAULT NULL,
`mem_free` int(11) DEFAULT NULL,
`mem_usage` int(11) DEFAULT NULL,
`mem_total` int(11) DEFAULT NULL,
`load_avg` varchar(128) DEFAULT NULL,
`time` bigint(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `host` (`host`(255))
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
首先我们设计一个web服务,实现如下功能:
1. 完成监控页面展示
2. 接受POST提交上来的数据
3. 提供json数据GET接口
目录结构如下:
web
├── flask_web.py
└── templates
└── mon.html
flask_web.py
import MySQLdb as mysql
import json
from flask import Flask, request, render_template
app = Flask(__name__)
db = mysql.connect(user="reboot", passwd="reboot123", \
db="falcon", charset="utf8")
db.autocommit(True)
c = db.cursor()
@app.route("/", methods=["GET", "POST"])
def hello():
sql = ""
if request.method == "POST":
data = request.json
try:
sql
= "INSERT INTO `stat`
(`host`,`mem_free`,`mem_usage`,`mem_total`,`load_avg`,`time`)
VALUES('%s', '%d', '%d', '%d', '%s', '%d')" % (data['Host'],
data['MemFree'], data['MemUsage'], data['MemTotal'], data['LoadAvg'],
int(data['Time']))
ret = c.execute(sql)
except mysql.IntegrityError:
pass
return "OK"
else:
return render_template("mon.html")
@app.route("/data", methods=["GET"])
def getdata():
c.execute("SELECT `time`,`mem_usage` FROM `stat`")
ones = [[i[0]*1000, i[1]] for i in c.fetchall()]
return "%s(%s);" % (request.args.get('callback'), json.mps(ones))
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8888, debug=True)
这个template页面是我抄的highstock的示例,mon.html
简单起见我们只展示mem_usage信息到页面上
<title>51reboot.com</title>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Highstock Example</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<style type="text/css">
${demo.css}
</style>
<script type="text/javascript">
$(function () {
$.getJSON('/data?callback=?', function (data) {
// Create the chart
$('#container').highcharts('StockChart', {
rangeSelector: {
inputEnabled: $('#container').width() > 480,
selected: 1
},
title: {
text: '51Reboot.com'
},
series: [{
name: '51Reboot.com',
data: data,
type: 'spline',
tooltip: {
valueDecimals: 2
}
}]
});
});
});
</script>
</head>
<body>
<script src="http://cdnjs.cloudflare.com/ajax/libs/highstock/2.0.4/highstock.js"></script>
<script src="http://code.highcharts.com/moles/exporting.js"></script>
<div id="container" style="height: 400px"></div>
</body>
</html>
web展示页面完成了,运行起来:
Python flask_web.py 监听在8888端口上
我们需要做一个Agent来采集数据,并上传数据库
moniItems.py
#!/usr/bin/env python
import inspect
import time
import urllib, urllib2
import json
import socket
class mon:
def __init__(self):
self.data = {}
def getTime(self):
return str(int(time.time()) + 8 * 3600)
def getHost(self):
return socket.gethostname()
def getLoadAvg(self):
with open('/proc/loadavg') as load_open:
a = load_open.read().split()[:3]
return ','.join(a)
def getMemTotal(self):
with open('/proc/meminfo') as mem_open:
a = int(mem_open.readline().split()[1])
return a / 1024
def getMemUsage(self, noBufferCache=True):
if noBufferCache:
with open('/proc/meminfo') as mem_open:
T = int(mem_open.readline().split()[1])
F = int(mem_open.readline().split()[1])
B = int(mem_open.readline().split()[1])
C = int(mem_open.readline().split()[1])
return (T-F-B-C)/1024
else:
with open('/proc/meminfo') as mem_open:
a = int(mem_open.readline().split()[1]) - int(mem_open.readline().split()[1])
return a / 1024
def getMemFree(self, noBufferCache=True):
if noBufferCache:
with open('/proc/meminfo') as mem_open:
T = int(mem_open.readline().split()[1])
F = int(mem_open.readline().split()[1])
B = int(mem_open.readline().split()[1])
C = int(mem_open.readline().split()[1])
return (F+B+C)/1024
else:
with open('/proc/meminfo') as mem_open:
mem_open.readline()
a = int(mem_open.readline().split()[1])
return a / 1024
def runAllGet(self):
#自动获取mon类里的所有getXXX方法,用XXX作为key,getXXX()的返回值作为value,构造字典
for fun in inspect.getmembers(self, predicate=inspect.ismethod):
if fun[0][:3] == 'get':
self.data[fun[0][3:]] = fun[1]()
return self.data
if __name__ == "__main__":
while True:
m = mon()
data = m.runAllGet()
print data
req = urllib2.Request("http://51reboot.com:8888", json.mps(data), {'Content-Type': 'application/json'})
f = urllib2.urlopen(req)
response = f.read()
print response
f.close()
time.sleep(60)
nohup python moniItems.py >/dev/null 2>&1 & 运行起来
⑽ 有python开发的监控工具吗
OneAPM 是唯一的一个可以帮助你查看 Python 应用程序方方面面的工具。无论是从终端的用户体验还是服务器监控,OneAPM 支持追踪各种问题,例如:数据库查询缓慢、第三方 API 接口和 Web 服务器甚至数据缓存层缓慢等。可以在生产环境下监控你的应用。