文章

Prometheus 热加载配置指南

Prometheus 热加载配置指南

📌 核心概念

Prometheus 支持运行时动态加载新配置,无需重启服务即可应用变更:

  • 适用场景:生产环境配置更新、监控目标动态调整
  • 支持版本:v2.0+(需启用生命周期管理参数)

🛠️ 配置更新方案对比

方式 适用场景 优点 缺点
重启服务 开发 / 测试环境 简单直接 服务中断,数据采集丢失
kill -HUP 本地维护场景 无需额外依赖 需处理 PID 获取、权限问题
POST /-/reload 自动化运维 / 远程管理 支持远程调用,幂等操作 依赖网络可达性

📦 启动前提

启用热加载功能需添加参数:

--web.enable-lifecycle


## 🔁 热加载操作指南
1. kill -HUP 方式
```bash
# 查找进程
ps -ef | grep prometheus

# 发送 HUP 信号(替换 <PID> 为实际进程号)
kill -HUP <PID>
  1. POST /-/reload
# 发送重载请求
curl -X POST http://<prometheus-host>:9090/-/reload

⚙️ 实现原理剖析

HUP 信号处理机制

// cmd/prometheus/main.go 片段
hup := make(chan os.Signal)signal.Notify(hup, syscall.SIGHUP)
go func() {
  for {
    case <-hup:
      reloadConfig(...) // 触发配置重载
  }
}()

HTTP 端点处理流程

// web/web.go 片段
func (h *Handler) reload(w http.ResponseWriter, r *http.Request) {
  select {
    case h.reloadCh <- nil: // 通知主进程重载
    default:
      http.Error(w, "Reload already in progress", http.StatusServiceUnavailable)}}

⚠️ 注意事项

  1. 权限要求:发送 HUP 信号需与 Prometheus 进程同用户
  2. 配置验证:重载前建议使用 promtool check config 验证配置
  3. 优雅降级:HTTP 接口失败时应保留 HUP 作为备用方案
  4. 监控指标:通过 prometheus_config_last_reload_success 指标监控重载状态
License:  CC BY 4.0