一、遇到问题

在启动 sonarqube 的时候明明 ES 已经带起来,却又突然关闭了,如下图:

sonarqube容器启动 sonarqube启动闪退_sonarqube容器启动

经过很长时间的排查,发现日志当中并没有 WARN ERROR 的报错。很是苦恼,所以来一步步分析错误,最终解决。

二、问题分析

sonarqube 关键的三个组件
1、ElasticSearch
2、Mysql 数据库
3、web - GUI

sonarqube 启动顺序也是如此,先启动 ElastcSearch ,然后是数据库,然后是 web - GUI。

其 logs 日志目录,也是按照这个顺序记录日志,在启动时分别产生:

  1. access.log 针对web服务的日志,记录你所有的访问记录。这个日志在 sonar 没有启动成功啥也没有,所以这个日志跟启动 sonar 没关系。
  2. es.log:针对 es 组件的日志,也是 sonarqube 启动第一个运行的组件,这个日志有报错,那就是 es 的问题。
  3. sonar.log:sonar 服务的启动日志,记录所有组件的启动信息。
  4. web.log:web-GUI 日志,web - GUI 界面想要启动,得满足 ES mysql sonar 这三个要求。


三、耐心查看日志,启动不了绝对会在日志中记录

1、es.log,如下图所示,ES已经启动成功,又关闭,说明问题并不是出在 ES 身上

sonarqube容器启动 sonarqube启动闪退_mysql_02

2、sonar.log,sonar得守护进行已经启动了,又关闭,说明问题不是出在 sonar本身。

sonarqube容器启动 sonarqube启动闪退_mysql_03

3、web.log,排除了 ES 和 sonar本身,还剩下 mysql 和 WEB-gui

仔细检查 web.log 日志,发现问题所在,原来是 database Fail to connect to database 连接失败。
连接失败,肯定和 IP:Port 有关系。将 localhost:3306 换成 IP地址试试。

sonarqube容器启动 sonarqube启动闪退_数据库_04

四、解决问题

授权mysql 用户:grant all on . to ‘sonar’@‘192.168.168.%’ identified by ‘123.com’;

修改 conf/sonar.properties :

sonarqube容器启动 sonarqube启动闪退_mysql_05


五、其他问题

  1. ES 组件需要设置 文件描述符,设置虚拟内存。
  2. MySQL 需要 设置数据库 ,授权用户访问。
  3. sonar 启动不能是 root 用户,必须赋予 /usr/local/sonar 目录 sonar用户权限。
  4. sonar - web 默认端口号 9000,检查是否有冲突占用。

排错思路:按照 sonar 启动得先手顺序查看 对应得日志文件,从而解决问题。