文档
Grafana 入门教程:Dashboard 设计与多数据源
1. Grafana 在可观测性中的位置
数据采集层:Prometheus / Telegraf / Filebeat
↓
存储层:Prometheus TSDB / Elasticsearch / InfluxDB
↓
可视化层:Grafana ← 你在这一层
↓
告警层:Grafana Alerting / Alertmanager
2. Dashboard 设计原则
RED 方法论(服务监控)
- Rate:请求速率
- Errors:错误率
- Duration:延迟分布
USE 方法论(资源监控)
- Utilization:资源利用率
- Saturation:饱和度(排队长度)
- Errors:错误数
黄金信号
- 延迟(Latency)
- 流量(Traffic)
- 错误(Errors)
- 饱和度(Saturation)
3. 模板变量
# 变量定义(Dashboard Settings → Variables)
# 名称: instance
# 类型: Query
# 查询: label_values(node_cpu_seconds_total, instance)
# 面板中使用
rate(node_cpu_seconds_total{instance=~"$instance"}[5m])
常用变量类型:
- Query:从数据源动态获取值
- Custom:手动定义静态列表
- Constant:固定值(如环境名)
- Interval:时间间隔
4. 多数据源混合查询
Grafana 支持在一个面板中混合多个数据源:
// 面板 A 用 Prometheus(应用指标)
// 面板 B 用 Elasticsearch(日志统计)
// 面板 C 用 MySQL(业务指标)
MySQL 数据源示例
SELECT
UNIX_TIMESTAMP(created_at) as time,
COUNT(*) as orders,
SUM(amount) as revenue
FROM orders
WHERE created_at >= $__from AND created_at <= $__to
GROUP BY DATE(created_at)
ORDER BY time
5. Provisioning(基础设施即代码)
# datasources/prometheus.yaml
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
url: http://prometheus:9090
access: proxy
isDefault: true
# dashboards/dashboard.yaml
apiVersion: 1
providers:
- name: 'default'
folder: ''
type: file
options:
path: /etc/grafana/provisioning/dashboards
6. 思考题
- Grafana Dashboard 里 Stat / Gauge / Time-series 面板各自适合什么场景?
- 模板变量
$__rate_interval和[5m]有什么区别? - 如何用 Grafana 监控业务指标(如注册用户数、订单量)?