Grafana可观测性平台搭建指南
2024.09.04
7 min
3.0k 字
// 目录 · contents
前言
可观测性(Observability)的三大支柱是指标(Metrics)、日志(Logs)和链路追踪(Traces)。Grafana生态提供了一站式的可观测性解决方案:Grafana用于可视化,Prometheus用于指标,Loki用于日志,Tempo用于追踪。本文将系统讲解如何搭建完整的可观测性平台。
可观测性三大支柱
graph TB
subgraph Observability["可观测性三大支柱"]
Metrics["指标 (Metrics)<br>Prometheus<br>时序数据,数值型"]
Logs["日志 (Logs)<br>Loki<br>事件记录,文本型"]
Traces["追踪 (Traces)<br>Tempo<br>请求链路,分布式"]
end
App["应用程序"] --> Metrics
App --> Logs
App --> Traces
Metrics --> Grafana["Grafana<br>统一可视化"]
Logs --> Grafana
Traces --> Grafana
Grafana --> Alert["告警"]
Grafana --> Dashboard["Dashboard"]
Grafana --> Explore["Explore"]
Grafana数据源配置
Prometheus数据源
1 | |
数据源关联
graph LR
subgraph Correlation["数据关联"]
M["Metrics<br>(Prometheus)"] --> |"exemplar"| T["Traces<br>(Tempo)"]
T --> |"tracesToLogs"| L["Logs<br>(Loki)"]
L --> |"derivedFields"| T
T --> |"tracesToMetrics"| M
end
style M fill:#E65100,color:#fff
style L fill:#1565C0,color:#fff
style T fill:#2E7D32,color:#fff
Dashboard设计
面板类型
Grafana提供多种面板类型:
| 面板类型 | 用途 | 适用数据 |
|---|---|---|
| Time Series | 时序折线图 | QPS、延迟、资源使用率 |
| Stat | 单值展示 | 当前值、总数 |
| Gauge | 仪表盘 | 百分比、利用率 |
| Bar Chart | 柱状图 | 分类对比 |
| Table | 表格 | 详细数据列表 |
| Heatmap | 热力图 | 延迟分布 |
| Logs | 日志面板 | Loki日志 |
| Node Graph | 拓扑图 | 服务依赖关系 |
Dashboard JSON模型
1 | |
Dashboard Provisioning
1 | |
变量(Variables)
变量使Dashboard具备交互能力和复用性:
1 | |
Loki日志聚合
Loki架构
graph TB
subgraph Sources["日志来源"]
Promtail["Promtail<br>(DaemonSet)"]
FluentBit["Fluent Bit"]
OTel["OpenTelemetry<br>Collector"]
end
subgraph Loki["Loki"]
Distributor["Distributor"]
Ingester["Ingester"]
Querier["Querier"]
QueryFrontend["Query Frontend"]
Compactor["Compactor"]
end
subgraph Storage["存储"]
Chunks["Chunks<br>(S3/GCS)"]
Index["Index<br>(BoltDB/TSDB)"]
end
Promtail --> Distributor
FluentBit --> Distributor
OTel --> Distributor
Distributor --> Ingester
Ingester --> Chunks
Ingester --> Index
Querier --> Chunks
Querier --> Index
QueryFrontend --> Querier
Compactor --> Index
Grafana["Grafana"] --> QueryFrontend
Promtail配置
1 | |
LogQL查询
1 | |
Tempo链路追踪
Tempo架构
graph TB
subgraph App["应用程序"]
SDK["OpenTelemetry SDK"]
end
subgraph OTelCol["OpenTelemetry Collector"]
Receiver["Receiver<br>(OTLP/Jaeger/Zipkin)"]
Processor["Processor<br>(Batch/Filter)"]
Exporter["Exporter"]
end
subgraph Tempo["Grafana Tempo"]
Dist["Distributor"]
Ing["Ingester"]
QFE["Query Frontend"]
Que["Querier"]
Comp["Compactor"]
end
subgraph Store["Object Storage"]
S3["S3/GCS/Azure Blob"]
end
SDK --> Receiver
Receiver --> Processor
Processor --> Exporter
Exporter --> Dist
Dist --> Ing
Ing --> S3
QFE --> Que
Que --> S3
Comp --> S3
Grafana["Grafana"] --> QFE
OpenTelemetry配置
1 | |
应用程序集成
1 | |
Grafana Stack(LGTM)部署
使用Docker Compose快速搭建完整的Grafana Stack:
1 | |
graph LR
subgraph LGTM["Grafana LGTM Stack"]
L["Loki<br>Logs"]
G["Grafana<br>Visualization"]
T["Tempo<br>Traces"]
M["Mimir/Prometheus<br>Metrics"]
end
App["Application"] --> OTel["OpenTelemetry<br>Collector"]
OTel --> L
OTel --> T
OTel --> M
L --> G
T --> G
M --> G
style G fill:#F46800,color:#fff
style L fill:#1565C0,color:#fff
style T fill:#2E7D32,color:#fff
style M fill:#E65100,color:#fff
Grafana告警
1 | |
Dashboard设计最佳实践
- USE方法(基础设施):Utilization(利用率)、Saturation(饱和度)、Errors(错误)
- RED方法(微服务):Rate(请求率)、Errors(错误率)、Duration(延迟)
- 四个黄金信号(SRE):延迟、流量、错误、饱和度
graph TB
subgraph RED["RED方法 - 微服务Dashboard"]
Rate["Rate<br>请求速率 (QPS)"]
Errors["Errors<br>错误率 (%)"]
Duration["Duration<br>延迟 (P50/P95/P99)"]
end
subgraph USE["USE方法 - 基础设施Dashboard"]
Utilization["Utilization<br>CPU/内存/磁盘利用率"]
Saturation["Saturation<br>队列深度/等待数"]
ErrRate["Errors<br>硬件/软件错误"]
end
总结
构建完整的可观测性平台需要将指标、日志和追踪三大支柱有机结合:
- Prometheus负责指标采集和告警评估
- Loki负责日志聚合,通过标签实现高效查询
- Tempo负责分布式追踪,支持全量存储
- Grafana作为统一可视化层,关联三大数据源
- OpenTelemetry作为统一的数据采集标准
关键是建立数据之间的关联:从指标异常钻取到相关日志,从日志中的TraceID跳转到完整链路。这种端到端的关联能力是快速定位和排查问题的核心。
$ echo "comments" · 评论