Grafana 可视化与监控
这篇讲如何用 Grafana 连接 InfluxDB、搭建监控面板、配置告警。InfluxDB 存数据,Grafana 画图——这套组合是监控系统的黄金搭档。
Grafana 是什么
Grafana 是最流行的开源数据可视化平台,支持 InfluxDB、Prometheus、MySQL、Elasticsearch 等数十种数据源。用它来:
- 把时序数据变成实时仪表盘
- 设置告警阈值,超过后自动通知
- 分享仪表盘给团队或嵌入到其他页面
Docker 部署 Grafana
docker run --name=grafana \
-p 3000:3000 \
-v /data/grafana/data:/var/lib/grafana \
-e GF_SECURITY_ADMIN_USER=admin \
-e GF_SECURITY_ADMIN_PASSWORD=admin123 \
-d \
grafana/grafana访问 http://localhost:3000,用 admin / admin123 登录。
连接 InfluxDB
方式一:InfluxQL(兼容 1.x 和 2.x)
在 Grafana 中添加数据源:
- Configuration → Data Sources → Add data source
- 搜索 “InfluxDB”,选择
- Query Language 选择 InfluxQL
- URL:
http://influxdb:8086 - Database:
my-bucket(选择你的 bucket) - User/Password: 2.x 的用户名/密码
方式二:Flux(2.x 原生)
- Query Language 选择 Flux
- URL:
http://influxdb:8086 - Organization:
my-org - Token: 你的 API Token
创建第一个面板
以监控 CPU 使用率为例。创建 Dashboard → Add panel,输入 InfluxQL 查询:
SELECT MEAN("usage") AS "CPU使用率"
FROM "cpu"
WHERE $timeFilter
GROUP BY time($__interval), "host"$timeFilter 和 $__interval 是 Grafana 的内置变量——自动匹配面板的时间范围和粒度。
用 Flux 查询同样的数据:
from(bucket: "my-bucket")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r._measurement == "cpu")
|> filter(fn: (r) => r._field == "usage")
|> aggregateWindow(every: v.windowPeriod, fn: mean)
|> yield(name: "mean")
```text
## 常用面板类型
| 面板类型 | 适用场景 | 示例 |
| --- | --- | --- |
| **Time series** | 指标随时间的变化趋势 | CPU、内存、QPS |
| **Stat** | 单个数值展示(当前值) | 在线用户数、错误率 |
| **Gauge** | 仪表盘样式,显示百分比 | 磁盘使用率、内存使用率 |
| **Bar gauge** | 横向柱状图,多维度对比 | 各主机 CPU 排名 |
| **Table** | 表格展示 | 告警列表、Top N |
| **Heatmap** | 热力图,观察分布 | 请求延迟分布 |
## 构建生产级仪表盘
一个典型的服务器监控仪表盘包含:
```text
┌────────────────────────────────────────┐
│ 服务器监控 Dashboard │
├────────────────────┬───────────────────┤
│ 在线主机数 (Stat) │ CPU 使用率趋势 │
│ 42 台 │ [Time Series 图] │
├────────────────────┴───────────────────┤
│ 各主机 CPU 使用率 (Bar gauge) │
│ ████████ server01 87.5% │
│ ██████ server02 62.3% │
│ ███ server03 35.1% │
├────────────────────────────────────────┤
│ 内存使用趋势 (Time Series) │
├────────────────────────────────────────┤
│ 磁盘 I/O (Time Series) │
├────────────────────────────────────────┤
│ 告警列表 (Table) │
│ [CRITICAL] server01 CPU > 90% 14:32 │
│ [WARNING] server02 磁盘 > 80% 14:35 │
└────────────────────────────────────────┘告警配置
Grafana 的告警比 InfluxDB 内置检查更灵活:
- 编辑面板 → Alert 标签 → Create alert rule
- 设置条件:
WHEN avg() OF query(A, 5m, now) IS ABOVE 90配置通知渠道(Contact points):
- Email:邮件通知
- Slack:Slack 频道
- Webhook:自定义 HTTP 回调(钉钉/企业微信)
- PagerDuty:值班系统
设置告警抑制(Silence):夜间维护窗口不发告警
avg > 90 持续 5 分钟),既避免噪音,又不漏掉真正的故障。导入社区仪表盘
Grafana 社区有大量预制仪表盘(grafana.com/dashboards):
- 搜索 “InfluxDB Node Exporter” 或 “Docker Monitoring”
- 复制 Dashboard ID
- Grafana → Dashboards → Import → 粘贴 ID → Load
这些预制的仪表盘已经包含了 CPU、内存、磁盘、网络等常见指标的面板——导入后只需微调即可投入使用。
一句话小结
InfluxDB + Grafana 是监控系统的标准组合。Grafana 面板类型丰富(时序图、仪表盘、表格),InfluxQL/Flux 双查询引擎灵活,告警规则支持多渠道通知。导入社区仪表盘能省 80% 的配置工作。
InfluxDB 系列到此完结。从安装到写入,从 Flux 查询到下采样,从 Grafana 仪表盘到告警配置——你已经掌握了时序数据的技术栈。回到 InfluxDB 简介 复习,或阅读 MySQL 数据库 做对比学习。