Grafana部署与数据源接入配置
Grafana是云原生可观测性的可视化层,将Prometheus、Loki、InfluxDB等数据源的指标数据转化为直观的看板和告警。相比直接查看指标API返回的原始数据,Grafana提供变量模板、注解、联动钻取等交互能力,让运维团队快速定位问题。生产环境推荐使用PostgreSQL作为Grafana后端数据库,替代默认SQLite以支持高可用部署。
# Docker部署Grafana
docker run -d --name=grafana \
-p 3000:3000 \
-e GF_SECURITY_ADMIN_USER=admin \
-e GF_SECURITY_ADMIN_PASSWORD=StrongPass123 \
-e GF_DATABASE_TYPE=postgres \
-e GF_DATABASE_HOST=pg:5432 \
-e GF_DATABASE_NAME=grafana \
-e GF_DATABASE_USER=grafana \
-e GF_DATABASE_PASSWORD=grafana_db_pass \
-v grafana-storage:/var/lib/grafana \
grafana/grafana:latest
数据源配置支持多种方式:UI界面手动添加、provisioning配置文件自动加载、API批量创建。provisioning方式适合GitOps流程,配置文件放在/etc/grafana/provisioning/datasources/目录下,Grafana启动时自动加载。
# /etc/grafana/provisioning/datasources/prometheus.yaml
apiVersion: 1
datasources:
- name: Prometheus-Prod
type: prometheus
access: proxy
url: http://prometheus:9090
isDefault: true
editable: false
- name: Loki-Logs
type: loki
access: proxy
url: http://loki:3100
editable: false
Dashboard看板设计与变量模板技巧
好的看板设计遵循”概览到细节”的层级结构:顶层是关键业务指标概览,点击可钻取到组件级别,再钻取到实例级别。变量(Variables)是实现看板复用的核心机制——定义一组变量,看板中所有Panel的查询自动适配变量值,无需为每个实例维护独立看板。
# 变量定义示例
# 变量名: instance
# 查询: label_values(up, instance)
# 效果: 顶部出现下拉菜单,选择不同实例,看板所有图表自动切换
# 多级联动变量
# 变量1: job -> label_values(up, job)
# 变量2: instance -> label_values(up{job="$job"}, instance)
# 选择job后,instance下拉菜单只显示该job下的实例
面板类型选择:时间序列(Time Series)适合CPU/内存等随时间变化的指标;Stat面板显示单个数值和趋势箭头,适合SLA达成率、在线用户数;Table面板适合多维度对比;Heatmap适合延迟分布;Logs面板直接查看日志(需Loki数据源)。每个面板设置合理的阈值颜色,正常绿色、警告黄色、异常红色,一目了然。
告警规则配置与Unified Alerting架构
Grafana Unified Alerting统一管理多数据源告警,替代原先各数据源独立告警的碎片化方案。告警架构:Alert Rule定义触发条件,Contact Point定义通知渠道,Notification Policy定义路由规则,Silence定义静默时段。
# Alert Rule示例:API P99延迟超阈值
# 数据源: Prometheus
# 表达式: histogram_quantile(0.99, rate(http_request_duration_seconds_bucket{job="api-server"}[5m]))
# 条件: IS ABOVE 2 (秒)
# 评估间隔: 每30秒评估一次
# For持续时间: 2分钟(持续2分钟超阈值才触发,避免抖动)
Contact Point支持Email、Slack、钉钉、Webhook、企业微信等通知渠道。钉钉机器人需要创建Webhook URL配置为Contact Point。Notification Policy通过标签路由告警到不同团队:severity=critical发电话,severity=warning发钉钉,team=frontend只发给前端组。
看板Provisioning与GitOps自动化管理
手动在UI创建的看板难以版本管理和审计。生产环境推荐将看板JSON导出后存入Git仓库,通过provisioning自动同步。导出方式:看板页面 -> Settings -> JSON Model,复制保存为文件。
# /etc/grafana/provisioning/dashboards/default.yaml
apiVersion: 1
providers:
- name: 'default'
orgId: 1
folder: 'Infrastructure'
type: file
disableDeletion: false
editable: true
options:
path: /var/lib/grafana/dashboards
foldersFromFilesStructure: true
使用Grafonnet(Jsonnet库)可以代码化定义看板,支持变量、循环、继承,比手写JSON更易维护。团队协作流程:开发在看板JSON中修改 -> Git提交 -> CI自动验证JSON格式 -> 部署到Grafana。看板变更可追溯,回滚方便。
多集群看板与联邦查询实战
管理多个Kubernetes集群或数据中心时,每个集群部署独立的Prometheus采集数据,Grafana接入多个Prometheus数据源。通过变量切换数据源实现同一看板查看不同集群:
# 变量定义
# 变量名: datasource
# 类型: Datasource
# 数据源类型: Prometheus
# 查询中的数据源引用: 使用 $datasource 替代硬编码数据源名
跨集群对比场景使用Grafana的Mixed数据源:一个面板中同时查询多个数据源的指标,如对比A集群和B集群的CPU利用率。Grafana支持在面板查询中逐条指定数据源,不同查询行使用不同数据源,结果在同一图表中叠加显示。
性能优化与看板加载加速
看板加载慢的常见原因:查询时间范围过大、Panel数量过多、PromQL查询未优化。优化手段:设置合理的默认时间范围为最近1小时而非6小时;使用变量限制查询范围而非全量扫描;在Prometheus侧配置recording rules预计算高频查询;Grafana启用查询缓存,配置GF_QUERY_CACHE_ENABLED=true;面板设置Min interval避免过高分辨率查询。
Grafana本身的高可用部署:多实例+共享PostgreSQL数据库+负载均衡。会话粘性(session affinity)配置在负载均衡层,确保WebSocket连接不中断。Grafana 10+支持仪表板快照功能,将看板状态导出为只读快照供外部查看。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/grafana-ke-shi-hua-kan-ban-da-jian-yu-duo-shu-ju-yuan-gao/