Prometheus 刪除指定 Metric
Prometheus 發布以后,很長的一段時間里,是無法刪除指定的 Metric 。如果你在某次測試中,有一些 Metric 的名稱或者值有問題,那么你沒有任何辦法及時處理,只能等待數據的時間到了以后自動刪除。我一度以為直到現在也是這樣,最近在翻看 Prometheus 的官方文檔的時候發現,Prometheus 在 2.0 版本以后已經提供了一個簡單的管理接口,可以用來刪除這些壞 Metric 數據。
下面我們來一起看一下 Prometheus 的管理 API 接口,官方到現在一共提供了三個接口,對應的分別是快照功能、數據刪除功能、數據清理功能,想要使用 API 需要先添加啟動參數 --web.enable-admin-api
打開這個接口,默認這個接口是關閉的。
快速啟動 Prometheus 可以使用如下命令 ,詳細規范的啟動方式可以參考之前的文章。
./prometheus --web.enable-admin-api
數據刪除
使用數據刪除接口可以刪除一定時間范圍內的 Metric 數據。實際的數據仍然存在於磁盤上,並在將來的壓縮中清除,也可以通過數據清理接口顯式地清除。
如果刪除成功,會返回 204 。接口如下:
POST /api/v1/admin/tsdb/delete_series
PUT /api/v1/admin/tsdb/delete_series
這個接口可以使用 3 個參數,分別如下:
- match[]=<series_selector> : Metric 的名稱
- start=<rfc3339 | unix_timestamp> : 開始的時間戳
- end=<rfc3339 | unix_timestamp> : 結束的時間戳
如果沒有指定開始和結束時間將清除數據庫中匹配的所有數據。
接下來舉幾個例子
刪除指定 Metric 名稱的全部數據
curl -X POST -g 'http://127.0.0.1:9090/api/v1/admin/tsdb/delete_series?match[]=node_cpu_seconds_total'
刪除指定 Metric 名稱和特定 label 名稱的全部數據
curl -X POST -g 'http://127.0.0.1:9090/api/v1/admin/tsdb/delete_series?match[]=node_cpu_seconds_total{mode="idle"}'
刪除指定時間范圍內的 Metric 數據
curl -X POST -g 'http://127.0.0.1:9090/api/v1/admin/tsdb/delete_series?start=1578301194&end=1578301694&match[]=node_cpu_seconds_total{mode="idle"}'
linux 可以使用
date +%s
獲得當前的時間戳,可以使用date -d "2019-12-22 00:00:00" +%s
將指定的日期轉成時間戳。
數據清理
數據清理會從磁盤刪除已經被 delete_series
接口刪除的數據,並清理現有的 tombstones。可以在使用 delete_series
接口刪除數據之后使用它來釋放空間。
如果清理成功,會返回 204 。
POST /api/v1/admin/tsdb/clean_tombstones
PUT /api/v1/admin/tsdb/clean_tombstones
示例
curl -X POST http://127.0.0.1:9090/api/v1/admin/tsdb/clean_tombstones
這個接口不需要參數。