Grafana集成 #

一、Grafana概述 #

1.1 什么是Grafana #

text
Grafana定义:

┌─────────────────────────────────────────────┐
│ Grafana                                     │
├─────────────────────────────────────────────┤
│ • 开源的数据可视化平台                      │
│ • 支持多种数据源                            │
│ • 丰富的可视化组件                          │
│ • 告警和通知功能                            │
│ • 仪表盘共享                                │
└─────────────────────────────────────────────┘

核心功能:
├── 数据可视化
├── 仪表盘管理
├── 告警配置
├── 用户管理
└── 插件扩展

1.2 安装Grafana #

bash
# Docker安装
docker run -d \
    --name grafana \
    -p 3000:3000 \
    -v grafana_data:/var/lib/grafana \
    grafana/grafana

# 访问Web界面
# http://localhost:3000
# 默认用户名/密码:admin/admin

二、配置数据源 #

2.1 添加Prometheus数据源 #

text
配置步骤:

1. 登录Grafana
2. 进入 Configuration → Data Sources
3. 点击 Add data source
4. 选择 Prometheus
5. 配置连接信息:
   • Name: Prometheus
   • URL: http://prometheus:9090
   • Access: Server (default)
6. 点击 Save & Test

2.2 数据源配置选项 #

text
数据源配置选项:

┌─────────────────────────────────────────────┐
│ HTTP设置                                    │
├─────────────────────────────────────────────┤
│ • URL: Prometheus地址                       │
│ • Access: 访问方式                          │
│ • Auth: 认证方式                            │
└─────────────────────────────────────────────┘

┌─────────────────────────────────────────────┐
│ Prometheus设置                              │
├─────────────────────────────────────────────┤
│ • Scrape interval: 采集间隔                 │
│ • Query timeout: 查询超时                   │
│ • HTTP Method: HTTP方法                     │
└─────────────────────────────────────────────┘

┌─────────────────────────────────────────────┐
│ 高级设置                                    │
├─────────────────────────────────────────────┤
│ • Manage alerts via Alertmanager            │
│ • Default editor: 默认编辑器                │
└─────────────────────────────────────────────┘

三、创建仪表盘 #

3.1 创建新仪表盘 #

text
创建步骤:

1. 点击 + → Dashboard
2. 选择 Add new panel
3. 配置查询:
   • 选择数据源
   • 输入PromQL表达式
4. 配置可视化:
   • 选择图表类型
   • 配置显示选项
5. 保存仪表盘

3.2 面板配置 #

text
面板配置选项:

┌─────────────────────────────────────────────┐
│ 查询配置                                    │
├─────────────────────────────────────────────┤
│ • PromQL表达式                              │
│ • Legend(图例)格式                        │
│ • Min step(最小步长)                      │
│ • Resolution(分辨率)                      │
└─────────────────────────────────────────────┘

┌─────────────────────────────────────────────┐
│ 可视化配置                                  │
├─────────────────────────────────────────────┤
│ • 图表类型                                  │
│ • 标题和描述                                │
│ • 坐标轴设置                                │
│ • 图例设置                                  │
│ • 阈值线                                    │
└─────────────────────────────────────────────┘

┌─────────────────────────────────────────────┐
│ 显示选项                                    │
├─────────────────────────────────────────────┤
│ • 颜色方案                                  │
│ • 填充透明度                                │
│ • 线条样式                                  │
│ • 数据格式                                  │
└─────────────────────────────────────────────┘

3.3 常用查询示例 #

promql
# CPU使用率
100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

