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

news/2024/5/18 23:23:46 标签: 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 官方支持的主要原因之一。


http://www.niftyadmin.cn/n/1531816.html

相关文章

.NET Core微服务之基于Ocelot+IdentityServer实现统一验证与授权

Tip: 此篇已加入.NET Core微服务基础系列文章索引 一、案例结构总览 这里,假设我们有两个客户端(一个Web网站,一个移动App),他们要使用系统,需要通过API网关(这里API网关始终作为客户端的统一入…

Prometheus 监控进程的内存使用率 PromQL 多对一向量匹配

使用 process-exporter 监控进程,node-expoert 监控节点 获取每个进程的内存使用量的表达式为 node_process_namegroup_memory_bytes{job"process",ip"10.1.1.1",memtype"resident"}获取节点总内存量的表达式为 node_memory_MemTota…

【译】WebAPI,Autofac,以及生命周期作用域

说明 原文地址:http://decompile.it/blog/2014/03/13/webapi-autofac-lifetime-scopes/ 介绍 这是一篇关于AutoFac的生命周期作用域的文章。 关于生命周期域一直以来都是一个令人头疼的命题,其中有些概念极易造成误解和混淆,比如域内单例&…

Prometheus 基于 snmp 监控网络设备注意事项

使用ifHCOUTOctets 而不是 ifOUTOctets,前者是64位的counter,后者是32位的snmp-exporter 的配置文件中,抓什么指标就 walk 什么 oid,最小化 walk 提高效率告警指标通常使用端口占用率而不是端口流量绝对值,ifSpeed 的值…

Prometheus源码学习(2) 服务发现

Prometheus 每个被控目标暴露一个 endpoint 供 server 抓取,要获知这些 endpoint 有多种方式,最简单的是在配置文件里静态配置,还有基于 k8s、consul、dns 等多种方式,基于文件的服务发现是比较灵活普遍的一种方式。当监控目标量比…

Go 中 nil 的作用

总结自 GopherCon 2016: Francesc Campoy - Understanding nil nil pointer 可以调用 nil 接收者的方法 nil slice 完美的零值 nil map 合法的空指,可以被 for range,用于只读的 map nil channel 停止 select case package demo_channelimport …

Ubuntu18.0.4安装docker

我的系统是elementary os,内核Ubuntu18.0.4 用仓库的方式安装,网上一堆教程,但是就是先入为主,遇到问题的时候没有自我思考 1.先更新系统,并安装相关依赖包,让apt可以通过https访问存储库 sudo apt update …

Prometheus 监控 windows process 进程存活

安装 windows-exporter msiexec /i "D:\monitor\windoes_exporter.msi" ENABELD_COLLECTORS"os,cpu,cs.logical_disk,net,system,process" LISTEN_PORT"19182" EXTRA_FLAGS"--collector.process.whitelistabc|windows_exporter"rule …