Grafana可视化监控平台完整部署与实战指南
Grafana是一个开源的数据可视化和监控平台,支持多种数据源,提供强大的图表展示和告警功能。本文详细介绍在Rocky Linux 8上部署Grafana并与Zabbix集成的完整流程。
一、环境准备
1.1 系统要求
# 系统版本
cat /etc/redhat-release
# Rocky Linux release 8.10
# 最低硬件配置
# CPU: 2核
# 内存: 4GB
# 磁盘: 20GB
1.2 安装前置依赖
# 更新系统
sudo dnf update -y
# 安装必要工具
sudo dnf install -y wget curl vim
# 关闭SELinux(生产环境建议配置而非关闭)
sudo setenforce 0
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# 配置防火墙
sudo firewall-cmd --permanent --add-port=3000/tcp
sudo firewall-cmd --reload
二、Grafana安装部署
2.1 添加Grafana官方仓库
# 创建Grafana仓库配置
sudo tee /etc/yum.repos.d/grafana.repo <
2.2 安装Grafana
# 安装Grafana
sudo dnf install -y grafana
# 启动并设置开机自启
sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
# 检查服务状态
sudo systemctl status grafana-server
2.3 初始配置
# 编辑配置文件
sudo vim /etc/grafana/grafana.ini
# 关键配置项
[server]
protocol = http
http_port = 3000
domain = your-domain.com
root_url = %(protocol)s://%(domain)s:%(http_port)s/
[security]
admin_user = admin
admin_password = your-strong-password
[database]
type = mysql
host = localhost:3306
name = grafana
user = grafana
password = your-db-password
# 重启服务使配置生效
sudo systemctl restart grafana-server
三、Zabbix数据源集成
3.1 安装Zabbix插件
# 安装Grafana Zabbix插件
sudo grafana-cli plugins install alexanderzobnin-zabbix-app
# 重启Grafana
sudo systemctl restart grafana-server
3.2 配置Zabbix数据源
访问 http://your-server:3000
,使用管理员账号登录:
- 默认用户名:admin
- 默认密码:admin(首次登录需要修改)
配置步骤:
1. 进入 Configuration → Plugins
2. 搜索并启用 Zabbix 插件
3. 进入 Configuration → Data Sources
4. 点击 Add data source,选择 Zabbix
配置参数:
URL: http://zabbix-server/api_jsonrpc.php
Username: Admin
Password: zabbix
Trends: 启用
3.3 配置MySQL直连(可选)
# 在Zabbix服务器上创建只读用户
mysql -u root -p
CREATE USER 'grafana'@'%' IDENTIFIED BY 'grafana_password';
GRANT SELECT ON zabbix.* TO 'grafana'@'%';
FLUSH PRIVILEGES;
Grafana中添加MySQL数据源:
Host: zabbix-db-server:3306
Database: zabbix
User: grafana
Password: grafana_password
四、Dashboard创建与配置
4.1 导入预设Dashboard
Grafana社区提供了大量预设模板:
1. 访问 Dashboards → Manage → Import
2. 输入Dashboard ID(推荐模板):
- 1860: Node Exporter Full
- 7362: Zabbix Server Dashboard
- 11074: Zabbix Host Status
3. 选择数据源并导入
4.2 创建自定义Dashboard
#### 网络设备流量监控
{
"panel": {
"title": "交换机流量统计",
"type": "graph",
"datasource": "Zabbix",
"targets": [
{
"group": "Network Devices",
"host": "Core-Switch-01",
"application": "Network interfaces",
"item": "Interface GigabitEthernet0/1: Bits received",
"functions": []
}
],
"yaxes": [
{
"format": "bps",
"label": "流量"
}
]
}
}
#### CPU和内存监控
添加Gauge面板监控服务器资源:
- Query:
system.cpu.util[,idle]
- Visualization: Gauge
- Thresholds: 0-60 绿色,60-80 黄色,80-100 红色
4.3 变量配置
创建动态Dashboard,支持主机切换:
Name: hostname
Type: Query
Data source: Zabbix
Query: *
Regex: /.*/
Multi-value: 启用
Include All: 启用
在面板中使用变量:$hostname
五、告警配置
5.1 配置通知渠道
#### 企业微信告警
# 编辑配置文件
sudo vim /etc/grafana/grafana.ini
[alerting]
enabled = true
# 添加企业微信Webhook
在Grafana界面配置:
1. Alerting → Notification channels → Add channel
2. Type: Webhook
3. URL: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY
4. HTTP Method: POST
#### 邮件告警
[smtp]
enabled = true
host = smtp.qq.com:465
user = your-email@qq.com
password = your-smtp-password
skip_verify = true
from_address = your-email@qq.com
from_name = Grafana
5.2 创建告警规则
在Dashboard面板中配置告警:
Conditions:
WHEN avg() OF query(A, 5m, now) IS ABOVE 80
Notifications:
Send to: 企业微信告警
Message:
服务器 {{$hostname}} CPU使用率超过80%
当前值: {{$value}}%
触发时间: {{$time}}
六、面板类型与可视化
6.1 常用面板类型
#### Graph(折线图)
适用于时间序列数据展示:
- 网络流量趋势
- CPU/内存历史曲线
- 响应时间变化
#### Stat(统计值)
显示单一指标当前值:
- 在线主机数量
- 当前告警数量
- 磁盘使用率
#### Heatmap(热力图)
展示数据分布:
- 响应时间分布
- 流量密度图
#### Table(表格)
结构化数据展示:
SELECT
hostname,
ip,
cpu_usage,
memory_usage,
disk_usage
FROM hosts
WHERE status = 'active'
6.2 Panel配置技巧
#### 阈值配置
{
"thresholds": [
{"value": 0, "color": "green"},
{"value": 60, "color": "yellow"},
{"value": 80, "color": "red"}
]
}
#### 数值格式化
- bps: 比特率
- Bps: 字节率
- percent: 百分比
- ms: 毫秒
- short: 自动单位
七、性能优化
7.1 数据库优化
-- 优化MySQL配置
[mysqld]
max_connections = 500
innodb_buffer_pool_size = 2G
query_cache_size = 128M
-- 创建索引加速查询
CREATE INDEX idx_itemid_clock ON history (itemid, clock);
CREATE INDEX idx_itemid_clock_uint ON history_uint (itemid, clock);
7.2 Grafana配置优化
[database]
# 连接池大小
max_open_conn = 300
max_idle_conn = 100
[dataproxy]
# 超时设置
timeout = 60
keep_alive_seconds = 300
[rendering]
# 截图服务(用于告警附图)
server_url = http://localhost:8081/render
callback_url = http://localhost:3000/
7.3 查询优化建议
1. 使用合适的时间范围:避免查询过长时间跨度
2. 启用查询缓存:减少数据库压力
3. 使用Trends数据:历史数据使用Trends表而非History
4. 限制面板数量:单个Dashboard不超过20个面板
八、实战案例
8.1 网络监控Dashboard
创建完整的网络设备监控面板:
Row 1: 总览
- 在线设备数量(Stat)
- 总流量统计(Graph)
- 告警数量(Stat)
Row 2: 核心交换机
- CPU使用率(Gauge)
- 内存使用率(Gauge)
- 温度监控(Graph)
Row 3: 端口流量
- 上行流量Top10(Bar Gauge)
- 下行流量Top10(Bar Gauge)
Row 4: 告警事件
- 最近告警列表(Table)
8.2 服务器监控Dashboard
变量配置:
- $datacenter: 数据中心
- $server: 服务器主机名
面板配置:
1. 系统负载(Graph)
- 1分钟负载
- 5分钟负载
- 15分钟负载
2. 磁盘IO(Graph)
- Read IOPS
- Write IOPS
3. 网络连接(Stat)
- TCP连接数
- UDP连接数
4. 进程监控(Table)
- Top 10 CPU进程
- Top 10 内存进程
九、备份与恢复
9.1 数据备份
# 备份Grafana数据库
mysqldump -u root -p grafana > grafana_backup_$(date +%F).sql
# 备份配置文件和Dashboard
sudo tar czf grafana_config_$(date +%F).tar.gz /etc/grafana/ /var/lib/grafana/
# 自动化备份脚本
cat > /opt/scripts/backup_grafana.sh <<'SCRIPT'
#!/bin/bash
BACKUP_DIR=/backup/grafana
DATE=$(date +%Y%m%d)
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份数据库
mysqldump -u root -p'your-password' grafana | gzip > $BACKUP_DIR/grafana_db_$DATE.sql.gz
# 备份配置和Dashboard
tar czf $BACKUP_DIR/grafana_config_$DATE.tar.gz /etc/grafana /var/lib/grafana
# 保留30天备份
find $BACKUP_DIR -name "grafana_*" -mtime +30 -delete
echo "Backup completed: $DATE"
SCRIPT
chmod +x /opt/scripts/backup_grafana.sh
# 添加定时任务
crontab -e
0 2 * * * /opt/scripts/backup_grafana.sh
9.2 数据恢复
# 停止Grafana服务
sudo systemctl stop grafana-server
# 恢复数据库
mysql -u root -p grafana < grafana_backup_2024-01-15.sql
# 恢复配置文件
sudo tar xzf grafana_config_2024-01-15.tar.gz -C /
# 启动服务
sudo systemctl start grafana-server
十、安全加固
10.1 配置HTTPS
# 生成自签名证书(生产环境建议使用Let's Encrypt)
sudo mkdir -p /etc/grafana/ssl
cd /etc/grafana/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout grafana.key -out grafana.crt
# 修改配置
sudo vim /etc/grafana/grafana.ini
[server]
protocol = https
cert_file = /etc/grafana/ssl/grafana.crt
cert_key = /etc/grafana/ssl/grafana.key
# 重启服务
sudo systemctl restart grafana-server
# 配置防火墙
sudo firewall-cmd --permanent --add-port=3000/tcp
sudo firewall-cmd --reload
10.2 用户权限管理
[users]
allow_sign_up = false
allow_org_create = false
auto_assign_org = true
auto_assign_org_role = Viewer
[auth.anonymous]
enabled = false
[auth.basic]
enabled = true
10.3 配置反向代理
# Nginx配置
server {
listen 443 ssl http2;
server_name grafana.example.com;
ssl_certificate /etc/nginx/ssl/grafana.crt;
ssl_certificate_key /etc/nginx/ssl/grafana.key;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
十一、常见问题排查
11.1 Zabbix数据源连接失败
问题:无法连接到Zabbix API
排查步骤:
# 检查Zabbix API是否可访问
curl -X POST http://zabbix-server/api_jsonrpc.php \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"apiinfo.version","id":1}'
# 检查防火墙规则
sudo firewall-cmd --list-all
# 检查Grafana日志
sudo tail -f /var/log/grafana/grafana.log
11.2 Dashboard加载缓慢
优化方案:
1. 减少查询时间范围
2. 增加查询间隔
3. 使用Trends代替History
4. 启用查询缓存
11.3 告警未触发
检查项:
# 检查告警配置
cat /etc/grafana/grafana.ini | grep -A 10 "\[alerting\]"
# 查看告警日志
sudo grep -i alert /var/log/grafana/grafana.log
# 测试通知渠道
# Alerting → Notification channels → Test
十二、升级与维护
12.1 版本升级
# 备份现有数据
sudo systemctl stop grafana-server
sudo cp -r /var/lib/grafana /var/lib/grafana.backup
# 升级Grafana
sudo dnf update grafana
# 启动服务
sudo systemctl start grafana-server
# 验证版本
grafana-server -v
12.2 日志管理
# 配置日志轮转
sudo vim /etc/logrotate.d/grafana
/var/log/grafana/*.log {
daily
rotate 7
missingok
compress
delaycompress
notifempty
create 0640 grafana grafana
postrotate
systemctl reload grafana-server > /dev/null 2>&1 || true
endscript
}
总结
Grafana作为强大的可视化平台,与Zabbix结合可以构建完整的企业级监控解决方案。通过本文的部署和配置,你可以:
- 搭建生产级Grafana监控平台
- 创建专业的监控Dashboard
- 配置多渠道告警通知
- 实现数据的深度分析和可视化
关键要点:
- 合理规划数据源和Dashboard结构
- 优化查询性能避免卡顿
- 做好权限管理和安全防护
- 定期备份配置和数据
- 持续优化告警规则避免告警风暴
在实际使用中,建议根据业务需求定制Dashboard,并建立规范的命名和分类体系,方便团队协作和长期维护。