Hacktoberfest 2026:維護者為十月標記出來的 issue,仍然開放、適合新手。 瀏覽 Hacktoberfest issue

Add public, read-only access to label names, label values of any metric

未關閉
#689 3 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

評估

難度
3/5
預估耗時
1-2 天
新手友好度
38/100
Issue 類型
功能
描述清晰度
基本清楚
活躍度
停滯
技術堆疊
prometheus, python
領域
observability

研究方向

從 MetricWrapperBase 開始,檢查 issue 中描述的現有 _metric、_labelnames、_lock、collect() 和 remove() 行為。定義對標籤名稱和標籤值 tuple 的公開唯讀存取,然後新增測試以確認公開的值和執行緒安全的讀取行為。

由索引模型根據 Issue 內容生成。

描述

Hi,

I am currently working on Prometheus metrics for Celery workers in Flower project and we use this wonderful library :) - thx for your work on it!

One issue I came across is lack of direct access to metric's labelnames and labelvalues.

I think easiest is to give you an example how it is used/why it is needed.

We have multiple celery workers in a kubernetes cluster, they are monitored by Flower which generates Prometheus metrics.
Now the pods in k8s can die or be replaced if a new release of our software is deployed.

The problem with that then is that the final reading for each metric for that pod is retained forever and it shows in grafana forever.

We want to remove any tuples of label values which contain a celery worker name that is deemed offline/dead.

I used a semi-hack (https://github.com/mher/flower/pull/1135) and get those label values through metric.collect(), and from that iterate over samples and the labels in them and then if they contain an offline worker I remove the whole tuple from a given metric by calling metric.remove(*labelvalues_containg_dead_worker)

There could be a better way - access metric._metric.keys() in a thread safe and read-only way.

So I propose to add to MetricWrapperBase a read only property, say all_label_values (name to be improved, suggestions welcome :))

@property
def all_label_values(self) -> List[Tuple[str, ...]]:
    with self._lock:
        all_label_values = list(self._metric.keys().copy())

   return all_label_values

I think I am also badly missing access to actual labelnames set for the given metric to know at which position a label with a given name will be in the labelvalues.

Could kill 2 birds with one stone then and add:

@property
def labelnames(self) -> Tuple[str, ...]:
    return self._labelnames

Please let me know if such a change is acceptable and if I am missing any nuances.

If you think you would be ok merging it I will make a PR with tests soon.

Cheers,

Tom

主要語言
Python
星號
4.4k
分支
876
平均合併
8 天 4 小時
30 天內合併 PR
1

環境準備

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

prometheus/client_python 的其他 Issue

查看 prometheus/client_python 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。