我正在使用Python库prometheus_client跟踪我的应用程序数据。
我在Gauge
中收集指标(Counter
/ CollectorRegistry
等)。
我有http_server
和BaseHTTPRequestHandler
正确运行并在各个端点上返回了数据。
我想知道如何在端点上公开通过CollerctorRegistry
存储的数据。
from http.server import BaseHTTPRequestHandler, HTTPServer
from prometheus_client import generate_latest, CONTENT_TYPE_LATEST
class MyLogHandler(BaseHTTPRequestHandler):
def _set_headers(self):
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
def do_GET(self):
if ENDPOINT_MANAGE_HEALTH in self.path:
status_code = 200 if ServiceStatusStore.all_services_healthy() else 500
self.send_response(status_code)
self.send_header("Content-Type", "application/json; charset=utf-8")
self.end_headers()
response_content = ServiceStatusStore.get_status_json()
self.wfile.write(response_content.encode("utf-8"))
if ENDPOINT_PROMETHEUS in self.path:
data = generate_latest(PrometheusGlobalRegistry.GLOBAL_REGISTRY)
self.send_header("Content-Type", CONTENT_TYPE_LATEST)
self.send_header("Content-Type", str(len(data)))
self.send_response(200)
return iter([data])
else:
self.send_response(500)
我加入了ENDPOINT_MANAGE_HEALTH
是因为它可以正常工作并返回JSON。
我的ENDPOINT_PROMETHEUS
被要求提供数据并返回状态200
,但是没有传递来自CollertorRegistry
的数据。我不知道数据格式是什么,应该如何传递。
我目前的解决方案是阅读该库的GitHub自述文件中的示例后的第n次尝试。