如何手动删除Prometheus中指定的指标数据
2021-08-01
Prometheus是一个基于时序数据库的开源监控系统。 Prometheus在2016年加入了CNCF(云原生计算基金会),成为继Kubernetes之后CNCF的第二个托管项目。
Prometheus HTTP API #
Prometheus的监控指标数据metrics存储在其内置的时序数据库中,即其本身也是一个时序数据库,但目前Prometheus还没有提供直接管理数据的功能,默认情况下只能通过Promtheus的HTTP API
查看数据。文档https://prometheus.io/docs/prometheus/latest/querying/api/中是对Prometheus查询API的介绍。其实Prometheus的WebUI使用的就是它的HTTP API,因此在运维开发中如果需要使用Prometheus的HTTP API的话,可以先在Prometheus的WebUI中写好PromQL执行查询,然后借助浏览器的开发者工具查看具体的HTTP API的写法。
除了查询Prometheus的指标数据外,在日常运维工作中还会有一些场景需要删除某些指定的监控指标数据。
例如,由于监控目标(exporter)的版本不兼容升级或者bug原因导致一些metrics的name或value有问题,这样的metrics数据默认情况下需要等到数据过期后自动删除。如果想要手动删除的话,需要借助Prometheus的TSDB Admin API
。
Prometheus TSDB Admin API #
当前Prometheus TSDB Admin API提供了三个接口,分别是快照(Snapshot)
, 数据删除(Delete Series)
, 数据清理(Clean Tombstones)
。
下面我们来体验一下数据删除和数据清理。
Prometheus的TSDB Admin API默认是关闭的,需要加入启动参数--web.enable-admin-api
才会启动。
开启TSDB Admin API后,可以使用下面的API删除metrics数据:
1PUT /api/v1/admin/tsdb/delete_series
这个接口有以下三个URL Query参数:
match[]=<series_selector>
: Metrics的名称start=<rfc3339 | unix_timestamp>
: 开始的时间戳end=<rfc3339 | unix_timestamp>
: 结束的时间戳
例如:
1curl -X PUT -g 'http://127.0.0.1:9090/api/v1/admin/tsdb/delete_series?match[]=up{app="someapp"}&start=2021-08-01T00:00:00.000Z'
需要注意使用数据删除接口将metric数据删除后,只是将数据标记为删除,实际的数据(tombstones)仍然存在于磁盘上,其在将来的某一时刻会被Prometheus清除释放空间,也可以通过数据清理接口显式地清除。
数据清理接口十分简单,不需要参数:
1PUT /api/v1/admin/tsdb/clean_tombstones