上一篇介绍了kubernetes+ prometheus中k8s的hpa的部分,但是没有介绍转化的部分,下面接着介绍
如果每次hpa调用查询metrics的指标我就去调用prometheus,但指标在prometheus里面是否存在,我们先要本地缓存一下,免给prometheus带来很大压力,所以本地缓存还有应该有的,主要缓存prometheus里面存在的指标,定义如下:
上面metrics保存prometheus的指标。当然本地缓存指标数据还有定期更新。
通过updateMetrics更新本地数据,这个方法首先是查询数据
先是通过Series获取指标序列,一个是容器的container,另一个是命名空间的namespace的。
这里通过prometheus的series接口获取指标序列,从而更新本地数据
这里,如果指标是container_开头、包含namespace指标的和其它三种情况处理,先看processContainerSeries里面
因为上面重写了String方法
所以key是pods/memory_swap(namespaced)。
如果是processNamespacedSeries或者processRootScopedSeries都是类似的,不过指标组不再是pod,譬如ingress_http_hits_total{pod=”foo”,service=”bar”,ingress=”baz”,namespace=”ns”}这样的一个指标
会返回三个GroupResources: “pods”, “services”, and “ingresses”.
这样指标就会变成services/ingress_http_hits_total。
补充一下,series 接口是prometheus查询数据序列的接口eg:
这样就能获取到指标序列了并且指标的label。这样prometheus本地指标缓存功能有了。