1 环境准备
在需要监控的服务器上:
a.安装openssh或者mobassh
b.安装Python
c.安装psutil (pip install psutil)
d.确保本地与远程机器的22端口的连通
2 执行文件准备
例如下面的代码主要监控CPU、内存和硬盘的信息:
# -*- coding:utf-8 -*-
import json
import psutil as pu
result = {}
mem = pu.virtual_memory()
result["内存使用率"] = "%.2f%%"%mem.percent
result["CPU使用率"] = "%.2f%%"%pu.cpu_percent(interval = 2)
for id in pu.disk_partitions():
if id.opts != 'cdrom':
disk_name = id.device.split(':')[0]
disk_info = pu.disk_usage(id.device)
disk_pct = "%.2f%%"%disk_info.percent
result["硬盘%s使用率"%disk_name] = disk_pct
data = json.dumps(result)
print(data)
执行的结果如下:
将代码保存到文件:monitor.txt
3 监控远程服务器信息
3.1 设置服务器的参数
这里根据实际情况确定:
#远程服务器参数
port=22
IP="192.168.159.129"
username="administrator"
password="123456"
3.2 执行文件
# 文件名称
local_path = os.getcwd() # 读取当前目录
remote_path = 'C:/python27/'
name = 'monitor.txt'
local_name = os.path.join(local_path, name)
remote_name = os.path.join(remote_path, name)
其中local_name是本地包含路径的文件全称,remote_name 是需要放到远程服务器的包含路径的文件全称。
3.3 上传代码
# 建立sftp连接
transport = paramiko.Transport((IP,22))
transport.connect(username=username,password=password)
sftp = paramiko.SFTPClient.from_transport(transport)
# 上传文件
sftp.put(local_name,remote_name)
# 关闭连接
transport.close()
3.4 执行监控
# 建立ssh连接
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(IP,port,username, password)
##执行命令
cmd = '{0}python.exe {1}'.format(remote_path,remote_name)
stdin, stdout, stderr = ssh.exec_command(cmd)
# 读取信息
line_list = stdout.readlines()
# 关闭连接
ssh.close()
这里需要执行的命令其实是:
'C:/python27/python.exe C:/python27/monitor.txt'
因为C:/python27是Python安装的目录,在没有配置环境变量的情况下,通过这样的方式可以直接执行。
3.5 打印信息
data = json.loads(line_list[0])
result_df = pd.Series(data).to_frame('监控信息')
print(result_df)
打印结果如下:
3.6 附上代码
import paramiko
import os
import psutil as pu
import json
import pandas as pd
# 远程服务器参数
port=22
IP="192.168.159.129"
username="administrator"
password="123456"
# 文件名称
local_path = os.getcwd() # 读取当前目录
remote_path = 'C:/python27/'
name = 'monitor.txt'
local_name = os.path.join(local_path, name)
remote_name = os.path.join(remote_path, name)
# 建立sftp连接
transport = paramiko.Transport((IP,22))
transport.connect(username=username,password=password)
sftp = paramiko.SFTPClient.from_transport(transport)
##上传文件
sftp.put(local_name,remote_name)
##关闭连接
transport.close()
# 建立ssh连接
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(IP,port,username, password)
##执行命令
cmd = '{0}python.exe {1}'.format(remote_path,remote_name)
stdin, stdout, stderr = ssh.exec_command(cmd)
##读取信息
line_list = stdout.readlines()
##关闭连接
ssh.close()
# 打印信息
data = json.loads(line_list[0])
result_df = pd.Series(data).to_frame('监控信息')
print (result_df)