【问题标题】:Python - Fetch system data from remote host with psutil and paramikoPython - 使用 psutil 和 paramiko 从远程主机获取系统数据
【发布时间】:2022-09-29 08:07:23
【问题描述】:

我目前正在做一个简单的监控项目。

我想要一个专用的监控服务器来检查几个远程实例的 cpu、内存和磁盘使用情况。

到目前为止,我已经运行了两个脚本。监控服务器上的一个脚本连接到远程主机,然后执行另一个脚本来获取系统数据。出于警报目的,我希望监控服务器接收从远程主机获取的数据,评估数据并在超出某些限制时发送电子邮件。

我可以连接到远程主机并在那里执行一个 python 脚本(通过 paramiko lib),然后收集数据(通过 psutil)

如何将此数据返回到监控服务器?

我正在考虑将其写入文本文件,通过 scp 将其发送到监控服务器,将其导入 python 评估脚本,然后删除文本文件或设置数据库,从远程主机写入数据库,然后检索监控数据主机用于评估目的。

这两种选择对我来说似乎都不是最佳实践,但我缺乏替代方案。谁能给我一些建议?

这是代码snps:

脚本在监控服务器上运行以连接到远程主机:

import paramiko

def connect_host():
    host = \"192.168.1.100\"
    port = 22
    username = \"pi\"
    password = \"password\"

    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(host, port, username, password)

    stdout = ssh.exec_command(\'python3 /home/pi/Documents/data_remote_check.py\')[1]

connect_host()

脚本在远程主机上运行以收集数据:

import psutil, socket

def check_system():
    # Fetch data
    hostname = socket.gethostname()
    cpu_usage = psutil.cpu_percent(interval=1)
    memory_usage = psutil.virtual_memory()
    disk_usage          = psutil.disk_usage(\'/\')

    # Process memory data
    memory_total        = memory_usage.total/1024**3
    memory_free         = memory_usage.free/1024**3
    memory_used         = memory_usage.used/1024**3
    memory_used_percent = memory_usage.percent

    # Process disk data
    disk_total        = disk_usage.total/1024**3
    disk_free         = disk_usage.free/1024**3
    disk_used         = disk_usage.used/1024**3
    disk_used_percent = disk_usage.percent

    标签: python monitoring paramiko data-transfer psutil


    【解决方案1】:

    将flask与您的psutil一起用作api,这样您就可以从调用机器轻松地并行调用多个服务器。 == 加上它的蛋糕设置见下文,您可以轻松添加身份验证。

    import os
    import psutil
    from flask import Flask, jsonify, request
      
    app = Flask(__name__)
    @app.route('/getuser', methods=['GET'])
    
    def getusers():
         userlist = []
         userlist = psutil.users()
         return jsonify(userlist)
         
    if __name__ == '__main__':
        app.run(debug=True)
    

    【讨论】:

      猜你喜欢
      • 2017-08-20
      • 1970-01-01
      • 2017-10-16
      • 2017-06-02
      • 2020-06-08
      • 1970-01-01
      • 1970-01-01
      • 2013-07-13
      相关资源
      最近更新 更多