本文目录导读:

我来全面介绍Grafana的可视化面板(Dashboard和Panel)。
Grafana可视化面板核心概念
面板类型
基础面板
- Time Series(时序图) - 最常用,展示随时间变化的数据
- Stat(统计值) - 显示单个重要指标
- Table(表格) - 表格化展示数据
- Gauge(仪表盘) - 类似汽车速度表
- Bar Gauge(柱状仪表) - 条形进度显示
- Pie Chart(饼图) - 占比分布
高级面板
- Heatmap(热力图) - 密度分布
- Histogram - 直方图分布
- State Timeline(状态时序) - 状态变化
- Status History(状态历史) - 多状态展示
- Geomap - 地理空间数据
- Node Graph - 网络拓扑图
面板配置
数据查询
// PromQL 示例 avg(rate(http_requests_total[5m])) by (status) // SQL 示例 SELECT time, cpu_usage FROM server_metrics WHERE host = '$host'
显示设置与描述** - 面板标识
- 图例 - 开关、位置、值显示
- 轴设置 - 单位、范围、刻度
- 阈值 - 颜色告警区间
- 数据链接 - 点击交互
典型面板配置实例
{
"panels": [
{
"type": "timeseries",
"title": "CPU使用率",
"targets": [{
"expr": "100 - (avg by (instance)(rate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100)",
"legendFormat": "{{instance}}"
}],
"options": {
"legend": {"displayMode": "table"},
"tooltip": {"mode": "multi"}
},
"fieldConfig": {
"defaults": {
"unit": "percent",
"thresholds": {
"steps": [
{"color": "green", "value": null},
{"color": "orange", "value": 80},
{"color": "red", "value": 90}
]
}
},
"overrides": []
}
}
]
}
交互功能
变量和过滤
- 模板变量:
$host,$region - 动态查询:根据选择变化
- 联动过滤:点击某区域联动更新
图表交互
- Zoom In/Out:缩放时间范围
- Crosshair:十字准星
- Series Toggle:隐藏/显示序列
- Annotation:事件标记
最佳实践
布局设计
Top: 关键指标(Status/Gauge)
├── CPU总览 Stat
├── 内存总览 Stat
├── 磁盘总览 Stat
Middle: 趋势分析
├── CPU时序图
├── 内存使用率
├── 网络流量
Bottom: 详细数据
├── 实时日志表格
├── 告警状态表
性能优化
- 指标减少:使用avg/max聚合
- 采样率:降低数据点密度
- 缓存时间:合理设置刷新间隔
- 查询优化:使用PromQL效率技巧
进阶技巧
自定义面板
// 使用Transformations进行数据转换
- Reduce: 聚合计算
- Group By: 维度分组
- Merge: 合并查询结果
- Sorted By: 排序
// Overrides: 特定系列个性设置
{
"matcher": {
"id": "byName",
"options": "critical_hosts"
},
"properties": [{
"id": "custom.lineWidth",
"value": 3
}]
}
告警配置
# 面板告警规则
alert:
- name: High CPU Alert
condition: avg() > 85
duration: 5m
notifications:
- slack
- email
常见问题解决
| 问题 | 解决方案 |
|---|---|
| 数据点太多渲染慢 | 使用$__interval变量降采样 |
| 图例太多看不清 | 开启max series限制 |
| 坐标轴刻度异常 | 设置soft min/max |
| 面板加载失败 | 检查数据源连接和查询语法 |
模板示例
# dashboard.json 配置片段
{
"templating": {
"list": [{
"name": "datacenter",
"query": "label_values(node_uname_info, datacenter)"
}, {
"name": "host",
"query": "label_values(node_uname_info{datacenter=\"$datacenter\"}, instance)"
}]
}
}
推荐实践
- 从简单开始:先使用Time Series和Stat面板
- 合理配色:使用内置调色板保持一致性
- 文档化:为复杂面板添加说明注释
- 版本控制:导出JSON配置到Git管理
- 测试告警:先设置宽松阈值验证
需要我演示具体的面板配置或解答某个具体场景的可视化需求吗?