Docker安装Prometheus+Grafana

安装Prometheus

准备目录:

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

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

准备文件:

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

内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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']

查看一下配置文件:

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

启动prometheus:

1
2
3
4
5
6
7
8
9
10
11
12
# 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

准备目录:

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

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

准备配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
# 先临时启动一个容器 

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 环境变量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

1
2
3
4
5
6
7
8
9
10
11
# 下载
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:

1
vim /etc/systemd/system/node_exporter.service

内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[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

设置开机自启:

1
2
3
systemctl daemon-reload 
systemctl enable node_exporter
systemctl start node_exporter

Docker安装node_exporter

1
2
3
4
5
6
7
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中配置当前采集项

编辑配置文件:

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

添加如下内容:

1
2
3
4
5
6
- job_name: node_exporter
static_configs:
- targets: ['192.168.8.189:9100']
lables:
instance: localhost

使得最新的prometheus配置生效

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

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

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

安装alertmanager

准备目录:

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

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

启动alertmanager:

1
2
3
4
5
6
7
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