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
这个接口不需要参数。