在Docker中实时重新加载Prometheus配置(-compose)

时间:2019-06-13 17:17:30

标签: docker docker-compose prometheus

我有一个在docker-compose中运行Prometheus的新服务器。 我希望能够重新加载配置文件(prometheus.yml),而不必停止并启动容器。

当然,由于我将promethues持久存储在一个卷中,因此停止和启动并不是一个真正的问题,但这似乎有点过头了,尤其是因为prometheus本身具有如此方便的api重新加载配置。

我看到其他人也有类似的问题(例如here),但我一直无法找到适合我的解决方案。也许我正在忽略那里的东西。

docker-compose.yml

version: "3"

services:

  grafana:
    restart: always
    container_name: grafana
    image: grafana/grafana:6.2.1
    ports:
      - 3000:3000
    volumes:
      - grafanadata:/var/lib/grafana

  prometheus:
    restart: always
    container_name: prometheus
    image: prom/prometheus:v2.10.0
    privileged: true
    volumes:
      - ./configuration/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheusdata:/prometheus

    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--web.enable-admin-api'
      - '--web.enable-lifecycle'
    ports:
      - 9090:9090

  node:
    restart: always
    container_name: node
    image: prom/node-exporter:v0.18.0
    ports:
      - 9100:9100

volumes:
  grafanadata:
  prometheusdata:

A,我的结果。

当我运行curl -X POST http://localhost:9090/-/reload时,docker-compose日志给出:

prometheus    | level=info ts=2019-06-17T15:33:02.690Z caller=main.go:730 msg="Loading configuration file" filename=/etc/prometheus/prometheus.yml
prometheus    | level=info ts=2019-06-17T15:33:02.691Z caller=main.go:758 msg="Completed loading of configuration file" filename=/etc/prometheus/prometheus.yml

所以普罗米修斯的结局很好。.到目前为止一切都很好。

但是,当我编辑./configuration/prometheus/prometheus.yml时,更改不会传播到容器中。 此外,当我尝试在容器中编辑/etc/promethus/prometheus.yml时,我看到它是只读的(顺便说一句,该容器没有'sudo'命令)。

是否有一种docker native方法将这些配置文件热/实时重新加载到容器目录中?

如前所述,down / start选项目前可以使用,但是我很好奇是否有更优雅的解决方案。

3 个答案:

答案 0 :(得分:0)

看起来像

      - ./configuration/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml

应该颠倒过来。

答案 1 :(得分:0)

我将假定您已经更新了/etc/prometheus/prometheus.yml文件,而您只是在询问重新加载config。 (尽管配置可以是configmap的一部分,并且可以避免configmap更改时pod重新启动。)

运行以下命令以重新加载配置而不停止prometheus进程:

docker exec <prometheus_container_name> sudo killall -HUP prometheus

说明:sudo killall -HUP prometheus命令向Prometheus进程发送SIGHUP信号以重新加载配置。

通过以下方式验证更改:

curl -X GET http://localhost:9090/api/v1/status/config

答案 2 :(得分:0)

docker-compose kill -s SIGHUP prometheus 做到了这一点,所以 Vishrant 肯定在那里做点什么。