Bistoury
是去哪儿网开源的一个对应用透明,无侵入的java应用诊断工具,用于提升开发人员的诊断效率和能力,可以让开发人员无需登录机器或修改系统,就可以从日志、内存、线程、类信息、调试、机器和系统属性等各个方面对应用进行诊断,提升开发人员诊断问题的效率和能力。
Bistoury
集成了Alibaba开源的arthas和唯品会开源的vjtools,因此arthas和vjtools相关功能都可以在Bistoury
中使用。
Arthas和vjtools通过命令行或类似的方式使用,Bistoury在保留命令行界面的基础上,还对很多命令提供了图形化界面,方面用户使用。
Bistoury
英文解释是外科手术刀,含义也就不言而喻了。
通过命令行界面查看日志,使用arthas和vjtools的各项功能
在线debug,在线应用调试神器
线程级cpu监控,帮助你掌握线程级cpu使用率
在web界面查看JVM运行信息,以及各种其它信息
动态给方法添加监控
线程dump
Bistoury核心组件包含agent,proxy,ui:
一次命令执行的数据流向为 ui -> proxy -> agent -> proxy -> ui
具体分析一下:
具体参见 bistoury/design.md at master · qunarcorp/bistoury · GitHub
bistoury原理分析: https://www.jianshu.com/p/f7202e490156
总结下就是使用类似skywalking那样的agent技术,来监测和协助运行在JVM上的程序。
准备
获取快速部署包
官方有一个快速开始文档: bistoury/quick_start.md at master · qunarcorp/bistoury · GitHub
可以下载release包快速启动,就可以体验了。
首先我们将快速启动包 bistoury-quick-start.tar.gz 拷贝到想要安装的位置。
然后解压启动包:
tar -zxvf bistoury-quick-start.tar.gz
cd bistoury
最后是启动 Bistoury,因为 Bistoury 会用到 jstack 等操作,为了保证所有功能可用,需要使用和待诊断 JAVA 应用相同的用户启动。
假设应用进程 id 为 1024
./quick_start.sh -p 1024 start
sudo -u tom ./quick_start.sh -p 1024 start
./quick_start.sh stop
访问
可以通过http://ip:9091来对ui进行访问,比如部署的机器ip为127.0.0.1,则可以通过http://127.0.0.1:9091/访问,初始化用户名密码均为admin
Bistoury实现了在线Debug功能,它模拟了ide的调试体验,可以直接在代码上添加断点,甚至还支持条件断点。
使用步骤
进入在线debug页面,初次使用时请先点击下方链接设置gitlab private token,若不设置,则添加断点时的代码将会通过反编译产生。目前仅支持gitlab,点击输入框下方对应链接获取,然后点击保存设置private token
选择需要调试的应用名,再选择需要调试的机器,然后点击【debug】按钮,进入已加载类列表。
在系统的日常运维中,我们有时会碰到cpu使用率突然飙高的情况。这个时候我们会登录机器,top查看进程id,top -h查看消耗cpu的线程id,然后jstack看看对应的线程是哪一个,最后再进行具体分析。 暂且不考虑这一系列操作需要的时间,我们收到报警的时候可能正在公司外吃饭,或是正在睡觉,而等我们做好准备登录上机器时问题已经结束了,现场没了,我们还能做的就只是看着机器的cpu监控图一脸茫然…
当遇到这些情况时,你会发现你需要的是线程级cpu使用率监控帮你指出问题线程,而不是传统的机器cpu使用率监控让你只能看着监控图一脸懵逼。
Bistoury就是你需要的那一个!我们提供了线程级的cpu使用率监控,它在本地保存了最近三天的线程级监控数据,还对每个线程每一分钟提供一个瞬时的线程调用栈。
使用
线程级cpu监控主要分为两个区域,区域一是线程数量和cpu占比的折线图,区域二是线程完整信息。
区域一
可以单独查看某一线程的cpu占比,也可以查看不同时间的cpu占比(支持最近三天),点击某一时间对应的点,可以在区域二展示具体的线程信息。
区域二
可以按照线程名、线程调用栈、线程状态对线程进行筛选,其中每分钟cpu占用率是该分钟内cpu使用占比,瞬时cpu使用占比,是指抓取数据时cpu瞬时cpu使用率占比。
有时候我们需要对系统的某个方法添加一个监控看看系统运行情况,但经历一次修改代码、qa检查、重新发布的流程又感觉不划算,这就是动态监控大显身手的时候了。 动态监控类似于Arthas的monitor方法,会对方法的执行时间、调用次数、失败次数进行监控,不同之处在于会生成对应的监控图,保留最近几天的数据,并且提供了web界面,通过类似添加断点的方式来添加监控。
注意: 监控会使用部分应用程序内存,建议内存较小的应用不要添加过多的动态监控。
监控生命周期
动态监控添加的指标生命周期与应用的的生命周期基本一致,从添加开始一直到应用停止,监控回一直采集监控数据。并存储最近三天的历史数据。
使用
在前面说过,Bistoury不仅仅可以从机器的维度,还可以从应用的维度对系统进行诊断。
应用是什么
我们知道,在线系统往往部署在多台机器上,应用就是与系统相关的这些机器以及所使用到的资源的一个集合。
应用中心就是用来管理应用信息的一个东西,而Bistoury需要从应用中心获取应用与机器、应用与人等各种信息。
Bistoury在ui内部集成了一个简单的应用中心,如果公司内部有自己的应用中心,应该实现bistoury-application-api模块中的接口接入自己的应用中心。
功能说明
应用中心主要职责如下:
使用说明