WRY

Where Are You?
You are on the brave land,
To experience, to remember...

0%

prometheus python client原理与改造

在fission函数中打点存在的问题

因为fission函数是没有状态的,所以在fission函数中打点需要在每个函数执行结束的时候就提交,会造成很大的流量开销。此外为了避免提交的记录被覆盖,所以在提交的时候就需要给job命名不同的内容,这种行为也会造成prometheus在整合数据的时候产生不必要的开销,长期而言十分不利。

改造需求

为了给fission函数定制一个友好的prometheus 客户端,首先需要明确我们的需求,大概想想有如下几点:

  • 更加随意的打点,不需要先声明Counter等metric类,然后再使用实例化的对象进行操作。而是需要实现一个统一的方法,只需指定类型、细分标签和变化值就可以完成打点,让在fission函数中使用打点,更像是一种无状态的行为。
  • 定时推送打点信息到pushgateway,减少流量开销。

官网prometheus客户端源码窥探

在官方提供的python prometheus client中,需要事先就指定标签有哪些,之后使用labels函数的时候,必须携带所有的标签信息这就造成了客户端在使用过程的不方便,再需要添加个新label的时候,需要改动所有的打点操作。

改造思想

  • 改造labels方法,可以自动扩展新增的标签,添加基础信息的标签
  • 一个函数实例只有一个Prometheus Client,所有的打点信息,都由该客户端自动托管,自动提交

改造细节

https://git.jingtao.fun/jingtao/prometheus_client_python