一、遇到问题
在启动 sonarqube 的时候明明 ES 已经带起来,却又突然关闭了,如下图:
经过很长时间的排查,发现日志当中并没有 WARN ERROR 的报错。很是苦恼,所以来一步步分析错误,最终解决。
二、问题分析
sonarqube 关键的三个组件
1、ElasticSearch
2、Mysql 数据库
3、web - GUI
sonarqube 启动顺序也是如此,先启动 ElastcSearch ,然后是数据库,然后是 web - GUI。
其 logs 日志目录,也是按照这个顺序记录日志,在启动时分别产生:
- access.log 针对web服务的日志,记录你所有的访问记录。这个日志在 sonar 没有启动成功啥也没有,所以这个日志跟启动 sonar 没关系。
- es.log:针对 es 组件的日志,也是 sonarqube 启动第一个运行的组件,这个日志有报错,那就是 es 的问题。
- sonar.log:sonar 服务的启动日志,记录所有组件的启动信息。
- web.log:web-GUI 日志,web - GUI 界面想要启动,得满足 ES mysql sonar 这三个要求。
三、耐心查看日志,启动不了绝对会在日志中记录
1、es.log,如下图所示,ES已经启动成功,又关闭,说明问题并不是出在 ES 身上
2、sonar.log,sonar得守护进行已经启动了,又关闭,说明问题不是出在 sonar本身。
3、web.log,排除了 ES 和 sonar本身,还剩下 mysql 和 WEB-gui
仔细检查 web.log 日志,发现问题所在,原来是 database Fail to connect to database 连接失败。
连接失败,肯定和 IP:Port 有关系。将 localhost:3306 换成 IP地址试试。
四、解决问题
授权mysql 用户:grant all on . to ‘sonar’@‘192.168.168.%’ identified by ‘123.com’;
修改 conf/sonar.properties :
五、其他问题
- ES 组件需要设置 文件描述符,设置虚拟内存。
- MySQL 需要 设置数据库 ,授权用户访问。
- sonar 启动不能是 root 用户,必须赋予 /usr/local/sonar 目录 sonar用户权限。
- sonar - web 默认端口号 9000,检查是否有冲突占用。
排错思路:按照 sonar 启动得先手顺序查看 对应得日志文件,从而解决问题。