其他
用 Grafana 构建生产级监控仪表盘时如何设计布局…
在需要为系统/应用指标搭建 Grafana 实时可视化仪表盘时,提供从设计原则到面板配置、变量、告警和代码化部署的完整做法。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 35/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 38/100 ×0.15
适用场景
用 Grafana 构建生产级监控仪表盘特定
解决思路
- 按信息层级组织仪表盘:顶部放关键指标大数字(Big Numbers),中部放关键趋势(Time Series),底部放详细指标(Tables/Heatmaps)。
- 对服务类指标采用 RED 方法:Rate(每秒请求数)、Errors(错误率)、Duration(延迟/响应时间)。
- 对资源类指标采用 USE 方法:Utilization(资源忙碌时间百分比)、Saturation(队列长度/等待时间)、Errors(错误计数)。
- 构建 API 监控仪表盘:设置 title、tags、timezone 为 browser、refresh 为 30s,并用 gridPos 布局面板。
- 请求速率面板使用表达式 sum(rate(http_requests_total[5m])) by (service),legendFormat 设为 {{service}}。
- 错误率面板使用表达式 (sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m]))) * 100,并配置 alert 条件(evaluator 为 gt、params 为 5、query 为 ["A","5m","now"])。
- P95 延迟面板使用表达式 histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le, service))。
- Stat 面板(单值)配置 reduceOptions.calcs 为 ["lastNotNull"],并在 fieldConfig.defaults.thresholds 中设置绝对阈值颜色(0 绿、80 黄、90 红)。
- Time Series 图表面板配置 yaxes 格式,例如 CPU 使用率用 percent、max 100、min 0,表达式为 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)。
- Table 面板使用 instant: true 和 format: table,并通过 transformations 的 organize 排除 Time 字段、重命名 instance/job/Value 列。
- Heatmap 面板使用 format: heatmap、dataFormat: tsbuckets,表达式为 sum(rate(http_request_duration_seconds_bucket[5m])) by (le),yAxis.format 设为 s。
- 用 Query 变量实现动态筛选:定义 namespace 变量(query 为 label_values(kube_pod_info, namespace),refresh 为 1,multi 为 false)和 service 变量(query 为 label_values(kube_service_info{namespace="$namespace"}, service),refresh 为 1,multi 为 true)。
- 在查询中引用变量,例如 sum(rate(http_requests_total{namespace="$namespace", service=~"$service"}[5m]))。
- 在仪表盘内配置告警:设置 name、conditions(evaluator、operator、query、reducer)、executionErrorState 为 alerting、for 为 5m、frequency 为 1m、message、noDataState 为 no_data、notifications 指定 uid。
- 通过 dashboards.yml 进行仪表盘 provisioning:配置 apiVersion、providers(name、orgId、folder、type 为 file、disableDeletion、updateIntervalSeconds、allowUiUpdates、options.path)。
- 基础设施仪表盘包含关键面板:每节点 CPU 利用率、每节点内存使用、磁盘 I/O、网络流量、按 namespace 的 Pod 数量、节点状态。
- 数据库仪表盘包含关键面板:每秒查询数、连接池使用、查询延迟(P50/P95/P99)、活跃连接、数据库大小、复制延迟、慢查询。
- 应用仪表盘包含关键面板:请求速率、错误率、响应时间(百分位)、活跃用户/会话、缓存命中率、队列长度。
- 遵循最佳实践:从模板(Grafana 社区仪表盘)开始;面板和变量命名一致;用行分组相关指标;设置合适时间范围(默认最近 6 小时);使用变量提升灵活性;为面板添加描述;正确配置单位;设置有意义的阈值颜色;跨仪表盘使用一致颜色;在不同时间范围下测试。
- 用 Terraform 将仪表盘代码化:定义 grafana_dashboard 资源(config_json 引用 JSON 文件、folder 引用 grafana_folder)和 grafana_folder 资源(title 为 Production Monitoring)。
- 用 Ansible 部署仪表盘:使用 copy 模块将 dashboards/*.json 复制到 /etc/grafana/dashboards/,并 notify restart grafana。
适用边界 · 注意事项
- 不适用于不使用 Grafana 或 Prometheus 生态的监控场景。
- 不适用于仅需一次性临时查看指标、无需长期维护仪表盘的场景。