首页 公告 项目 RSS

prometheus配置文件不能reload

April 9, 2020 本文有 435 个字 需要花费 1 分钟阅读

简介

之前碰到过一个神奇的问题,就是不然怎么请求prometheus的reload接口,prometheus的配置文件就是不能重载,以至于让我对这个世界失去了信息

操作

我是使用docker搭建的prometheus,这也是问题的关键,下面是我的compose文件

version: "3"
services:
  prometheus:
    image: "prom/prometheus:v2.14.0"
    container_name: "prometheus"
    restart: "always"
    ports:
      - "9000:9000"
      - "9090:9090"
    volumes:
      - "./prometheus.yml:/etc/prometheus/prometheus.yml"
      - "./prometheus-data:/prometheus"
      - "/etc/localtime:/etc/localtime"
      - "./hostsconf:/etc/prometheus/hostsconf"
      - "./rules:/etc/prometheus/rules"
    command:
      - "--config.file=/etc/prometheus/prometheus.yml"
      - "--web.enable-admin-api"
      - "--web.enable-lifecycle"

看着没问题对吧,的确是没问题

      - "--web.enable-admin-api"
      - "--web.enable-lifecycle"

这两行也是没有问题的,官方文档说这样就可以使用reload接口了

curl -XPOST http://127.0.0.1:9090/-/reload

看下日志

level=info ts=2020-04-08T08:06:40.948Z caller=main.go:743 msg="Loading configuration file" filename=/etc/prometheus/prometheus.yml
level=info ts=2020-04-08T08:06:40.950Z caller=main.go:771 msg="Completed loading of configuration file" filename=/etc/prometheus/prometheus.yml

发现接口请求是正常执行的

但是当你修改主机外部的prometheus.yml配置文件之后进入容器中cat下prometheus.yml,发现容器中的prometheus.yml并没有修改

编辑说是只读的,所以问题很显然是文件的权限问题,修改prometheus.yml的权限之后重新启动容器就可以了

之后看下官方的dockerfile

RUN mkdir -p /prometheus && \
    chown -R nobody:nogroup etc/prometheus /prometheus

真相了

欢迎关注我的博客www.bboy.app

Have Fun