【问题标题】:How to write a Prometheus exporter that collects values in a file?如何编写一个在文件中收集值的 Prometheus 导出器?
【发布时间】:2021-10-31 10:11:38
【问题描述】:

假设我有一个文件,用于跟踪插入计算机的设备的状态。该文件如下所示:

DEVICE_1 = ONLINE
DEVICE_2 = OFFLINE
DEVICE_3 = ONLINE
DEVICE_4 = OFFLINE

我如何使用prometheus_client Python 库来创建一个自定义导出器来抓取该文件中的值?我计划使用 Grafana 在时间序列图中显示这些值,这样我就可以看到每个设备的状态如何随时间变化。我需要使用直方图还是仪表?将设备 ID 及其状态放在一起很重要。有人可以解释最好的方法,以便将它们转换为指标吗?

【问题讨论】:

    标签: python prometheus monitoring grafana prometheus-node-exporter


    【解决方案1】:

    这里有 2 个问题,该数据使用什么指标类型,以及如何使用客户端库。

    我将回答指标类型问题。我将“最佳”定义为创建如下图,当设备在线/离线时,它将在 1/0 之间循环:

    我会实现一个 1/0 的量规。直方图增加了复杂性,并对观察结果进行采样。它可用于跟踪设备被移除的速率,即 DEVICE1 在过去 60 分钟内被移除/插入 X 次。

    在您的 python 导出器应用程序中,解析您的文件并使用标签来指定每个设备的值

    g = Gauge('customapp_activedevices', 'Description of gauge')
    
    while True:
        file= open("devicefile", "r")
        deviceCollection = file.read()
    
        for device in deviceCollection:
            if device.status == 'ONLINE':
                metricVal = 1
            else:
                metricVal = 2
           g.labels(devicename=device).set(metricVal)
    
    

    那么您的 grafana 查询非常简单,因为这些标签将在您的图表中成为不同的系列。您还可以在导出器中设置实例标签,因此您的 grafana 仪表板可以处理导出器的多个实例和多个设备。

    【讨论】:

    • 感谢您的回复!这实际上也是我得出的确切解决方案。然而有一个问题。每次我更改文件中设备的状态时。说 DEVICE_1 = 离线。它将显示为一个全新的指标,Grafana 在仪表板上两次显示 DEVICE_1 的 2 个状态(在线、离线)。你知道吗,所以我可以只显示一次指标以及它如何随时间变化?
    • 等等,没关系。我能够弄清楚我的问题。我在我的指标中添加了第二个标签来跟踪状态,这就是导致它创建一个完全独立的指标的原因。 Brandon 上面所做的工作正常。只需使用 1 个静态标签,您就知道不会改变。这将阻止它创建另一个指标。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 2019-03-17
    • 2018-11-19
    • 2023-02-26
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    相关资源
    最近更新 更多