Prometheus管理数据指标的方法

有的时候我们可能希望从 Prometheus 中删除一些不需要的数据指标,或者只是单纯的想要释放一些磁盘空间。Prometheus 中的时间序列只能通过 HTTP API 来进行管理。

默认情况下,管理时间序列的 API 是被禁用的,要启用它,我们需要在 Prometheus 的启动参数中添加 --web.enable-admin-api 这个参数。

如果你使用的是 Prometheus Operator 部署的话,貌似官方没有给出这个参数的配置,可以通过编辑对应的 Staefulset 资源对象来添加该参数。

控制管理 API 启用后,可以使用下面的语法来删除与某个标签匹配的所有时间序列指标:(将 localhost 替换成你自己的 Prometheus 的访问地址即可。)

1
$ curl -X POST -g 'http://localhost:9090/api/v1/admin/tsdb/delete_series?match[]={kubernetes_name="redis"}'

上面命令就可以用于删除具有标签kubernetes_name=”redis”的时间序列指标。

如果要删除一些 job 任务或者 instance 的数据指标,则可以使用下面的命令:

1
2
$ curl -X POST -g 'http://localhost:9090/api/v1/admin/tsdb/delete_series?match[]={job="kubernetes-service-endpoints"}'
$ curl -X POST -g 'http://localhost:9090/api/v1/admin/tsdb/delete_series?match[]={instance="10.244.2.158:9090"}'

要从 Prometheus 中删除所有的数据,可以使用如下命令:

1
$ curl -X POST -g 'http://localhost:9090/api/v1/admin/tsdb/delete_series?match[]={__name__=~".+"}'

不过需要注意的是上面的 API 调用并不会立即删除数据,实际数据任然还存在磁盘上,会在后面进行数据清理。

要确定何时删除旧数据,可以使用 --storage.tsdb.retention参数进行配置(默认情况下,Prometheus 会将数据保留15天)。