如何批量更新ARMS应用监控的应用探针

ARMS 应用监控应用探针 安装原理 和 更新问题

ARMS的Java的程序的应用监控原理和其他大多数APM产品类似,通过在Java程序中挂载应用探针(javaagent)来完成,如下图所示。整个安装步骤一般分为三步:1. 下载探针,2. 通过修改相关Java启动参数安装探针,3. 启动应用。其接入方式一大优点是监控方法对应用没有侵入行,直接通过修改应用参数即可,无需修改业务代码。

image.png | left | 747x365image.png | left | 747x365

那么问题来了。ARMS目前版本迭代更新速度是比较快的,每个月都有很多功能发布,而其中大部分功能都会要求应用进行相关应用探针(ARMS Agent)的版本升级。那么通过以上方式一次性接入ARMS应用监控的同学一般会有个疑问,在应用启动方式一次性改造以后,那么ARMS agent日后有版本更新,有什么好的办法能同时快速更新应用呢。

理论上方法有很多。这里介绍三种比较常用的方法,抛砖引玉,供各位参考。

  • 通过应用程序启动脚本更新应用探针
  • 借助阿里云ECS云助手批量更新云助手
  • 集成阿里云中间件产品EDAS来更新应用探针

通过应用程序启动脚本更新应用探针

这里首先介绍一种通过应用程序启动脚本快速更新应用探针(ARMS Agent)的方法。

以Tomcat应用为例,该方案大概思路是:

  1. 在Tomcat Catalina.sh中加入下载安装应用探针的逻辑。

  2. 在Tomcat Catalina.sh中修改JAVA_OPTS参数来加载应用探针,详见 “业务实时监控服务 ARMS > 应用监控 > 创建应用监控任务” 一文。

  3. 启动应用。

具体解释如下。在第二步中,“业务实时监控服务 ARMS > 应用监控 > 创建应用监控任务”文中讲到,Tomcat一般是通过catalina.sh来进行启动,需要在在相关启动脚本中加入-javaagent启动参数来进行加载ARMS Agent。在作为更新Java agent的关键步骤,可考虑在catalina.sh中在更新-javaagent启动参数之前,加入下载agent的代码,如下所示。注:具体代码下载链接请参考官方下载文档

wget "http://arms-apm-[xxx].oss-cn-[xxx].aliyuncs.com/ArmsAgent.zip" -O [具体地址/]ArmsAgent.zip

unzip [具体地址]/ArmsAgent.zip -d [具体地址]/

这样,在具体应用重启时,会首先下载agent,确保agent为最新版本。应用只需要在各个节点依次重新启动一次,即可保证应用节点为最新。

通过以上步骤重启应用更新ARMS应用监控java agent,需要注意三件事情:

  • 为了尽量不影响业务,在启动应用时,尽量分配重启,如逐个节点重启。这样在分布式应用情况下,不会对业务造成影响。
  • 在wget操作中,如果在VPC环境内由于网路限制,无法直接在生产节点直接下载agent的话,可以考虑提前在公网把agent下好,然后把agent放置到内网或VPC内的的ftp或http服务器上,再通过对应的ftp或wget命令在catalina.sh或其他相关脚本里把agent下载下来。
  • 如果在tomcat上运行多个应用的话,需要考虑在同一个ECS上安装多分不同的tomcat做隔离,来把不同的应用PID隔开。

借助阿里云ECS云助手批量更新云助手

阿里云云助手,简称云助手,是一个可以自动、批量执行日常维护任务的轻量便捷运维工具。

以Tomcat应用为例,使用云助手的方案大概思路是:

  1. 通过云助手,定期批量下载探针到所有的ECS节点上。

  2. 通过修改catalina.sh,除修改启动参数意外,还需要额外将下载的探针copy到制定应用目录。

  3. 启动应用。

在第一步中,用户通过云助手,直接在所有用户的ECS服务器上,将ARMS Agent固定下载到某个用户文件夹下,例如 /var/arms/下,并解压;并可以通过云助手将操作设置为每天凌晨的批量更新操作,这样可以保证每天的ARMS Agent为最新版本。

假设通过云助手批量解压后的ARMS Agent为/var/arms/arms-bootstrap-1.7.0-SNAPSHOT.jar,那么接下来,在应用启动脚本中,同样以Tomcat为例,在catalina.sh脚本中需要额外做以下事情,

  • 将/var/arms/arms-bootstrap-1.7.0-SNAPSHOT.jar拷贝到应用目录下,如:

cp /var/arms/arms-bootstrap-1.7.0-SNAPSHOT.jar [应用路径]/arms-bootstrap-1.7.0-SNAPSHOT.jar

set “JAVA_OPTS=%JAVA_OPTS% -javaagent:[应用路径]/ArmsAgent\arms-bootstrap-1.7.0-SNAPSHOT.jar -Darms.licenseKey=xxx -Darms.appId=xxx”

以上方法可保证,在具体应用重启时,每次都可以加载最新的agent的最新版本。相比前一个方案,省去了启动时候的时候在线下载agent的步骤,理论上可以缩短一定启动时间。

通过以上步骤重启应用更新ARMS应用监控java agent,仍然需要注意两件事情:

  • 为了尽量不影响业务,在启动应用时,尽量分配重启,如逐个节点重启。这样在分布式应用情况下,不会对业务造成影响。这一点和第一方案是一样。
  • 如果在tomcat上运行多个应用的话,需要考虑在同一个ECS上安装多分不同的tomcat做隔离,来把不同的应用PID隔开。

集成阿里云中间件产品EDAS来更新应用探针

以上的两种方案,无论是集成启动脚本,还是通过ECS云助手,本质上都需要用户设计一个流程来下载最新的Java Agent。而在阿里云上,ARMS和EDAS(企业分布式应用管理服务)做了集成,如果用户直接在EDAS应用中开通ARMS,EDAS将负责整个ARMS Agent的生命周期管理,包括更新,加载,等。

image.png | left | 747x310image.png | left | 747x310

在EDAS托管的应用中,为了更新最新的agent,用户本质上只需要在不影响业务前提下重启应用即可,有两种方案:

  • 在EDAS依次重启应用节点即可。该步骤简单,但是节点多的时候比较麻烦。
  • 在EDAS上发布一次应用,应用可以和之前版本相同,但是利用EDAS分批发布的功能分批重启应用。

EDAS重启后的节点将通过EDAS托管功能自动加载最新Agent。

诚邀您关注阿里中间件微信公众号!
我们懂您的胃口:定期分享最前沿技术干货!
我们懂您的喜好:大量精品大会、沙龙、比赛为您量身定做!
我们懂您的情调:海量惊喜奖品随时放送!
你还不来加入我们吗?就现在!最in的程序圈子,由您创造!

企业级互联网架构Aliware,让您的业务能力云化:https://www.aliyun.com/aliware