跳至内容
Grafana 可视化与监控

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 中添加数据源:

  1. ConfigurationData SourcesAdd data source
  2. 搜索 “InfluxDB”,选择
  3. Query Language 选择 InfluxQL
  4. URL: http://influxdb:8086
  5. Database: my-bucket(选择你的 bucket)
  6. User/Password: 2.x 的用户名/密码

方式二:Flux(2.x 原生)

  1. Query Language 选择 Flux
  2. URL: http://influxdb:8086
  3. Organization: my-org
  4. 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 内置检查更灵活:

  1. 编辑面板 → Alert 标签 → Create alert rule
  2. 设置条件:
WHEN avg() OF query(A, 5m, now) IS ABOVE 90
  1. 配置通知渠道(Contact points):

    • Email:邮件通知
    • Slack:Slack 频道
    • Webhook:自定义 HTTP 回调(钉钉/企业微信)
    • PagerDuty:值班系统
  2. 设置告警抑制(Silence):夜间维护窗口不发告警

告警阈值不要设得过于敏感——CPU 偶尔飙到 85% 不一定是问题。一个好的告警规则:持续超过阈值 N 分钟才触发(如 avg > 90 持续 5 分钟),既避免噪音,又不漏掉真正的故障。

导入社区仪表盘

Grafana 社区有大量预制仪表盘(grafana.com/dashboards):

  1. 搜索 “InfluxDB Node Exporter” 或 “Docker Monitoring”
  2. 复制 Dashboard ID
  3. Grafana → DashboardsImport → 粘贴 ID → Load

这些预制的仪表盘已经包含了 CPU、内存、磁盘、网络等常见指标的面板——导入后只需微调即可投入使用。

一句话小结

InfluxDB + Grafana 是监控系统的标准组合。Grafana 面板类型丰富(时序图、仪表盘、表格),InfluxQL/Flux 双查询引擎灵活,告警规则支持多渠道通知。导入社区仪表盘能省 80% 的配置工作。


InfluxDB 系列到此完结。从安装到写入,从 Flux 查询到下采样,从 Grafana 仪表盘到告警配置——你已经掌握了时序数据的技术栈。回到 InfluxDB 简介 复习,或阅读 MySQL 数据库 做对比学习。

最后更新于