不上监控你永远不知道线上代码跑成什么样, 不生孩子你就不知道肿么回事儿
放假前突然接到需求要给消息队列上个监控…
平时不基建临时抱佛脚…
比较大的问题是 exporter 的数据展示, 当时为了工期, 写了个定时任务自动更新 metrcis, 自己都觉得蠢的一逼
今天看了下官方客户端, 优雅太多了. 留个 demo 下来, 省的以后临时需求又没时间看文档
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| import time
from prometheus_client import start_http_server from prometheus_client.core import GaugeMetricFamily, REGISTRY import requests
class OverviewCollector(object): def collect(self): print("collecting...") metric = GaugeMetricFamily(name="queue_totals", documentation="message_ready", labels=["msg_type"])
payload = {} headers = {}
url = "http://root:pwd@127.0.0.1:15672/api/overview" response = requests.get(url=url) data = response.json() queue_totals = data.get("queue_totals", {}) msg_ready = queue_totals.get("messages_ready", 0) msg = queue_totals.get("messages", 0) msg_unacknowledged = queue_totals.get( "messages_unacknowledged", 0)
metric.add_metric(["msg_ready"], msg_ready) metric.add_metric(["msg"], msg) metric.add_metric(["msg_unacknowledged"], msg_unacknowledged)
yield metric c = CounterMetricFamily("HttpRequests", 'Help text', labels=['app']) c.add_metric(["example"], 2000) yield c
if __name__ == "__main__": REGISTRY.register(OverviewCollector()) start_http_server(10111) print("start...") while True: time.sleep(1)
|
TODO
吐槽
golang 的 demo 就那么简洁???