Add public, read-only access to label names, label values of any metric
還沒有人認領這個 Issue。
評估
- 難度
- 3/5
- 預估耗時
- 1-2 天
- 新手友好度
- 38/100
- Issue 類型
- 功能
- 描述清晰度
- 基本清楚
- 活躍度
- 停滯
- 技術堆疊
- prometheus, python
研究方向
從 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
環境準備
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
prometheus/client_python 的其他 Issue
-
bug
難度 2/5 1-3 小時 新手友好度 70/100
prometheus/client_python#1177 · 1 則留言 ·
-
難度 4/5 3-5 天 新手友好度 45/100
prometheus/client_python#1210 ·
-
難度 2/5 1-3 小時 新手友好度 58/100
prometheus/client_python#1199 · 1 個 reaction ·
-
難度 5/5 一週以上 新手友好度 35/100
prometheus/client_python#1176 ·
-
難度 1/5 1-3 小時 新手友好度 52/100
prometheus/client_python#1126 · 2 則留言 ·
查看 prometheus/client_python 的全部 Issue
相似的 Issue
-
bug server
難度 2/5 1-3 小時 新手友好度 78/100
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 78/100
sportsdataverse/sportsdataverse-py#641 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 82/100
googleapis/google-cloud-python#18532 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 72/100
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 72/100
維護者通常 1 天內回覆