跳到主要内容

重启与热加载

Prometheus 重启慢与热加载

Prometheus 重启的时候需要把 Wal 中的内容 Load 到内存里,保留时间越久、Wal 文件越大,重启的 实际越长,这个是 Prometheus 的机制,没得办法,因此能 Reload 的就不要重启,重启一定会导致短 时间的不可用,而这个时候Prometheus高可用就很重要了。

Prometheus 也曾经对启动时间做过优化,在 2.6 版本中对于Wal的 Load 速度就做过速度的优化,希望 重启的时间不超过 1 分钟

Prometheus 提供了热加载能力,不过需要开启 web.enable-lifecycle 配置,更改完配置后,curl 下 reload 接口即可。prometheus-operator 中更改了配置会默认触发 reload,如果你没有使用 operator,又希望可以监听 configmap 配置变化来 reload 服务,可以试下这个简单的脚本

#!/bin/sh
FILE=$1
URL=$2
HASH=$(md5sum $(readlink -f $FILE) )while true;do
NEW_HASH=$(md5sum $(readlink -f $FILE))
if [$HASH" != $NEW_HASH ]; then
HASH="$NEW_HASH"
echo "[$(date +%s)〕 Trigger refresh"
curl -sSL - X POST "$2" > /dev/null
fi
sleep 5done

使用时和 prometheus 挂载同一个 configmap,传入如下参数即可:

args:
- /etc/prometheus/prometheus. yml
- http://prometheus.kube-system.svc.cluster.local:9090/-/reLoadargs:
- /etc/alertmanager/alertmanager. yml
- http://prometheus.kube-system.svc.cluster.local:9093/-/reload