在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