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>
- 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)}}
⚠️ 注意事项
- 权限要求:发送 HUP 信号需与 Prometheus 进程同用户
- 配置验证:重载前建议使用 promtool check config 验证配置
- 优雅降级:HTTP 接口失败时应保留 HUP 作为备用方案
- 监控指标:通过 prometheus_config_last_reload_success 指标监控重载状态
License:
CC BY 4.0