Grafana部署架构与数据源接入配置
Grafana是开源的数据可视化与监控平台,在网站运维领域广泛应用于构建可观测性体系。Grafana本身不存储数据,通过对接多种数据源实现指标、日志和链路追踪的统一可视化。其架构采用前后端分离设计,前端基于React构建可视化面板,后端通过Go语言实现数据源代理和告警引擎。
Grafana支持的数据源类型包括Prometheus(指标)、Loki(日志)、Tempo/Jaeger(链路追踪)、Elasticsearch、MySQL、PostgreSQL、InfluxDB等数十种。通过数据源代理机制,Grafana将前端查询请求转发到后端数据源,在面板层面实现多数据源的联合展示。
Docker部署Grafana的配置如下:
docker run -d \
--name grafana \
-p 3000:3000 \
-v grafana-storage:/var/lib/grafana \
-e GF_SECURITY_ADMIN_PASSWORD=admin \
-e GF_USERS_ALLOW_SIGN_UP=false \
grafana/grafana:latest
生产环境建议通过grafana.ini或环境变量配置SMTP告警通道、LDAP/OAuth认证和HTTPS加密。数据源接入通过Grafana API或Web界面完成,Prometheus数据源的典型配置项包括URL、认证信息和查询超时时间。
Prometheus数据源对接与PromQL查询配置
Prometheus是Grafana最常用的指标数据源,通过PromQL查询语言实现灵活的指标检索与聚合计算。在Grafana中配置Prometheus数据源后,可以在面板中使用PromQL表达式构建可视化图表。
# 通过API添加Prometheus数据源
curl -X POST http://localhost:3000/api/datasources \
-H "Content-Type: application/json" \
-u admin:admin \
-d '{
"name": "Prometheus",
"type": "prometheus",
"url": "http://prometheus:9090",
"access": "proxy",
"isDefault": true,
"jsonData": {
"httpMethod": "POST",
"timeInterval": "15s"
}
}'
在面板中常用的PromQL查询模式包括:rate计算请求速率、histogram_quantile计算分位数延迟、sum by聚合多维度指标。例如CPU使用率面板的查询表达式:
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
监控面板设计与变量模板化配置
Grafana Dashboard由一个或多个面板组成,每个面板支持Graph、Stat、Table、Heatmap、Gauge等多种可视化类型。面板设计应遵循”从全局到局部”的原则:顶部放置关键指标概览,中部放置趋势图,底部放置详细表格。
变量(Variables)是Dashboard模板化的核心功能,通过变量可以实现面板的动态过滤。常见变量类型包括Query(从数据源查询值)、Custom(自定义值列表)、Interval(时间间隔)和Datasource(数据源切换)。
# 实例选择变量 - 从Prometheus查询所有实例
query: label_values(node_cpu_seconds_total, instance)
# 应用选择变量 - 从标签查询
query: label_values(up{job="node-exporter"}, job)
# 在面板查询中引用变量
rate(node_cpu_seconds_total{instance=~"$instance", mode!="idle"}[$__rate_interval])
$__rate_interval是Grafana内置变量,根据面板时间范围自动计算合适的速率间隔,避免手动指定固定间隔导致高频或低频数据采样问题。
面板之间的关联通过Dashboard Links和Data Links实现。Dashboard Links可以在当前面板中跳转到其他Dashboard并传递变量参数,Data Links则在数据点上添加超链接,跳转到外部系统或日志查询页面。
告警规则配置与通知渠道集成
Grafana 8.0后内置了统一的告警引擎,支持从多种数据源创建告警规则。告警系统由三部分组成:Alert Rule(告警规则)、Contact Point(通知渠道)和Notification Policy(通知策略)。
创建告警规则的API调用:
# 创建告警规则 - CPU使用率超过80%持续5分钟
curl -X POST http://localhost:3000/api/v1/provisioning/alert-rules \
-H "Content-Type: application/json" \
-u admin:admin \
-d '{
"uid": "cpu-high-alert",
"title": "CPU使用率过高",
"condition": "B",
"data": [{
"refId": "A",
"queryType": "",
"relativeTimeRange": {"from": 300, "to": 0},
"datasourceUid": "prometheus-uid",
"model": {
"expr": "100 - (avg by (instance) (rate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100)",
"intervalMs": 1000,
"maxDataPoints": 43200
}
}],
"evalData": {
"B": {"type": "threshold", "expression": 80}
},
"for": "5m",
"annotations": {"summary": "CPU使用率超过80%"},
"labels": {"severity": "warning", "team": "ops"}
}'
通知渠道支持钉钉、企业微信、飞书、Slack、Email、Webhook等。配置通知策略时可以基于告警标签实现路由分发,例如将severity=critical的告警发送到值班群组,severity=warning发送到监控群组。
# 钉钉通知渠道配置
{
"type": "dingding",
"settings": {
"url": "https://oapi.dingtalk.com/robot/send?access_token=xxx",
"messageType": "markdown"
}
}
通知策略支持静默规则(Silencing)和分组(Grouping),在故障应急响应场景中避免告警风暴。建议按服务和告警级别设置分组等待时间(Group Wait)和分组间隔(Group Interval),平衡通知时效性与噪音控制。
多数据源联合查询与仪表盘编排
Grafana支持在单个面板中混合多个数据源,通过Mixed数据源实现跨系统指标对比。例如将Prometheus的CPU指标与Loki的日志数据在同一个Dashboard中展示,便于在故障排查时快速关联指标异常与日志事件。
在大规模监控体系中,建议按业务域组织Dashboard文件夹结构:基础设施层(主机、网络、存储)、中间件层(数据库、消息队列、缓存)、应用层(API延迟、错误率、吞吐量)、业务层(订单量、用户活跃度)。每层Dashboard通过变量和链接实现层级下钻,形成完整的可观测性视图。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/grafana-ke-guan-ce-xing-jian-kong-mian-ban-she-ji-yu-duo/