如何编写一个在文件中收集值的 Prometheus 导出器?
Posted
技术标签:
【中文标题】如何编写一个在文件中收集值的 Prometheus 导出器?【英文标题】:How to write a Prometheus exporter that collects values in a file? 【发布时间】:2021-10-31 10:11:38 【问题描述】:假设我有一个文件,用于跟踪插入计算机的设备的状态。该文件如下所示:
DEVICE_1 = ONLINE
DEVICE_2 = OFFLINE
DEVICE_3 = ONLINE
DEVICE_4 = OFFLINE
我如何使用prometheus_client Python 库来创建一个自定义导出器来抓取该文件中的值?我计划使用 Grafana 在时间序列图中显示这些值,这样我就可以看到每个设备的状态如何随时间变化。我需要使用直方图还是仪表?将设备 ID 及其状态放在一起很重要。有人可以解释最好的方法,以便将它们转换为指标吗?
【问题讨论】:
【参考方案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 个静态标签,您就知道不会改变。这将阻止它创建另一个指标。再次感谢!以上是关于如何编写一个在文件中收集值的 Prometheus 导出器?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用联合从多个 Prometheus 实例(每个使用 instance="localhost:9090")中收集 Prometheus 的指标