一、概述
1.1 Grafana介绍
Grafana是一个跨平台的开源度量分析和可视化工具,可以通过将采集的数据查询后进行可视化展示,并及时发出通知。它主要有以下六大特点:
- 展示方式: 快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式;
- 数据源: Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB等;
- 通知提醒: 以可视方式定义最重要指标的警报规则,Grafana将不断计算并发送通知,在数据达到阈值时通过Slack、PagerDuty等获得通知;
- 混合展示: 在同一图表中混合使用不同的数据源,可以基于每个查询指定数据源,甚至自定义数据源;
- 注释: 使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记;
- 过滤器: Ad-hoc过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询。
简单来说,它是一个多用途的监控工具,具备通过邮件等方式进行有效预警通知、丰富直观的可视化界面以及支持多种数据源配置等优点。
1.2 Prometheus对比Zabbix
和Zabbix类似,Prometheus也是一个近年来比较流行的开源监控框架。与Zabbix的不同之处在于,Prometheus的架构更为灵活,各模块间耦合度低,例如告警模块、代理模块等都可以选择性配置。其服务端和客户端都是开箱即用,无需复杂的安装过程。Zabbix则通常是一套完整的安装包,功能全面但也相对庞杂。
Zabbix的客户端Agent可以方便地通过脚本来读取机器内的数据库、日志等文件进行数据上报。而Prometheus的上报客户端则分为不同语言的SDK和不同用途的Exporter两种。例如,要监控机器状态、MySQL性能等,有大量成熟的Exporter可以直接使用,它们通过HTTP通信向服务端提供信息(服务端主动拉取信息)。如果你想监控自己的业务状态,各种语言都有官方或社区提供的SDK可供使用,无需像Zabbix那样先将数据存入数据库或日志再供Agent采集。
Zabbix的客户端主要专注于数据上报,属于Push模式。而Prometheus的客户端本地也会存储监控数据,服务端定时来拉取所需数据。
从界面来看,Zabbix风格相对传统,而Prometheus的界面较新且非常简洁,简洁到更像一个测试和配置平台。若要获得良好的监控可视化体验,搭配Grafana是两者共同的选择。
1.3 Grafana结构图

1.4 通俗讲
Prometheus作为监控数据的采集、存储和查询中心,而Grafana作为最终的可视化展示界面。后端的Exporter作为监控数据采集器,Exporter将需要获取的数据采集并暴露给Prometheus,Prometheus存储这些数据并提供给Grafana查询,从而直观展示被监控目标的状态。
二、Prometheus+Grafana监控系统搭建
2.1 安装Prometheus
下载并解压
wget https://github.com/prometheus/prometheus/releases/download/v2.7.2/prometheus-2.7.2.linux-amd64.tar.gz
tar xvfz prometheus-2.7.2.linux-amd64.tar.gz
运行Prometheus server
cd prometheus-2.7.2.linux-amd64
./prometheus --config.file=prometheus.yml
配置Prometheus
在Prometheus.yml中有配置文件,我们可以对其进行配置,当然第一次安装也可以使用默认配置。
$ cat 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‘]
其大致可分为四部分:
- global: 全局配置,其中
scrape_interval表示抓取一次数据的间隔时间,evaluation_interval表示进行告警规则检测的间隔时间;
- alerting: 告警管理器(Alertmanager)的配置;
- rule_files: 告警规则文件列表;
- scrape_configs: 抓取监控信息的目标配置。一个
job_name就是一个监控任务,其targets就是采集信息的IP和端口。这里默认监控了Prometheus自身。
访问Prometheus
在浏览器中访问 http://你的IP地址:9090,如果出现Prometheus的Web界面说明成功。如果访问不了,请检查防火墙是否开启了9090端口。
2.2 添加服务器状态监控
下载并运行Node Exporter
Node Exporter用于监控服务器CPU、内存、磁盘、网络等状态。
// 下载最新版本,可以在github的release中对最新版本右键获取下载链接
wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz
解压
tar xvfz node_exporter-0.17.0.linux-amd64.tar.gz
进入解压出的目录
cd node_exporter-0.17.0.linux-amd64
运行监控采集服务
./node_exporter
验证Node Exporter
Node Exporter默认监听9100端口。
- 在服务器上访问:
curl http://localhost:9100/metrics
- 在浏览器中访问:
http://服务器IP:9100/metrics
如果访问有指标数据输出,则成功。建议使用nohup或systemd进行后台启动。
配置Prometheus抓取Node Exporter数据
编辑Prometheus的配置文件prometheus.yml,在scrape_configs部分添加一个新的job。
vim prometheus.yml
添加target:
scrape_configs:
- job_name: ‘prometheus‘
static_configs:
- targets: [‘localhost:9090‘]
- job_name: ‘server‘ # 监控服务器
static_configs:
- targets: [‘localhost:9100‘] # Node Exporter地址
保存配置后,需要重启Prometheus服务使配置生效。这是一种常见的运维/DevOps操作。
2.3 安装Grafana
下载并解压Grafana
wget https://dl.grafana.com/oss/release/grafana-6.0.0.linux-amd64.tar.gz
tar -zxvf grafana-6.0.0.linux-amd64.tar.gz
解压后会出现 grafana-6.0.0 目录。
(可选)安装饼图插件
进入Grafana目录下的bin目录,然后输入以下命令安装插件:
./grafana-cli plugins install grafana-piechart-panel
启动Grafana
cd grafana-6.0.0
./bin/grafana-server web
在Grafana中展示监控信息
安装并启动Grafana后,浏览器输入http://IP:3000来访问Grafana,管理员账号密码默认是admin/admin。首次登陆会要求修改密码。
- 添加数据源:点击左侧齿轮图标 ->
Data Sources -> Add data source,选择Prometheus。

