准备

首先确保已经安装了 docker 和 docker-compose

介绍

首先拿出官方的生态架构图简单介绍一下整个体系架构

Prometheus 是整个监控体系的核心,它中包含了时序数据库和 PromQL 查询语言

Exporter 是监控数据收集节点,由 Prometheus 根据配置主动拉取监控数据,Prometheus 官方提供了一些 exporter 如 node-exporter

Grafana 是一个支持多种数据源配置的数据可视化系统,我们需要安装 Grafana 后将 Prometheus 作为数据源进行连接

除此之外 Short-lived jobs 和 Alertmanager 本文暂不涉及

开始搭建

首先可以创建一个文件夹,用于存放搭建过程中涉及到的所有文件,我这里创建一个 moniter 文件夹,后续均在该文件夹中进行操作

Prometheus

创建prometheus.yml

1
2
3
4
5
6
7
8
9
10
11
12
# 全局配置
global:
# 抓取时间周期,默认为1分钟,这里设置为15s
scrape_interval: 15s
# eval的时间周期,默认为1分钟,用于计算规则,触发告警等操作
evaluation_interval: 15s

# 抓取配置
scrape_configs:
- job_name: "job1"
static_configs:
- targets: ["host.docker.internal:9100"]

targets 中可以添加多个 exporter 的地址,我这里只监控 docker 所在的宿主机,docker 中宿主机可通过域名host.docker.internal进行访问

docker-compose 配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
prometheus:
container_name: prometheus
hostname: prometheus
image: "prom/prometheus:latest"
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- ./promdata:/prometheus
restart: always
environment:
- TZ=Asia/Shanghai
user: root
command:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus"
- "--storage.tsdb.retention=30d"
- "--web.console.libraries=/usr/share/prometheus/console_libraries"
- "--web.console.templates=/usr/share/prometheus/consoles"
extra_hosts:
- "host.docker.internal:host-gateway"

volumes 中将宿主机中之前配置的prometheus.yml文件映射到容器中,再映射宿主机中的 promdata`文件夹到容器中,作为数据保存的文件夹

为了在容器中使用域名host.docker.internal访问宿主机,需要使用 extra_hosts 参数配置

Grafana

创建空文件grafana.ini,以后若有配置需求,可修改该文件

docker-compose 配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
grafana:
container_name: grafana
image: "grafana/grafana:latest"
hostname: grafana
ports:
- "3000:3000"
volumes:
- ./grafana.ini:/etc/grafana/grafana.ini
- ./grafana:/var/lib/grafana
restart: always
user: root
environment:
- TZ=Asia/Shanghai

Grafana 需要连接Prometheus故也需要配置宿主机域名

Node-Exporter

  • docker-compose 配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
node-exporter:
container_name: node-exporter
hostname: node-exporter
image: "prom/node-exporter:latest"
ports:
- "9100:9100"
privileged: true
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
network_mode: "host"
pid: host
restart: always
environment:
- TZ=Asia/Shanghai

启动配置

使用docker-compose up一键启动所有服务

宿主机打开浏览器进入http://localhost:3000即可打开 Grafana 前端界面,输入默认用户名密码均为admin,提示修改密码,我们也可以直接点击SKIP

点击进入数据源配置,添加一条 Prometheus 数据源

点击Save & test,测试通过后就可以添加监控图表了

添加图表

点击右上角的+号,点击Import dashboard,可以导入其他人制出的成品图表,导入方式可以通过 JSON 文件导入,也可以通过 ID 编号导入

这里我们导入图表

Node Exporter Full | Grafana Labs

可以直接点击Copy ID to clipboard复制 ID,回到导入界面点击Load即可

之后如果一切正常,应该就能够看到监控面板