目录
一:背景与思想 二:相关链接 三:编写Prometheus接口调用工具 四:问题
一:背景与思想
背景:目前公司需要统计一些数据, 而这些数据有些量非常大(千万量级的数据)。
如果在mysql中做统计, 可能会引发慢查询或者造成mysql集群负载过高的问题。 目前业务没有将这些数据同步到ES等数据库, 如果为了统计而调整业务, 这个改造成本比较高。 目前这些指标, 都通过打点, 上报到了Prometheus, 因此尝试利用Prometheus来做一些指标统计工作。 核心思想:
调用Prometheus的HTTP接口, 向接口发送PromQL语句, 解析响应来获取指标信息。
二:相关链接
PromQL快速入门: https://blog.csdn.net/tototuzuoquan/article/details/119719591 Prometheus源码分析: https://blog.csdn.net/qq_36648860/article/details/115768087 源码:https://github.com/prometheus /prometheus
三:编写Prometheus接口调用工具
import time
import requests
import urllib
prometheus _url = """http://公司Prometheus接口域名/api/v1/query?query={}&dedup=true&partial_response=true&time={}&_={}"""
class PrometheusUtils ( object ) :
def send ( self, promql, timestamp) :
"""
:param promql: 普罗米修斯查询语句
:param timestamp: 毫秒级时间戳(13位)
:return: 响应信息
"""
url = prometheus _url. format ( urllib. quote_plus( promql) , timestamp / 1000 , timestamp)
print ( url)
resp = requests. get( url= url)
return resp. json( )
if __name__ == '__main__' :
timestamp = time. mktime( time. strptime( "2023-06-28 00:00:00" , "%Y-%m-%d %H:%M:%S" ) )
print ( int ( timestamp * 1000 ) )
resp = PrometheusUtils( ) . send(
promql= """increase(指标名称{product_name="xshl", qulali_status="0"}[1d])""" ,
timestamp= int ( timestamp * 1000 ) )
print ( resp)
四:问题