简介
最近闲来无事逛github时发现bistoury,Bistoury是去哪儿网的java应用生产问题诊断工具,提供了一站式的问题诊断方案,可以在生产环境中实现非入侵式系统信息查看,包括堆栈信息,机器情况,在线调试,应用线程信息等.
下载
首先去github中下载编译好的文件
https://github.com/qunarcorp/bistoury/releases
准备
- 需要Linux环境
- JDK1.8
- 本机 9090,9091,9880,9881 端口未被占用,这些端口会被 Bistoury 使用,如果已占用需要进行配置
以下为github中提供的快速开始说明
快速开始
Bistoury 具有多个模块,并且和公司自身环境有一定的关联,想要合理部署需要进行一些相关的配置。
为了能够快速启动和体验 Bistoury,我们提供快速部署脚本在单机部署整套 Bistoury 服务。
使用快速部署脚本,会在本机部署一整套 Bistoury 服务,其中包括 ui、proxy、agent。
注意,这里提供的快速部署脚本仅适用于快速上手进行单机诊断,想要获得完整的体验,还是需要进行合理的部署。
目前在我们公司内部的使用方式,也是推荐的部署方式为:
ui 独立部署,推荐部署在多台机器,并提供独立的域名
proxy 独立部署,推荐部署在多台机器,并提供独立的域名
agent 需要和应用部署在同一台机器上。推荐在测试环境全环境自动部署,线上环境提供单机一键部署,以及应用下所有机器一键部署
独立的应用中心,管理所有功能内部应用和机器信息,这是一个和 Bistoury 相独立的系统,Bistoury 从中拿到不断更新的应用和机器信息
构建
获取快速部署包
我们在项目 Release 页面提供了已经构建好的快速部署包,你也可以直接下载。
你也可以下载源码然后自己构建快速启动包,这同样很简单。首先 clone 项目到本地,运行 script/quick_start_build.sh,运行完成后 script 目录下会生成相应的快速部署包,名字格式为 bistoury-quick-start.tar.gz
准备
目前仅支持 Linux 环境,所以需要一个 Linux 环境
本机已安装 jdk1.8+,并且设置了
JAVA_HOME
环境变量,如果没有设置也可以在启动脚本中传递-j
参数,详情见下文:启动参数本机 9090,9091,9880,9881 端口未被占用,这些端口会被 Bistoury 使用,如果已占用需要进行配置,详情见下文:当端口冲突了怎么解决
本机已经启动一个待诊断 JAVA 应用,如果是 Spring Web 应用不需要做处理,非 Spring Web 应用需要配置启动脚本的
-c
参数,详情见下文:启动参数
启动
首先我们将快速启动包 bistoury-quick-start.tar.gz 拷贝到想要安装的位置。
然后解压启动包:
1 | tar -zxvf bistoury-quick-start.tar.gz |
最后是启动 Bistoury,因为 Bistoury 会用到 jstack 等操作,为了保证所有功能可用,需要使用和待诊断 JAVA 应用相同的用户启动。
假设应用进程 id 为 1024
- 如果应用以本人用户启动,可以直接运行
1 | ./quick_start.sh -p 1024 start |
- 如果应用以其它帐号启动,比如 tomcat,需要指定一下用户然后运行
1 | sudo -u tomcat ./quick_start.sh -p 1024 start |
- 停止运行
1 | ./quick_start.sh stop |
访问
可以通过 http://ip:9091 来对 ui 进行访问,比如部署的机器 ip 为 192.168.1.20,则可以通过 http://192.168.1.20:9091/ 访问,初始化用户名密码均为 admin
具体实施中遇到的问题
websocket连接失败
原因是本机可能存在多个ip,导致获取的ip不是当前正在使用的ip(获取到的ip可以在各个日志中查看,也可以在应用中心查看),从而出错,
可以通过quick_start.sh脚本中的-i参数指定当前的ip。
例子 :
1 | ./quick_start.sh -i 127.0.0.1 -p 1024 start |
提示 not find proxy for agent
端口冲突,修改端口即可
端口 | 作用 |
---|---|
1. 9880 | agent和proxy通信默认使用9880端口 |
2. 9881 | ui和proxy通信默认使用9881端口 |
3. 9090 | proxy默认使用9090端口 |
4. 9091 | ui默认使用9091端口 |
5. 9092 | h2数据库默认使用9092端口 |
端口 | 端口定义的位置 |
---|---|
9880 | 解压缩目录/bistoury-proxy-bin/conf/global.properties 中的agent.newport 值 |
9881 | 解压缩目录/bistoury-proxy-bin/conf/global.properties 中的server.port 值和quick_start.sh 中PROXY_WEBSOCKET_PORT 的值 |
9090 | 解压缩目录/bistoury-proxy-bin/conf/server.properties 中的tomcat.port 值和quick_start.sh 中PROXY_TOMCAT_PORT 的值以及bistoury-agent-bin/bin/bistoury-agent-env.sh中的BISTOURY_PROXY_HOST的值 |
9091 | 解压缩目录/bistoury-ui-bin/conf/server.properties 中的tomcat.port 值 |
9092 | 解压缩目录/h2/h2.sh 中的H2_PORT值 |