⑴ 如何監控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 伺服器甚至數據緩存層緩慢等。可以在生產環境下監控你的應用。