Docker版Prometheus持久化监控node_exporter&Container

Prometheus-server下载地址:https://github.com/prometheus/prometheus/releases/download/v2.40.2/prometheus-2.40.2.linux-amd64.tar.gz
cadvisor下载地址:https://github.com/google/cadvisor/releases/download/v0.47.2/cadvisor-v0.47.2-linux-amd64
node_exporter下载地址:https://github.com/prometheus/node_exporter/releases/download/v1.4.0/node_exporter-1.4.0.linux-amd64.tar.gz

Prometheus主配置文件:

cat /usr/local/prometheus/config/prometheus.yml

global:
  scrape_interval:     60s
  evaluation_interval: 60s

scrape_configs:

# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'
    static_configs:
    - targets: ["localhost:9090"]

  - job_name: 'all_auto_discovery_node_exporter'
    file_sd_configs:
    - files:
      - /app/prometheus-server/config/all_node_exporter.yml
      refresh_interval: 5s
  - job_name: 'cadvisor'
    file_sd_configs:
    - files:
      - /app/prometheus-server/config/cadvisor.yml
      refresh_interval: 5s

自动发现配置文件:

cat /usr/local/prometheus/config/all_node_exporter.yml

- targets:
  - 10.0.4.15:9100
  labels:
    country: 中国上海
    Cloud_Vendors: Tencent_Cloud
- targets:
  - 10.0.4.13:9100
  labels:
    country: 中国上海
    Cloud_Vendors: Tencent_Cloud

cat /usr/local/prometheus/config/cadvisor.yml

- targets:
  - 10.5.0.180:8080
  - 10.5.0.181:8080
  - 10.5.0.182:8080

构建Prometheus-Server&cadvisor镜像:

Prometheus-Server Dockerfile:

FROM centos:7.9.2009

ADD prometheus-2.40.2.linux-amd64.tar.gz /app/
RUN mv /app/prometheus-2.40.2.linux-amd64 /app/prometheus-server
COPY all_node_exporter.yml /app/prometheus-server/config/
COPY prometheus.yml /app/prometheus-server/config/

EXPOSE 9090

CMD ["/app/prometheus-server/prometheus", "--config.file=/app/prometheus-server/config/prometheus.yml","--storage.tsdb.retention=30d","--web.enable-admin-api"]

参数解释

#Prometheus主配置文件:                                            /usr/local/prometheus/config/prometheus.yml
#开启API服务                                                       --web.enable-admin-api
#监控数据保存30天                                                  --storage.tsdb.retention=30d

cadvisor Dockerfile:

FROM centos:7.9.2009
LABEL cadvisor v0.47.2
COPY cadvisor-v0.47.2-linux-amd64 /usr/bin/cadvisor
RUN chmod +x /usr/bin/cadvisor

ENTRYPOINT ["/usr/bin/cadvisor"]

启动Prometheus-Server容器

docker run -d \
-p 9090:9090 \
--name qwx-prometheus \
--restart=always \
-v /usr/local/prometheus/config/all_node_exporter.yml:/app/prometheus-server/config/all_node_exporter.yml \
-v /usr/local/prometheus/config/prometheus.yml:/app/prometheus-server/config/prometheus.yml \
-v /usr/local/prometheus/config/cadvisor.yml:/app/prometheus-server/config/cadvisor.yml \
-v /usr/local/prometheus/data/:/data/ \
qwx/prometheus:2.40.2

参数解释

  • docker run:启动一个 Docker 容器。
  • -d:以守护进程模式运行容器。
  • -p 9090:9090:将容器的 9090 端口映射到主机的 9090 端口。
  • --name qwx-prometheus:为容器指定名称。
  • --restart=always:容器退出后自动重启。
  • -v /usr/local/prometheus/config/all_node_exporter.yml:/app/prometheus-server/config/all_node_exporter.yml:将主机的 /usr/local/prometheus/config/all_node_exporter.yml 文件挂载到容器的 /app/prometheus-server/config/all_node_exporter.yml 文件。
  • -v /usr/local/prometheus/config/prometheus.yml:/app/prometheus-server/config/prometheus.yml:将主机的 /usr/local/prometheus/config/prometheus.yml 文件挂载到容器的 /app/prometheus-server/config/prometheus.yml 文件。
  • -v /usr/local/prometheus/config/cadvisor.yml:/app/prometheus-server/config/cadvisor.yml:将主机的 /usr/local/prometheus/config/cadvisor.yml 文件挂载到容器的 /app/prometheus-server/config/cadvisor.yml 文件。
  • -v /usr/local/prometheus/data/:/data/:将主机的 /usr/local/prometheus/data/ 目录挂载到容器的 /data/ 目录。
  • qwx/prometheus:2.40.2:使用 qwx/prometheus:2.40.2 镜像创建容器。

启动容器cadvisor容器

docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
--userns=host \
--privileged \
--device=/dev/kmsg \
cadvisor:v0.47.2

参数解释:

  • --volume=/:/rootfs:ro:将主机的根目录挂载到容器的根目录,并以只读模式挂载。
  • --volume=/var/run:/var/run:ro:将主机的 /var/run 目录挂载到容器的 /var/run 目录,并以只读模式挂载。
  • --volume=/sys:/sys:ro:将主机的 /sys 目录挂载到容器的 /sys 目录,并以只读模式挂载。
  • --volume=/var/lib/docker/:/var/lib/docker:ro:将主机的 /var/lib/docker 目录挂载到容器的 /var/lib/docker 目录,并以只读模式挂载。
  • --volume=/dev/disk/:/dev/disk:ro:将主机的 /dev/disk/ 目录挂载到容器的 /dev/disk/ 目录,并以只读模式挂载。
  • --publish=8080:8080:将容器的 8080 端口映射到主机的 8080 端口。
  • --detach=true:以守护进程模式运行容器。
  • --name=cadvisor:为容器指定名称。
  • --userns=host:使用主机的用户命名空间。
  • --privileged:授予容器特权权限。
  • --device=/dev/kmsg:将主机的 /dev/kmsg 设备挂载到容器的 /dev/kmsg 设备。
  • cadvisor:v0.47.2:使用cadvisor:v0.47.2 镜像创建容器。

启动node_exporter

tar zxvf node_exporter-1.4.0.linux-amd64.tar.gz -C /usr/local/ && mv /usr/local/node_exporter-1.4.0.linux-amd64 /usr/local/node_exporter && cd /usr/local/node_exporter && nohup ./node_exporter &>>/var/log/node_exporter.log &

备份监控数据:

每30天做一次快照备份:

0 0 0 * * curl -XPOST http://localhost:9090/api/v1/admin/tsdb/snapshot
最后修改:2024 年 05 月 18 日
如果觉得我的文章对你有用,请随意赞赏