当前位置: 首页 > news >正文

grafana配置redis数据源预警误报问题(database is locked)

因为grafana上支持直接配置redis数据源的插件,可以直接在grafana上配置监控和告警,不用每台redis去配置监控客户端,比较契合我的redis集群多的需求,于是我就把redis监控从prometheus直接挪到了grafana上,开始用着挺正常的,但是用了一段时间后开始出现间歇性的瞬时告警,去排查各个redis并不存在性能瓶颈,我调整过数据源的超时时间、预警模板的一些时间参数,都没有好转,网上搜了很多处理方法,都没有解决。

后面怀疑监控本身问题,去查看了日志,每次告警的时间,刚好有下面这样的报错:

t=2025-10-27T01:01:12+0800 lvl=eror msg="Failed getting data source" logger=sqlstore err="database is locked" uid=uTCY4wRHk id=0 name= orgId=1
t=2025-10-27T01:01:13+0800 lvl=eror msg="Failed getting data source" logger=sqlstore err="database is locked" uid=cNsDV_LNk id=0 name= orgId=1

gitlab上面很早就有人提了这个问题:https://github.com/grafana/grafana/issues/16638

但是解决的方案千奇百怪,说是sqlite库问题,推荐调整sqlite库busy_timeout的(grafana默认用的sqlite库),我一个个试过了,default.ini中改参数的几种方法,根本不生效,由于sqlite库也不是很熟,好像不能直接客户端改配置,于是我考虑直接把sqlite库换成mysql。

1.首先准备一个mysql5.7的库,配置好grafana用户的权限

create user grafana@'127.0.0.1' identified by 'xxx';
grant all privileges on grafana.* to grafana@'127.0.0.1';
flush privileges;
2.安装一个工具:sqlite3-to-mysql

pip install sqlite3-to-mysql

3.通过这个工具把sqlite库导出到mysql库里

sqlite3mysql -f ./grafana.db -d grafana -ugrafana -p -h127.0.0.1

4.还得改下某些字段,导出后其实表字段对应的默认长度不够,会导致导入dashboard的时候报错

可能根据你实际存储的内容大小有关系,我这边是改了:

ALTER TABLE `dashboard` MODIFY COLUMN `data`  longtext NOT NULL;

ALTER TABLE `dashboard_version` MODIFY COLUMN `data`  LONGTEXT NOT NULL;

5.然后改grafana配置并重启grafana便可正常访问

vi default.ini

[database]
type = mysql
host = 127.0.0.1:3306
name = grafana
user = grafana
password = """xxx"""  ##特殊字符用"""括起来

账号都可以继承之前的,不管是ldap的还是数据库存储的。

听我的,别去信那个给你提供个py脚本手动改的,老老实实用sqlite3-to-mysql插件!!!

我开始就是用了网上推荐的py脚本(因为centos7安装sqlite3-to-mysql老是报错,偷懒图省事):

import re
def convert_sqlite_to_mysql(sql):sql = re.sub(r'PRAGMA .*?;', '', sql)sql = sql.replace('BEGIN TRANSACTION;', 'START TRANSACTION;')sql = sql.replace('COMMIT;', 'COMMIT;')sql = sql.replace('AUTOINCREMENT', 'AUTO_INCREMENT')sql = sql.replace('INTEGER', 'BIGINT')sql = sql.replace('TEXT', 'VARCHAR(255)')sql = sql.replace('"', '`')return re.sub(r'CREATE TABLE `(.*?)` \(', r'CREATE TABLE IF NOT EXISTS `\1` (', sql)
with open('grafana-20251107.sql', 'r', encoding='utf-8') as file:sqlite_sql = file.read()
mysql_sql = convert_sqlite_to_mysql(sqlite_sql)
with open('dump_grafana_mysql.sql', 'w', encoding='utf-8') as file:file.write(mysql_sql)
print("ok,file: dump_grafana_mysql.sql")

开始用的那个根本导入都一直报错,很多字段长度不够,用了varchar或者int,导入的时候一堆报错,改了半天好不容易没报错了,结果启动后直接页面打不开,报错:

t=2025-11-07T14:36:13+0800 lvl=eror msg="failed to fetch alert rule" logger=ngalert uid=Ff75d9gvk org=1 err="invalid character '`'looking for beginning of object key string"

看着是字段内容有问题,我总不能又去改吧,吐了吐了,后面老老实实用插件。

如果你们安装sqlite3-to-mysql也报错(建议你直接容器跑,换个系统,我反正没解决):

	/usr/local/bin/pip3.6  install sqlite3-to-mysqlRunning setup.py install for backports-datetime-fromisoformat ... errorERROR: Command errored out with exit status 1:...error: command 'gcc' failed with exit status 1----------------------------------------Command "/usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-o1s54be5/backports-datetime-fromisoformat/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-an_ked9q-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-o1s54be5/backports-datetime-fromisoformat/

热乎的,亲测有效!!!

http://www.dtcms.com/a/592542.html

相关文章:

  • 拒绝繁琐,介绍一款简洁易用的项目管理工具-Kanass
  • 测试自动化新突破:金仓KReplay助力金融核心系统迁移周期缩减三周
  • 大语言模型入门指南:从科普到实战的技术笔记(1)
  • 大模型原理之Transformer进化历程与变种
  • 2025-简单点-ultralytics之LetterBox
  • 网站开发经济可行性分析石龙做网站
  • wordpress中国优化网络优化的目的
  • 【Linux网络】Socket编程TCP-实现Echo Server(下)
  • 路由协议的基础
  • ios 26的tabbar 背景透明
  • Hadoop大数据平台在中国AI时代的后续发展趋势研究CMP(类Cloudera CDP 7.3 404版华为鲲鹏Kunpeng)
  • Apache Jena:利用 SPARQL 查询与推理机深度挖掘知识图谱
  • Regression vs. Classification|回归vs分类
  • Nine.fun × AIOT重磅联手,打造健康娱乐新经济
  • The Life of a Read/Write Query for Apache Iceberg Tables
  • 网站显示图片标记html5做网站的代码
  • 做网站需要买多大空间哪里有好的免费的网站建设
  • gpt‑image‑1 —— OpenAI 全新图像生成模型全面解析
  • 基于scala使用flink将读取到的数据写入到kafka
  • 跨平台OPC UA开发:.NET、Java与C++ SDK的深度对比
  • 硬盘第一关:MBR VS GPT
  • 从原理到演进:vLLM PD分离KV cache传递机制全解析
  • 如何在浏览器侧边栏中使用GPT/Gemini/Claude进行网页对话?
  • 【gpt-oss-20b】一次 20B 大模型的私有化部署评测
  • zynq的PS端ENET网口引出到EMIO的PL引脚
  • 商城网站设计策划wordpress 去除归档链接
  • 李宏毅机器学习笔记44
  • 小杰-大模型(three)——RAG与Agent设计——Langchain-OutputParser输出解析器
  • LSTM核心参数与输入输出解读
  • 【机器学习算法】面试中的ROC和AUC