- 配置数据源:输入名称(如
Prometheus),URL填写http://Prometheus服务器IP:9090,然后点击Save & Test,成功提示后点击Dashboards选项卡。

- 导入仪表盘:可以选择导入Prometheus 2.0 Stats等官方面板,也可以从Grafana官网社区导入更丰富的面板。点击左侧
+号 -> Import。

- 使用社区模板:在
Import via grafana.com框中输入社区仪表盘ID,例如8919(一个经典的Node Exporter服务器监控面板),点击Load。

- 选择数据源:为导入的面板选择刚才配置的Prometheus数据源,点击
Import。

查看监控效果
点击左侧导航栏的田字格图标(Dashboards) -> Manage,找到并点击刚刚导入的仪表盘名称,即可看到服务器监控信息。
展示效果如图所示:

三、监控其他服务器
上述教程配置了包含Prometheus、Grafana和Node Exporter的监控服务器。现在需要监控其他服务器,只需在其他服务器上安装并运行Node Exporter,然后在监控服务器的Prometheus配置中添加该Exporter的地址即可。
在被监控服务器上:
- 下载、解压并运行Node Exporter(步骤同2.2)。
- 确保防火墙开放9100端口,或关闭防火墙(测试环境)。
在监控服务器上:
- 编辑
prometheus.yml文件。
- 在
scrape_configs部分添加新的job,注意job_name需唯一,targets填写被监控服务器的IP和9100端口。
- job_name: ‘server-192.168.1.100‘ # 建议使用有意义的名称
static_configs:
- targets: [‘192.168.1.100:9100‘]
- 重启Prometheus服务。
- 在Grafana中,已有的仪表盘会自动展示新加入的服务器指标(如果仪表盘使用了
job或instance标签进行筛选)。
注意:如果被监控服务器数量多,可以使用file_sd_configs或服务发现机制来动态管理targets,这是进阶的云原生/IaaS监控实践。
四、配置邮件告警
4.1 Grafana服务器配置
- 停止Grafana服务(如果是前台运行,按
Ctrl+C;如果是后台服务,用相应命令停止)。
- 进入Grafana目录,编辑配置文件
conf/defaults.ini。
cd grafana-6.0.0
vim conf/defaults.ini
- 找到
[smtp]部分,根据你的邮箱服务商进行配置。以QQ邮箱为例:
[smtp]
enabled = true
host = smtp.qq.com:465
user = your-qq@qq.com
password = 你的授权码(非QQ密码)
from_address = your-qq@qq.com
from_name = Grafana
skip_verify = true # SSL连接时可能需要
- 保存并退出编辑器。
- 重新启动Grafana服务。
4.2 Grafana界面配置告警
- 在Grafana任意图表中,点击标题 ->
Edit。
- 切换到
Alert选项卡,点击Create Alert。
- 配置告警规则,例如设置当CPU使用率超过80%时触发。
- 在
Notifications部分,可以添加邮件通知渠道(需先在Alerting -> Notification channels中配置好邮件通知渠道)。
- 保存图表和告警规则。
当监控指标达到阈值时,Grafana便会发送告警邮件。
五、搭建MySQL监控系统
5.1 步骤概述
- 在MySQL服务器上安装
mysqld_exporter。
- 为
mysqld_exporter配置MySQL连接权限。
- 运行
mysqld_exporter。
- 在Prometheus配置中添加该Exporter的地址。
- 在Grafana中导入MySQL监控仪表盘。
5.2 对mysqld_exporter进行操作
假设MySQL已安装并运行。
- 下载并解压:
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.10.0/mysqld_exporter-0.10.0.linux-amd64.tar.gz
tar -xvf mysqld_exporter-0.10.0.linux-amd64.tar.gz
- 创建配置文件:为
mysqld_exporter创建包含MySQL连接信息的配置文件(如.my.cnf)。
vim .my.cnf
内容如下:
[client]
user=exporter_user
password=your_password
建议在MySQL中为监控单独创建一个用户并授予相应权限(如SELECT, PROCESS, REPLICATION CLIENT)。
- 运行mysqld_exporter:
./mysqld_exporter --config.my-cnf=".my.cnf" &
mysqld_exporter默认监听9104端口。
5.3 配置Prometheus抓取MySQL数据
在监控服务器的prometheus.yml配置文件中添加:
- job_name: ‘mysql‘
static_configs:
- targets: [‘MySQL服务器IP:9104‘]
重启Prometheus。访问http://Prometheus-IP:9090/targets,确认mysql job的State为UP。
5.4 配置Grafana展示
- 在Grafana中,确保已添加指向监控服务器Prometheus的数据源。
- 点击
+ -> Import,输入仪表盘ID 7362(一个常用的MySQL仪表盘),点击Load。
- 选择对应的Prometheus数据源,点击
Import。
- 导入成功后,即可在Dashboards中查看MySQL的各项性能指标,如连接数、查询速率、缓冲池使用情况等。

