【问题标题】:Python script to monitor devices用于监控设备的 Python 脚本
【发布时间】:2019-02-04 11:03:35
【问题描述】:

我被困在一个领域。我在 MySQL 数据库中设置了不同轮询间隔的设备很少。例如,我总共有 4 台设备,其中 2 台用户希望每 5 分钟轮询一次,另外两台每 10 分钟轮询一次,并且应该每 7 分钟轮询一次。

我想在 python 中构建一个解决方案,从数据库中选择这些设备及其轮询间隔,然后开始在它们定义的轮询间隔内连续轮询这些设备。

因为我无法创建多个轮询脚本(每个脚本一个),因为它会过度使用 CPU 资源。如果设备数量达到 1000 台,那么一次轮询所有 1000 台设备将是一个问题。它更像是一个持续运行和监控设备的监控解决方案。

我真的被困在这一点上。我会感谢你在这方面的帮助。

【问题讨论】:

  • 哪个平台? Linux ?
  • 如果可能的话,我希望它独立于平台,否则在 linux 上
  • 如果是 linux,我会推荐 collectd。但我认为Windows也有一些兼容的东西。 #whyreinventthewheel ?
  • 但是,如果我想通过 python 来完成,比如 poller 或 worker,它会按照定义的轮询间隔轮询设备,并继续永远运行
  • 设备是什么意思?服务器? URL 端点?

标签: python monitoring


【解决方案1】:

为每个间隔生成一个工作人员将完成这项工作。相同的代码看起来有点像这样:

from time import sleep
from multiprocessing import Process

intervals = [1, 2, 3] # hardcoding it to check, fetching it from db would be better

def generate_poll_worker(interval):
    def poll_devices():
        while True:
            # fetch the devices and poll them
            sleep(interval * 60)

    return poll_devices

def worker_process(interval):
    poll = generate_poll_worker(interval)
    poll()

workers = []

for interval in intervals:
    worker = Process(target=worker_process, args=(interval,))
    worker.start()
    workers.append(worker)

for worker in workers:
    worker.join()

【讨论】:

  • 您能否提供一个脚本,让我知道如何做?
  • 太好了,我明白了你的意思,这是有效的解决方案。如果我给你一个 3 个这样的间隔的例子,你能说得更清楚吗,比如说 3 分钟、5 分钟和 10 分钟
  • 在这种情况下,获取表的 poll_interval 列中的不同值并将其转换为列表将为您提供[3, 5, 7]。您可以遍历该列表以为每个间隔生成一个工作器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-27
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
相关资源
最近更新 更多