# 内存使用率
(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100

# 磁盘使用率
(1 - (node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"} / node_filesystem_size_bytes{fstype!~"tmpfs|overlay"})) * 100

# 网络流量
rate(node_network_receive_bytes_total{device!~"lo|veth.*"}[5m])
rate(node_network_transmit_bytes_total{device!~"lo|veth.*"}[5m])

# HTTP请求速率
sum(rate(http_requests_total[5m])) by (service)

# 错误率
sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) * 100

# P99延迟
histogram_quantile(0.99, sum by(le) (rate(http_request_duration_seconds_bucket[5m])))

四、变量使用 #

4.1 创建变量 #

text
变量创建步骤:

1. 进入仪表盘设置
2. 选择 Variables
3. 点击 Add variable
4. 配置变量:
   • Name: 变量名
   • Type: 变量类型
   • Query: 查询表达式
5. 保存

4.2 变量类型 #

text
变量类型:

┌─────────────────────────────────────────────┐
│ Query变量                                   │
├─────────────────────────────────────────────┤
│ • 从数据源查询值                            │
│ • 示例:label_values(up, job)               │
└─────────────────────────────────────────────┘

┌─────────────────────────────────────────────┐
│ Custom变量                                  │
├─────────────────────────────────────────────┤
│ • 手动定义值列表                            │
│ • 示例:production,staging,development      │
└─────────────────────────────────────────────┘

┌─────────────────────────────────────────────┐
│ Constant变量                                │
├─────────────────────────────────────────────┤
│ • 固定值                                    │
│ • 用于模板化                                │
└─────────────────────────────────────────────┘

┌─────────────────────────────────────────────┐
│ Text box变量                                │
├─────────────────────────────────────────────┤
│ • 用户输入文本                              │
│ • 用于过滤                                  │
└─────────────────────────────────────────────┘

4.3 变量使用 #

promql
# 使用变量过滤
up{job="$job"}
http_requests_total{service="$service", instance=~"$instance"}

# 变量语法
$variable_name        # 简单引用
${variable_name}      # 带花括号引用
[[variable_name]]     # 展开引用

五、导入仪表盘 #

5.1 从Grafana.com导入 #

text
导入步骤:

1. 访问 https://grafana.com/grafana/dashboards
2. 搜索需要的仪表盘
3. 复制仪表盘ID
4. 在Grafana中点击 + → Import
5. 粘贴ID并点击 Load
6. 选择数据源
7. 点击 Import

推荐仪表盘:
• Node Exporter Full: 1860
• Prometheus 2.0 Overview: 3662
• Kubernetes Cluster: 315

5.2 从JSON文件导入 #

bash
# 导出仪表盘JSON
# 在仪表盘设置中选择 JSON Model → Copy to Clipboard

# 导入JSON文件
# 点击 + → Import → Upload JSON file

六、告警配置 #

6.1 配置告警规则 #

text
告警配置步骤:

1. 进入面板编辑
2. 切换到 Alert 标签
3. 点击 Create Alert
4. 配置告警规则:
   • Name: 告警名称
   • Evaluate every: 评估频率
   • Conditions: 告警条件
5. 配置通知渠道
6. 保存

6.2 通知渠道配置 #

text
通知渠道类型:

├── Email
├── Slack
├── PagerDuty
├── Webhook
├── Telegram
├── DingTalk
└── 企业微信

配置步骤:
1. 进入 Alerting → Notification channels
2. 点击 Add channel
3. 选择类型并配置
4. 测试并发送

七、最佳实践 #

7.1 仪表盘组织 #

text
仪表盘组织建议:

┌─────────────────────────────────────────────┐
│ 层级结构                                    │
├─────────────────────────────────────────────┤
│ • 文件夹:按环境/团队分类                   │
│ • 仪表盘:按服务/功能分类                   │
│ • 面板:按指标类型分类                      │
└─────────────────────────────────────────────┘

示例:
├── Infrastructure
│   ├── Node Overview
│   ├── Network Overview
│   └── Storage Overview
├── Applications
│   ├── API Overview
│   ├── Database Overview
│   └── Cache Overview
└── Business
    ├── User Metrics
    └── Order Metrics

7.2 查询优化 #

text
查询优化建议:

1. 使用变量减少仪表盘数量
2. 合理设置查询范围
3. 使用Recording Rules预计算
4. 避免高基数标签
5. 使用合适的聚合函数

八、总结 #

Grafana集成要点:

功能 说明
数据源 配置Prometheus连接
仪表盘 创建可视化面板
变量 动态过滤数据
告警 配置告警规则

常用操作:

操作 路径
添加数据源 Configuration → Data Sources
创建仪表盘 + → Dashboard
导入仪表盘 + → Import
配置变量 Dashboard Settings → Variables

下一步,让我们学习仪表盘设计!

最后更新:2026-03-27