Background workers haven't checked in recently. This is likely an issue with your configuration o...

项目中用到了sentry,之前是k8s管理的,现在要直接在机器手动跑起来,所以移植了下数据。结果界面提示这个错误,非常难看

Background workers haven't checked in recently. This is likely an issue with your configuration or the workers aren't running.

sentry-web错误

在谷歌上搜了好多,没有找到解决方案。有个sentry官方的人一直强调cron进程没启动,额,只要是按着教程部署,不会出现这种情况,所以不是问题所在。

想到尝试看下源码,找到了报错逻辑

Background workers haven't checked in recently. This is likely an issue with your configuration o..._第1张图片
错误信息所在

这里有两段逻辑,第一个是如果设置了CELERY_ALWAYS_EAGER为True,则不报错,我尝试了发现会提示其他错误,所以这里不对。第二个就是红框里的逻辑了。但实际上单看源码分析不出什么,因为逻辑是整体的,所以决定去继续看报错日志

这里提示一句,一定要仔细看日志记录,搜下报错的地方,其实日志里说的最清楚。我的日志记录如下:

Background workers haven't checked in recently. This is likely an issue with your configuration o..._第2张图片
错误日志

这里恰好也有这个sentry:last_worker_ping,感觉貌似应该是有点联系,看字面意思是这个值取不到。认真阅读倒数第二行话,期望获取一个值,但是返回了两个。

找到sentry的业务代码store.py文件里的165行,这里其实是读取数据库的操作,看下这里读取的是哪个数据表,通过分析,是sentry_option表,于是去postgres找找是不是真的有这个表,惊喜的发现了下面的东西:

这个表里有四条重复的记录,sentry:last_worker_ping重复了两次,sentry:last_worker_version重复了两次。看来这才是问题的关键,数据重复,导致python取出了多条数据,然后程序判断获取不到相应的值,然后报错,到这里,整个逻辑串起来了。

解决的方法很简单,删除掉重复的数据即可,这里提醒下,先把sentry服停掉,等数据整理好以后,再启动。

问题解决!

你可能感兴趣的:(Background workers haven't checked in recently. This is likely an issue with your configuration o...)