Skip to content

Docker安装Prometheus+Grafana

约 901 字大约 3 分钟

📖学习笔记🖥️Linux

2025-05-04

Docker 安装 Prometheus+Grafana

安装 Prometheus

准备目录:

# /opt/ops/prometheus/data目录,准备用来挂载放置prometheus的数据
# /opt/ops/prometheus/config目录,准备用来放置prometheus的配置文件
# /opt/ops/prometheus/rules目录,准备用来挂载放置prometheus的规则文件

mkdir -p /opt/ops/prometheus/{data,config,rules}

准备文件:

# 编辑配置文件
vim /opt/ops/prometheus/config/prometheus.yml

内容如下:

global:
  # 数据采集间隔
  scrape_interval: 45s
  # 告警检测间隔
  evaluation_interval: 45s

# 告警规则
rule_files:
  # 这里匹配指定目录下所有的.rules文件
  - /prometheus/rules/*.rules

# 采集配置
scrape_configs:
  # 采集项(prometheus)
  - job_name: "prometheus"
    static_configs:
      # prometheus自带了对自身的exporter监控程序,所以不需额外安装exporter就可配置采集项
      - targets: ["localhost:9090"]

查看一下配置文件:

cat /opt/ops/prometheus/config/prometheus.yml

启动 prometheus:

# config.file:指定容器中,配置文件的位置
# web.enable-lifecycle:启动此项后,当配置文件发生变化后,可通过HTTP API 发送 post 请求到 /-/reload,实现热加载,如:curl -X POST http://192.168.8.189:9090/-/reload
# -v /etc/localtime:/etc/localtime:ro表示让容器使用宿主机的时间, :ro表示只读(注:此方式只针对宿主机和容器的时区文件均为/etc/localtime)

docker run -d --restart=always -u root \
    --name prometheus \
    -p 9090:9090 \
    -v /etc/localtime:/etc/localtime:ro \
    -v /opt/ops/prometheus/data:/prometheus/data \
    -v /opt/ops/prometheus/config:/prometheus/config \
    -v /opt/ops/prometheus/rules:/prometheus/rules \
    prom/prometheus:v2.45.0 --config.file=/prometheus/config/prometheus.yml --web.listen-address=:9090 --web.enable-lifecycle --web.enable-admin-api  --storage.tsdb.path=/prometheus   --storage.tsdb.max-block-duration=2h  --storage.tsdb.min-block-duration=2h

安装 Grafana

准备目录:

# /opt/ops/grafana/data目录,准备用来挂载放置grafana的数据
# /opt/ops/grafana/plugins目录,准备用来放置grafana的插件
# /opt/ops/grafana/config目录,准备用来挂载放置grafana的配置文件

mkdir -p /opt/ops/grafana/{data,plugins,config}

准备配置文件:

# 先临时启动一个容器

docker run --name grafana-tmp -d -p 3000:3000 grafana/grafana:10.0.0

# 将容器中默认的配置文件拷贝到宿主机上

docker cp grafana-tmp:/etc/grafana/grafana.ini /opt/ops/grafana/config/grafana.ini

# 移除临时容器

docker stop grafana-tmp
docker rm grafana-tmp

启动 Grafana:

# 环境变量GF_SECURITY_ADMIN_PASSWORD:指定admin的密码
# 环境变量GF_INSTALL_PLUGINS:指定启动时需要安装得插件
#         grafana-clock-panel代表时间插件
#         grafana-simple-json-datasource代表json数据源插件
#         grafana-piechart-panel代表饼图插件

docker run -d --restart=always 	-u root \
	--name=grafana \
	-p 3000:3000 \
	-v /etc/localtime:/etc/localtime:ro \
	-v /opt/ops/grafana/data:/var/lib/grafana \
	-v /opt/ops/grafana/plugins/:/var/lib/grafana/plugins \
	-v /opt/ops/grafana/config/grafana.ini:/etc/grafana/grafana.ini \
	-e "GF_SECURITY_ADMIN_PASSWORD=LiHongyan03" \-e "GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource,grafana-piechart-panel" \
	grafana/grafana:10.0.0

二进制安装 node-exporter

# 下载
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz

# 解压
tar -zxvf node_exporter-1.6.1.linux-amd64.tar.gz
cd node_exporter-1.6.1.linux-amd64

# 启动
nohup ./node_exporter  --web.listen-address=:9100 &

/opt/ops/node_exporter/node_exporter161/node_exporter  --web.listen-address=:9100

封装 service:

vim /etc/systemd/system/node_exporter.service

内容如下:

[Unit]
Description=node_exporter
After=network.target

[Service]
ExecStart=/opt/ops/node_exporter/node_exporter161/node_exporter --web.listen-address=:9100
User=root
Restart=on-failure
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
RestartSec=42s

[Install]
WantedBy=multi-user.target

设置开机自启:

systemctl daemon-reload
systemctl enable node_exporter
systemctl start node_exporter

Docker 安装 node_exporter

docker run -d --restart=always -u root \
	--name node_exporter \
	-p 19191:9100 \
	-v "/proc:/host/proc:ro" \
	-v "/sys:/host/sys:ro" \
	-v "/:/rootfs:ro" \
	prom/node-exporter:v1.6.1

在 prometheus 中配置当前采集项

编辑配置文件:

vim /opt/ops/prometheus/config/prometheus.yml

添加如下内容:

- job_name: node_exporter
  static_configs:
    - targets: ["192.168.8.189:9100"]
      lables:
        instance: localhost

使得最新的 prometheus 配置生效

你可以重启 prometheus 或者使用热加载使新配置生效,这里我们使用热加载的方式:

# 前提条件:启动prometheus时,启用了web.enable-lifecycle
# 发送post请求到prometheus的/-/reload下触发热加载配置

curl -X POST http://192.168.8.189:9090/-/reload

安装 alertmanager

准备目录:

# /opt/ops/alertmanager/config目录,准备用来放置alertmanager的配置文件
# /opt/ops/alertmanager/template目录,准备用来挂载放置alertmanager的模板文件

mkdir -p /opt/ops/alertmanager/{config,template}

启动 alertmanager:

docker run -d --restart=always -u root \
    --name alertmanager \
    -p 9093:9093 \
    -v /etc/localtime:/etc/localtime:ro \
    -v /opt/ops/alertmanager/config/alertmanager.yml:/etc/alertmanager/alertmanager.yml \
    -v /opt/ops/alertmanager/template:/etc/alertmanager/template \
    prom/alertmanager:v0.25.0