Grafana Error database is locked

发布时间 2023-11-07 14:56:32作者: 热气球!

? 问题描述

公司内有多套Prometheus+Grafana环境,只有核心业务环境中出现了failed to build query 'A': [sqlstore.max-retries-reached] retry 1: database is locked的问题。并且其他环境中的Grafana版本比该环境的版本低,从未出现过该问题。

该问题时不时就会出现并且过段时间自己就会恢复,只是在触发时会将告警发出来,比较烦人。

出现 database is locked问题的环境信息如下:

  • grafana版本:Grafana v9.5.2 (cfcea75916)
  • 操作系统:Red Hat Enterprise Linux Server 7.6 (Maipo)

? 问题现象

告警群内的现象

Grafana日志

1520 logger=sqlstore.transactions rule_uid=d25f891d-485d-46b1-a2c1-a228f9707e08 org_id=1 t=2023-11-07T10:57:13.506604076+08:00 level=info msg="Database l     ocked, sleeping then retrying" error="database is locked" retry=1 code="database is locked"
1521 logger=ngalert.scheduler rule_uid=d25f891d-485d-46b1-a2c1-a228f9707e08 org_id=1 version=14 fingerprint=1b5605477d584793 attempt=0 now=2023-11-07T10:     57:00+08:00 t=2023-11-07T10:57:13.506673168+08:00 level=error msg="Failed to build rule evaluator" error="failed to build query 'A': [sqlstore.max-r     etries-reached] retry 1: database is locked"

? 尝试解决

参考文档:

? Grafana 日志“数据库已锁定” ·期刊 #16638 ·格拉法纳/格拉法纳 (github.com)

? SQLite:使用日志模式 WAL ·期刊 #17912 ·格拉法纳/格拉法纳 (github.com)

? sqlstore.max-retries-reached] 重试 1:数据库已锁定 ·期刊 #73018 ·格拉法纳/格拉法纳 (github.com)

? 并不是版本的问题,该文容易误导人Database is locked - Grafana / Configuration - Grafana Labs Community Forums

参考marefr的评论:SQLite:使用日志模式 WAL ·期刊 #17912 ·格拉法纳/格拉法纳 (github.com)

要以日志模式 WAL 运行 SQLite,您当前需要使用数据库设置:connection_string

[database]
type=sqlite3
connection_string=file:data/grafana.db?cache=private&mode=rwc&_journal_mode=WAL

我遇到了和lafrech一样的问题:无法启动Grafana。

我只是尝试过,但遇到了同样的错误。关于创建数据库的错误消息使我认为connection_string没有正确解释,并且 grafana 找不到我的 grafana.db。

这可能特定于我的设置,我不想为这个问题发送更多噪音。然而,我有点被困住了,因为我找不到更多关于connection_string的信息。

因此,我建议继续使用 #17912。它很旧,但从那时起情况似乎没有改变,修复并不简单。至少对我来说还不够。

最后选择直接修改splite3中的配置

sqlite3 grafana.db 'pragma journal_mode=wal;'

完整过程如下

cd /var/lib/grafana/
du -sh grafana.db 
cp grafana.db grafana.db_bak
systemctl stop grafana-server.service 
sqlite3 grafana.db 'pragma journal_mode=wal;'
systemctl start grafana-server.service 
systemctl status grafana-server.service 

? 后续步骤

我不确定是否已经解决问题,后续我将观察一段时间并以评论的形式反馈在该博客下。