Grafana 是开源可视化与监控平台 ,InfluxDB 是开源时序数据库 ;两者是监控/物联网/DevOps 领域的黄金组合:InfluxDB 存时序数据,Grafana 做可视化与告警。
一、Grafana 是什么
Grafana 是一款开源、跨平台的数据可视化与监控分析平台,专注于时序数据的展示、查询与告警。
核心定位
- 不存储数据,只做数据展示层,连接各类数据源并生成仪表盘。
- 擅长时间序列数据(带时间戳的连续指标,如 CPU、温度、流量)。
核心能力
- 多数据源支持:原生对接 InfluxDB、Prometheus、MySQL、Elasticsearch、云监控等。
- 丰富可视化:折线图、柱状图、仪表盘、热力图、地图、表格等。
- 灵活仪表盘:拖拽式面板、变量、模板、多数据源混合展示。
- 告警系统:阈值告警、多渠道通知(邮件、钉钉、企业微信、Slack)。
- 团队协作:仪表盘共享、权限管理、版本控制。
典型场景
- 服务器/容器监控
- IoT 设备数据可视化
- 应用性能监控(APM)
- 业务指标大盘
- 实时日志/指标分析
二、InfluxDB 是什么
InfluxDB 是 InfluxData 开发的开源时序数据库(TSDB) ,专为高吞吐、高压缩、时间优先的时序数据设计。
核心定位
- 专门存储时间序列数据(如监控指标、传感器数据、日志、事件)。
- 高性能写入、高效存储、快速时间范围查询。
核心特点
- 时序优化:纳秒级时间戳,按时间分片(Shard),时间索引优先。
- 高性能写入 :每秒可处理数百万数据点,适合高频采集。
- 无模式设计:无需预定义 Schema,灵活写入不同结构数据。
- 高效存储 :列式存储 + 高压缩(LZ4/TSM),压缩比可达 10:1+。
- 数据生命周期:Retention Policy(保留策略)自动清理/降采样旧数据。
- 查询语言:InfluxQL(类 SQL)、Flux(更强大的函数式查询)。
- 生态完整:Telegraf(采集)→ InfluxDB(存储)→ Grafana(可视化)→ Kapacitor(告警)。
数据模型(核心概念)
- Bucket(2.x)/ Database(1.x):数据容器(类似数据库)。
- Measurement :类似表,如
cpu_usage、temperature。 - Tag :索引键(如
host=server01、region=gz),用于快速过滤。 - Field :数值/字符串(如
usage_idle=95.2),存储实际指标。 - Time:时间戳(必填,纳秒级)。
三、两者如何结合使用(完整流程)
1. 整体架构
数据采集(Telegraf/脚本/SDK) → InfluxDB(存储) → Grafana(可视化+告警)
- InfluxDB :负责存(高吞吐写入、压缩、时间查询)。
- Grafana :负责看(查询、绘图、告警、共享)。
2. 快速部署(Docker 最便捷)
bash
# 1. 启动 InfluxDB 2.x
docker run -d -p 8086:8086 --name influxdb influxdb:2.7
# 2. 启动 Grafana
docker run -d -p 3000:3000 --name grafana grafana/grafana-oss
3. InfluxDB 初始化(2.x)
- 访问
http://localhost:8086,完成初始设置:- 创建 Organization (如
myorg) - 创建 Bucket (如
metrics,保留 7 天) - 生成 Token(读写权限,保存备用)
- 创建 Organization (如
4. Grafana 配置 InfluxDB 数据源
- 访问 Grafana:
http://localhost:3000,默认账号admin/admin。 - 左侧菜单 → Configuration → Data Sources → Add data source。
- 选择 InfluxDB ,配置:
- Name:自定义(如 InfluxDB-Metrics)
- Query Language :选 Flux (2.x 推荐)或 InfluxQL(1.x)
- URL :
http://influxdb:8086(Docker 内部通信)或http://localhost:8086 - Auth :开启 Basic Auth 或直接填 Token
- Organization :填 InfluxDB 中的组织名(如
myorg) - Token:粘贴 InfluxDB 生成的 Token
- Default Bucket :填
metrics
- 点击 Save & test,提示"Data source is working"即成功。
5. 写入测试数据(可选)
用 InfluxDB CLI 或 Python 写入示例数据:
python
# Python 示例(influxdb-client 库)
from influxdb_client import InfluxDBClient, Point
from influxdb_client.client.write_api import SYNCHRONOUS
client = InfluxDBClient(url="http://localhost:8086", token="你的Token", org="myorg")
write_api = client.write_api(write_options=SYNCHRONOUS)
# 写入 CPU 数据
point = Point("cpu") \
.tag("host", "server01") \
.field("usage_idle", 95.2) \
.field("usage_system", 3.5)
write_api.write(bucket="metrics", record=point)
client.close()
6. Grafana 创建仪表盘与面板
-
左侧菜单 → Dashboards → New dashboard → Add panel。
-
数据源选择 InfluxDB-Metrics ,查询语言选 Flux。
-
编写查询(示例:查询最近 1 小时 CPU 空闲率):
fluxfrom(bucket: "metrics") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_idle") |> aggregateWindow(every: 1m, fn: mean) -
选择可视化类型(如 Time series),调整样式、标题、单位。
-
保存仪表盘,即可看到实时折线图。
7. 配置告警(示例)
- 在面板右上角 → Alert → Create alert rule。
- 设置条件:如
usage_idle < 80持续 5 分钟。 - 配置通知渠道:邮件、钉钉机器人、企业微信等。
- 触发时自动发送告警。
四、版本差异与注意事项
InfluxDB 1.x vs 2.x
- 1.x :Database/Retention Policy,查询用 InfluxQL,连接用用户名/密码。
- 2.x :Organization/Bucket,查询用 Flux ,连接用 Token,功能更强。
- Grafana 均支持,配置时注意选择对应查询语言。
最佳实践
- 数据采集 :优先用 Telegraf(InfluxData 官方采集器,支持数百种插件)。
- 查询优化:用 Tag 过滤、时间范围限定、降采样(Downsampling)提升性能。
- 存储规划:设置合理的 Retention Policy,避免无限增长。
- 安全:生产环境务必启用 HTTPS、Token 权限控制、防火墙限制 8086/3000 端口。
五、总结
- Grafana :可视化+监控+告警,连接一切数据源,做"数据的眼睛"。
- InfluxDB :时序数据存储,高吞吐、高压缩、时间优先,做"数据的仓库"。
- 结合价值 :快速搭建实时监控系统,从数据采集 → 存储 → 可视化 → 告警全链路打通,广泛用于 DevOps、IoT、APM 等场景。