六、监控Redis
6.1 下载并运行Redis Exporter
在Redis服务器上操作。
下载:
wget https://github.com/oliver006/redis_exporter/releases/download/v1.0.3/redis_exporter-v1.0.3.linux-amd64.tar.gz
解压:
tar -xvf redis_exporter-v1.0.3.linux-amd64.tar.gz
启动 (根据Redis是否有密码选择):
- 无密码:
./redis_exporter -redis.addr redis://192.168.1.120:6379 &
- 有密码:
./redis_exporter -redis.addr 192.168.1.120:6379 -redis.password 123456 &
Redis Exporter默认监听9121端口。
6.2 配置Prometheus
在监控服务器的prometheus.yml中添加:
- job_name: ‘redis‘
static_configs:
- targets: [‘Redis服务器IP:9121‘]
重启Prometheus并检查targets状态。
6.3 配置Grafana展示
- 在Grafana中,使用已有的Prometheus数据源。
- 点击
+ -> Import,输入仪表盘ID 763(Redis Dashboard for Prometheus Redis Exporter),点击Load。
- 选择数据源,点击Import。
- 即可查看Redis的内存使用、命令统计、连接数等关键指标。

七、Grafana API令牌使用
Grafana提供了HTTP API,允许以编程方式管理仪表盘、数据源、用户等。对于非管理员操作,可以使用API令牌进行认证。
7.1 创建API令牌
- 在Grafana界面,点击左侧齿轮图标(Configuration) ->
API Keys。
- 点击
Add API key。
- 输入Key名称,选择角色(
Viewer, Editor或Admin),设置过期时间(可选)。
- 点击
Add后,会显示生成的Token,请立即复制保存。
7.2 使用API令牌调用接口
在调用HTTP API时,在请求头中添加:
Authorization: Bearer <你的API_TOKEN>
例如,使用curl获取当前用户信息:
curl -H “Authorization: Bearer eyJrIjoiT0daTT...” http://your-grafana-ip:3000/api/user
通过API,可以实现自动化部署监控视图、与内部系统集成等高级大数据运维场景。
八、监控其他服务(RabbitMQ, TiDB)
监控其他服务的原理相通:找到对应的Prometheus Exporter,运行它,并在Prometheus中添加抓取任务,最后在Grafana中导入合适的仪表盘。
- RabbitMQ: 使用
rabbitmq_exporter。配置时需提供RabbitMQ管理界面的地址和凭证。仪表盘ID可尝试 2121。
- TiDB: TiDB集群本身暴露了Prometheus格式的指标。在Prometheus中直接添加TiDB组件(PD, TiKV, TiDB)的指标地址即可。可以从TiDB官方Ansible仓库获取对应的Grafana仪表盘JSON文件(如
tidb.json)并导入。
总结
通过以上步骤,我们完成了一套从基础服务器监控到常见中间件/数据库监控的Prometheus+Grafana告警系统搭建。核心在于理解Prometheus作为数据中枢的角色,以及各类Exporter作为数据采集器的用法。Grafana则提供了强大灵活的可视化和告警能力。掌握这套技术栈,是构建现代化、可观测性强的应用系统的关键一步。