宝塔面板监控图表空白通常因SQLite数据库损坏、权限异常或磁盘资源不足。可依次尝试:一、重启监控服务并重建数据库;二、用sqlite3修复表结构;三、重装监控插件;四、修正bt_monitor.db属主与权限;五、清理磁盘空间及inode。

如果您登录宝塔面板后发现首页的CPU、内存、磁盘IO等监控图表为空白或持续显示“加载中”,通常是因为监控插件所依赖的SQLite数据库损坏、权限异常或数据表结构缺失。以下是修复宝塔面板监控插件数据库的多种方法:
一、重启监控服务并重建数据库文件
该方法适用于数据库文件被意外删除或损坏,但插件服务本身未崩溃的情况。宝塔监控插件(bt-monitor)会尝试在启动时自动初始化数据库,但需确保运行环境与文件权限正确。
1、通过SSH连接服务器,执行命令停止监控服务:
systemctl stop bt-monitor
2、备份当前监控数据库(如有):
cp /www/server/panel/plugin/monitor/bt_monitor.db /www/server/panel/plugin/monitor/bt_monitor.db.bak
3、删除原数据库文件:
rm -f /www/server/panel/plugin/monitor/bt_monitor.db
4、重新启动监控服务:
systemctl start bt-monitor
5、等待约60秒后,刷新面板首页,观察图表是否恢复加载。注意:此操作将清空历史监控数据,仅保留重启后的采集记录
二、修复SQLite数据库文件结构
当数据库文件存在但内部表(如cpu、memory、network)缺失或损坏时,直接重建会导致数据丢失;此时应优先尝试SQL修复,保留已有采集点。
1、进入监控插件数据库目录:
cd /www/server/panel/plugin/monitor/
2、使用sqlite3检查数据库完整性:
sqlite3 bt_monitor.db "PRAGMA integrity_check;"
3、若返回结果非"ok",执行修复命令:
sqlite3 bt_monitor.db ".recover" | sqlite3 bt_monitor.db.recovered && mv bt_monitor.db.recovered bt_monitor.db
4、验证关键数据表是否存在:
sqlite3 bt_monitor.db ".tables"
5、若输出中缺少cpu、memory、disk、network等表,手动创建cpu表示例:
sqlite3 bt_monitor.db "CREATE TABLE IF NOT EXISTS cpu (id INTEGER PRIMARY KEY AUTOINCREMENT, time INTEGER, used REAL, system REAL, user REAL, iowait REAL);"
执行建表语句前请确认表名与字段名与宝塔v8.0+监控插件实际schema一致,错误结构将导致服务无法写入
三、重装监控插件并同步配置
当数据库反复损坏或插件核心文件异常时,重装可替换损坏的二进制与脚本,同时保留原有采集配置(如采集间隔、告警开关),避免重复设置。
1、在SSH中执行卸载命令:
bt 14
2、选择对应编号卸载“监控报表”插件(通常为选项1或2,具体以面板提示为准)
3、卸载完成后,执行安装命令:
bt 13
4、选择“监控报表”并确认安装
5、安装完毕后,执行强制刷新采集缓存:
python /www/server/panel/plugin/monitor/index.py flush
重装不会删除/www/server/panel/plugin/monitor/目录下的bt_monitor.db文件,旧数据在新插件兼容时可自动读取
四、修正数据库文件权限与属主
监控插件以www用户身份运行,若bt_monitor.db文件属主为root或权限为600,则www用户无法写入数据,导致图表无更新。
1、检查当前数据库文件权限:
ls -l /www/server/panel/plugin/monitor/bt_monitor.db
2、若属主非www,执行修正:
chown www:www /www/server/panel/plugin/monitor/bt_monitor.db
3、若权限非644,执行修正:
chmod 644 /www/server/panel/plugin/monitor/bt_monitor.db
4、重启监控服务使权限生效:
systemctl restart bt-monitor
权限错误是生产环境中最常被忽略的原因,尤其在手动复制或迁移面板数据后极易发生
五、检查磁盘空间与inode占用
当根分区或/www所在分区的可用空间低于50MB,或inode耗尽时,SQLite无法完成事务提交,表现为数据库写入静默失败,图表停滞在最后有效时间点。
1、检查磁盘使用率:
df -h
2、检查inode使用率:
df -i
3、若/dev/vda1等根分区Use% ≥95% 或 IUse% ≥95%,清理日志:
find /www/wwwlogs -name "*.log" -mtime +7 -delete
4、清理宝塔任务日志:
rm -f /www/server/panel/logs/*.log
5、确认清理后重启监控服务:
systemctl restart bt-monitor
即使df显示剩余空间充足,也必须检查inode——小文件(如每秒采集记录)极易快速耗尽inode配额










