生活不易 我用python每天写1000字每天写500字

2018-05-11 利用paramiko和psutil远程监控

2018-05-12  本文已影响61人  止一量化养家

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)
上一篇下一篇

猜你喜欢

热点阅读