Prometheus适配器返回空的自定义指标

时间:2020-03-26 03:39:42

标签: kubernetes prometheus autoscaling kubernetes-hpa

在prometheus-adapter中配置了度量标准规则,我可以看到如下资源。

def extract_features_generalized(chunk, offsets, depth, columns):
    coordinates = np.nonzero(chunk) 
    df = pd.DataFrame()
    rows_to_keep = np.ones(len(coordinates[0]), dtype=int)
    for i in range(len(columns)):
        df[columns[i]] = coordinates[i]
        rows_to_keep = rows_to_keep * np.array((df[columns[i]] >= depth[i])) * \
                     np.array((df[columns[i]] < (chunk.shape[i] - depth[i])))
        df[columns[i]] = df[columns[i]] + offsets[i] - depth[i]
    del coordinates
    return df[rows_to_keep > 0]

def my_overlap_generalized(data, chunksize, depth, columns):
    data = data.rechunk(chunksize)
    data_overlapping_chunks = da.overlap.overlap(data, depth=depth, 
                                                 boundary=tuple(['reflect']*len(columns)))

    dfs = []
    for block in data_overlapping_chunks.to_delayed().ravel():
        offsets = np.array(block.key[1:]) * np.array(data.chunksize)
        df_block = dask.delayed(extract_features_generalized)(block, offsets=offsets, 
                                                              depth=depth, columns=columns)
        dfs.append(df_block)

    return dd.from_delayed(dfs)

data = np.zeros((2,4,8,16,16))  
data[0,0,4,2,2] = 1
data[0,1,4,6,2] = 1
data[1,2,4,8,2] = 1
data[0,3,4,2,2] = 1

arr = da.from_array(data)
df = my_overlap_generalized(arr, chunksize=(-1,-1,-1,8,8), 
                            depth=(0,0,0,2,2), columns=['r', 'c', 'z', 'y', 'x'])
df.compute().reset_index()

但是当我尝试获取指标值时。这些项目是空的。

kubectl get --raw="/apis/custom.metrics.k8s.io/v1beta1" | jq .
{
  "kind": "APIResourceList",
  "apiVersion": "v1",
  "groupVersion": "custom.metrics.k8s.io/v1beta1",
  "resources": [
    {
      "name": "pods/istio_ai_retry_per_second",
      "singularName": "",
      "namespaced": true,
      "kind": "MetricValueList",
      "verbs": [
        "get"
      ]
    },
    {
      "name": "namespaces/istio_ai_retry_per_second",
      "singularName": "",
      "namespaced": false,
      "kind": "MetricValueList",
      "verbs": [
        "get"
      ]
    }
  ]
}

这是规则,

kubectl get --raw="/apis/custom.metrics.k8s.io/v1beta1/namespaces/aiservice-test/pods/*/istio_ai_retry_per_second" | jq .
{
  "kind": "MetricValueList",
  "apiVersion": "custom.metrics.k8s.io/v1beta1",
  "metadata": {
    "selfLink": "/apis/custom.metrics.k8s.io/v1beta1/namespaces/aiservice-test/pods/%2A/istio_ai_retry_per_second"
  },
  "items": []
}

有人可以帮我检查一下这是怎么回事吗?

1 个答案:

答案 0 :(得分:0)

OP确认问题出在规则上。

pod更改为deployment,并将api访问路径更改为:

 /apis/custom.metrics.k8s.io/v1beta1/namespaces/{namespace_name}/deployment/{deployment_name}/{metric}

解决了这个问题。