用Grafana和Prometheus搭建监控系统
上一篇介绍了如何用Grafana+InfluxDB+Telegraf来搭建监控平台,趁热打铁,这一篇我们采用Grafana+Prometheus来搭建监控平台,似乎现在应用Prometheus来搭建监控系统的更广泛。为了方便部署,本篇直接使用Docker Compose安装
搭建Prometheus
Prometheus对于系统平台监控业务做的非常专业,它是一个套件,集成了时序数据存储,灵活的采集及强大的查询等功能。本篇不深入介绍功能和原理,我们先把功能搭建起来:
- 我们来编写Docker Compose脚本,需要映射9090端口,另外建议把配置文件”prometheus.yml”挂载出来
services:
prometheus:
container_name: prometheus
image: prom/prometheus
restart: always
ports:
- "9090:9090"
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
networks:
- net-prom
networks:
net-prom:
- 这里采用相对路径挂载”prometheus.yml”,需要手动创建,我们先复制一个标准的配置文件过来,内容如下:
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
labels:
instance: prometheus
- 可以先用
$ docker-compose up -d
启动试试,然后打开浏览器,访问http://yourserver:9090/graph,你可以看到下面这个查询界面
部署Node Exporter
Node Exporter同上一篇介绍的Telegraf一样,负责主机端的数据收集,预置了很多收集项,足够我们使用了。
- 先编写Docker Compose脚本
services:
node-exporter:
container_name: node-exporter
image: prom/node-exporter
restart: always
ports:
- "9100:9100"
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
networks:
- net-ne
networks:
net-ne:
需要映射9100端口,另外将主机的几个主要目录挂载到容器里,这样Node Exporter可以获取数据。这里用”ro”标志目录只读
启动下容器试一试,访问http://yourserver:9100/metrics,你可以看到下面这个数据采集的页面
- 要将采集的数据传到Prometheus,需告知Prometheus服务Node Exporter的数据端口,这样Prometheus就会启动Job作业去抓取数据。这里,我们需要配置”prometheus.yml”,在”scrape_configs”项里添加一个Job
scrape_configs:
- job_name: 'server'
static_configs:
- targets: ['yourserver:9100']
labels:
instance: server1
注意,即便是监控本机,也不能用localhost,因为localhost指向Prometheus容器,而不是宿主机。
配置完,重启Prometheus后,访问http://yourserver:9090/targets,查看下刚才配的”server”采集Job是否是”UP”状态
安装Grafana
这个我们上一篇介绍过,Docker Compose脚本如下
services:
grafana:
container_name: grafana
image: grafana/grafana
restart: always
ports:
- "3000:3000"
volumes:
- ./grafana-data:/var/lib/grafana
networks:
- net-prom
links:
- prometheus
注意,这里的”networks”需同Prometheus一致,并且”links”指向”prometheus”容器名。这样在Grafana容器里,就可以通过主机名”prometheus”来路由到Prometheus容器。我们开始Grafana配置
- 创建一个新数据源,选择Prometheus
- 配置项上,填写数据源名称,然后指定Prometheus地址,就是”http://prometheus:9090"
- 保存后,即可创建一个新的仪表盘,然后同上一篇一样,创建及配置查询。如下图,我们加了内存使用”node_memory_MemTotal_bytes”和节点每分钟平均负载”node_load1”两个内置指标。
- Prometheus还有一个更简便的方法,就是在配置数据源时,选择标签页上的仪表盘
在列表上,选择你要导入的仪表盘(模板),点击Import导入
之后在仪表盘管理页面上,点击刚才导入的仪表盘,如下图
- 然后,你就可以看到一个精美的,而且主要的监控指标都已经配好的仪表盘了
是不是非常方便?
部署MySQL Exporter
Prometheus的官方Github上,提供了很多Exporter,用于各种不同应用的数据采集。这里,我们演示一个MySQL的数据采集器,即MySQL Exporter。
- 我们还是先写Docker Compose脚本,为了配合测试,我们把MySQL(本文采用MariaDB)的一起写了。
services:
mariadb:
container_name: mariadb
image: mariadb
restart: always
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=123456
volumes:
- ./mysql/my.cnf:/etc/mysql/my.cnf
- ./mysql/data:/var/lib/mysql
networks:
- net-db
mysqld-exporter:
container_name: mysqld-exporter
image: prom/mysqld-exporter
restart: always
ports:
- "9104:9104"
environment:
- DATA_SOURCE_NAME=root:123456@(mariadb:3306)/
networks:
- net-db
links:
- mariadb
networks:
net-db:
这里的”networks”和”links”的配置确保了”mysqld-exporter”容器可以通过主机名”mariadb”访问到MySQL容器。另外,”mysqld-exporter”需配置环境变量
DATA_SOURCE_NAME=root:123456@(mariadb:3306)/
来指定MySQL的地址、端口号、账户和密码。千万记住,最后的那个正斜杠是必须的,去掉后,会找不到MySQL的地址。记得在”prometheus.yml”的”scrape_configs”项里添加一个Job,抓取”mysqld-exporter”的数据,这里的端口映射了9104
scrape_configs:
- job_name: 'db'
static_configs:
- targets: ['yourserver:9104']
labels:
instance: mariadb
都配置完后,启动容器。我们先访问http://yourserver:9104/metrics看下数据采集是否正常,页面应该和Node Exporter的类似
然后打开http://yourserver:9090/targets,看下上面配的”db”Job有没有正常工作
一切顺利后,我们开始Grafana配置了
导入仪表盘
其实配置Grafana仪表盘是个辛苦活,选指标、配参数、调界面,都挺麻烦的。最好有人配好了,直接拿过来用。这里介绍一个Github上Grafana Dashboards项目,它提供了好多预置的Grafana仪表盘供我们使用,真是活雷锋。
- 让我们进入该项目的”dashboards”目录,里面列了好多仪表盘模板文件,都是JSON格式
- 我们就挑其中的”MySQL_Overview.json”下载,然后打开Grafana,在仪表盘管理页面上点击导入
- 点击上传JSON的按钮,并选择刚才下载下来的JSON文件
- 然后你会再次看到一个精美的,而且监控指标都已经配好的仪表盘了
大家可以把本文所有的Docker Compose脚本粘贴在一块启动(注意”networks”项要合并)。