① python怎麼實現遠程動態輸出日誌
#!/usr/bin/python
#encoding=utf-8
#Filename:monitorLog.py
importos
importsignal
importsubprocess
importtime
logFile1="test1.log"
logFile2='test2.log'
#日誌文件一般是按天產生,則通過在程序中判斷文件的產生日期與當前時間,更換監控的日誌文件
#程序只是簡單的示例一下,監控test1.log10秒,轉向監控test2.log
defmonitorLog(logFile):
print'監控的日誌文件是%s'%logFile
#程序運行10秒,監控另一個日誌
stoptime=time.strftime('%Y-%m-%d%H:%M:%S',time.localtime(time.time()+10))
popen=subprocess.Popen('tail-f'+logFile,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
pid=popen.pid
print('Popen.pid:'+str(pid))
whileTrue:
line=popen.stdout.readline().strip()
#判斷內容是否為空
ifline:
print(line)
#當前時間
thistime=time.strftime('%Y-%m-%d%H:%M:%S',time.localtime(time.time()))
ifthistime>=stoptime:
#終止子進程
popen.kill()
print'殺死subprocess'
break
time.sleep(2)
monitorLog(logFile2)
if__name__=='__main__':
monitorLog(logFile1)
② 如何使用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())
③ 如何python psutil查看遠程伺服器
首先需要和客戶端進行通信,就跨平台來說,自己寫個server端在客戶端上運行,發送指令,接收回傳即可
linux下有很多選擇,基於ssh的fabric、ansble、以及python模塊paramiko都可以做到無客戶端執行遠端操作
④ python3監控
1、不知到
2、re.findall(pattern,s)[:3]
⑤ python 做監控數據採集,怎麼做.新手請教
這么具體的問題,找通用demo很難啊,個人覺得問題的難點不在Python。
1. 獲取什麼伺服器性能數據和如何獲取,可以請教公司內部運維。
2. 獲取什麼資料庫性能數據和如何獲取,可以請教公司內部DBA。
3. 以上兩點搞定了,才能確定臨時數據存儲結構和最終資料庫表結構。
以上三點是關鍵,Python的事情就簡單多了,提供一種思路:一分鍾一次,實時性不高,每台伺服器用cron部署一個a.py,用於獲取性能數據,在某
一台伺服器有一個b.py,負責獲取所有伺服器a.py產生的數據,然後寫入資料庫;a.py如何上報到b.py取決於你擅長什麼,如果熟悉網路編程,用
a.py做客戶端上報到服務端b.py,如果熟悉shell的文件同步(如rsync),a.py只寫本地文件,b.py調用c.sh(封裝rsync)
拉取遠程文件。
如果解決了您的問題請採納!
如果未解決請繼續追問!
⑥ 怎樣用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實現主機同時監控多個客戶端
樓上的,貌似lz說的是多個ip,不是多個埠吧?
其實也好辦,再本機多配幾個ip也好啊!如果你願意,甚至可以在一台電腦上配出相當復雜的區域網出來.
⑧ 在python中如何在屏幕上某個位置實時抓取文本
用fiddler可以抓取有效數據。
這個可以用爬蟲,如果每個HTML都是相同的位置,那就設置一個爬蟲程序,每一頁都抓取相同的位置就行。
⑨ python怎麼實現遠程桌面實時反饋桌面信息
你可以通過安裝個佳美迅的遠程桌面連接軟體來輔助實現。
⑩ 使用python,在linux上監控遠程windows的CPU、硬碟、內存使用率
你需要安裝wmic,它實現了linux下能使用wmi,安裝以後就可以用了,下面是例子。
import wmi_client_wrapper as wmi
wmic = wmi.WmiClientWrapper(
username="Administrator",
password="password",
host="192.168.1.149",
)
output = wmic.query("SELECT * FROM Win32_Processor")