图三:企业级监控系统框架参考
APM应用性能监控系统介绍
“工欲善其事必先利其器”,做到代码级别的监控故障分析,提供7*24小时不间断的业务检测,就离不开专业有力的应用性能监控工具或平台,精准的应用性能监控分析也是业务上线后稳定健壮运行的重要保障。
应用监控
应用监控很重要,它能帮助我们回答“是什么”的问题。通常情况下,要确定“是什么问题?”我们需要特别编写一些监控代码或者需要有能够监控代码的工具,如果想要把它做好,我们可能需要把代码集成在产品或业务系统里。尽管有一些代理会告诉我们到底问题是什么,比如由于一个或多个磁盘损坏而导致的I/O子系统缓慢,但很少有现成的代理可以帮助我们准确地诊断出应用的哪一部分出现了问题;又比如一个在成熟运行的业务所依赖的子系统,经过近期的几次业务代码变更后,如公共子系统的Redis的效率变得越来越差,所有依赖这些公共子系统都会连带收到系统卡顿或者响应超时的报错。虽然那些完全自我愈合应用有点像白日梦,从开发时间的角度看,也不太经济划算,但是应用可以对最常见类型的故障进行自我诊断的理念,是一个令人钦佩而且可实现的愿望。
以Java应用系统为例,JVM自身提供了相应的性能监控手段和工具,但这些分析工具主要是侧重Java单方面的性能分析,需要通过我们的监控架构设计思路和框架,重新设计一套符合企业业务需求的应用性能监控系统,加入能够精准做到定位出代码级别的监控又或者实时抓取出异常的业务SQL及事务,配合可视化分析和预警,应用性能监控系统就可以直接、快速、有效的找到症结所在,并直观的把关键信息反馈给相关开发、运维人员。
比如现在有一套业务涵盖A,B,C之间的子系统(Subsystem)之间的调用关系,可能是Dubbo服务调用的、或是HTTP、Hessian、API等接口、又或是Rabbit MQ消息队列、异步线程调取等方式。总之,业务系统中的各子系统之间关系均采用到的主流技术来实现构建,那么如何完成发现A子系统的应用代码问题是通过B并对C造成问题的根源呢?
APM(Application Performance Management)的性能监测分析可以做到这一点,以云智慧透视宝为例,APM不仅能够在复杂系统中追踪服务及代码层级性能瓶颈,还能自动发现全局应用拓扑,做到端对端的应用分析概览,失误监控与分析,SQL脚本性能分析、代码堆栈抓取以及事务深度追踪等,帮助开发等部门提升工作效率。
透视宝APM监控架构思路
APM数据采集架构设计
应用监控结构思路:
透视宝的数据采集使用Sendproxy为SmartAgent的调度器,所有SmartAgent的数据都经过Sendproxy进行统一调度发送,推送到统一的大数据日志分析平台。
其主要优势在于:
发送队列保证各插件数据发送的稳定性;
可以作为代理,部署在可联外网的主机中,保证局域网非联网环境的数据发送;
APM部署调试
1、客户端简易安装
登录透视宝网站后台控制面板,在配置页面下载对应操作系统的Smart Agent,进行Smart Agent的安装和启动。
[[email protected] smart_agent]# ./SmartAgent.sh start
Starting SmartAgent daemon: SmartAgent
Restarting SmartAgent SendProxy daemon: bin/SendProxy
No Server (/apps/smart_agent/plugins/SendProxy/bin/SendProxy) running
Starting SmartAgent SendProxy daemon: bin/SendProxy
OK
OK
备注:
SendProxy: 通过SendProxy发送的数据。
2、注册JavaAagent的应用监控服务
要监控Java应用,您需要在“插件管理”页面中安装并开启Java插件。
3、提供JavaAagent的部署
点击“安装”按钮安装JavaAgent 插件,安装时自动将JavaAgent下载到SmartAgent安装目录的smart_agent/plugins下,下载完成后开启插件。安装Java插件后,您还可以在Java插件conf目录中的app.conf文件中配置与数据采集相关的参数。
#/apps/smart_agent/plugins/Java_1459929876X1002x0
if [ "$1" = "start" -o "$1" = "run" ]; then
export JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:/apps/smart_agent/plugins/Java_1459929876X1002x0/conf -javaagent:/apps/smart_agent/plugins/Java_1459929876X1002x0/lib/CAgent-1.0.0.jar=/apps/smart_agent/plugins/Java_1459929876X1002x0"