更新 Prometheus 配置文件的正确姿势

Prometheus 有几种配置文件,每种可能有多个具体的文件。

这些配置文件可能包括:

  • 配置文件如 prometheus.yml
  • 告警规则文件如 rule.yml
  • 服务发现用的监控目标文件如 targets.json
  • node-exporter 的 textfile

这些文件有些被重新加载的场景:

  • 可能会手工修改,然后手工触发 reload
  • 可能会由 sidecar 程序监控变更并 reload,如 thanos-sidecar
  • 可能由自定义的程序进行修改如自己写的 cronjob 或 go 程序定期更新目标文件。

以监控目标文件为例,Prometheus 会有三种场景读取这个文件:

  1. 首次启动加载
  2. 监视到文件变更时触发加载
  3. 定期加载

前两种场景问题不大,第三种情况有可能出现问题。Prometheus 有可能在你更新文件的过程中读取该文件,这可能造成读到空文件、读到部分文件或者发生读取错误。比如我的 targets.json 文件 7M+,写入的时间要若干毫秒。

我想过加锁写,但这可能会引发不必要的麻烦,比如读阻塞,官方给出的正确更新姿势是先写一个临时文件,然后更名这个文件为要修改的文件。注意要在同一个文件系统上,最好是同一个目录下,否则可能就不是原子的更名操作了。同时要注意只有符合标准 POSIX 规范的文件系统可以保证这个操作是原子的,这也是 NFS 不被 Prometheus 官方支持的主要原因之一。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值