采集部署

本文介绍了采集部署的流程。

1.预检查

  • 确保collector部署在没有线上应用的独立服务器上。

  • 确保已配置JAVA_HOME,JDK版本1.6+。

2.启动

 Unix系统,在collector目录下执行:
 `./run.sh`
 Windows系统, 在collector目录下执行:
 `start /b java -jar javaagent-collector.jar`
                        

验证:查看collector/logs/collector.log日志,显示启动成功即部署成功。

如有报错,请参见应用采集器常见问题

采集器javaagent

1.启动前的配置

  • 确保环境变量已配置JAVA_HOME,否则设置 attach.sh 中 JAVA_HOME 地址为jdk的绝对路径(注意:如客户使用jre而非jdk,需要自己将tools.jar拷贝到${JAVA_HOME}/lib/目录下)。

  • 配置javaagent.config: profiler.collector.ip = 11.23.45.67 # collector的ip profiler.collector.port = 9996 # collector的端口 profiler.app.name = adamApp #应用名,少于20个字符的字母、数字组合 。profiler.app.port = 8080 #应用启动端口,应用有很多个不同功能的端口,只配请求的那个端口即可,一个JVM下无论是否一个应用都只配置一个 profiler.applicationservertype = TOMCAT # 应用中间件容器类型,TOMCAT\JBOSS\WEBLOGIC等。

以下非必选配置

        配置应用需要检测的Java代码的目录前缀。替换下面示例,多个目录用英文逗号分隔,每个至少2级目录,建议不超过5个;
        应用采集时根据精准的调用栈信息,在数据库改动时能同步给出明确的应用改动建议。
        如不能全部提供则可以不写,后续在阿里云Adam分析页面进行过滤设置。
        `profiler.classpath.whitelist = com.alibaba.javaagent,com.alibaba.adam`
        如上面白名单已填写,此处可忽略;如果不清楚白名单列表,填写黑名单也可过滤无用的调用栈信息。
        `profiler.classpath.blacklist =org.apache,net.sf`
        配置当cpu达到多少时暂停数据采集。
        `profiler.cpu.threshold = 85`
        系统信息收集间隔,默认15分钟。
        `profiler.sys.send.interval = 15`
        sql动态信息收集间隔,默认15分钟。
        `profiler.sql.dynamic.send.interval = 15`
                        

2.启动方式

启动方式一:不重启应用,agent单次临时监控

javaagent目录增加操作权限;确保agent启动的账号和应用启动账号一致;找到应用的进程号PID,在javaagent目录执行(将${pid}整体替换为应用的进程号):

Unix系统,执行:
`./attach.sh -p ${pid}`
Windows系统,执行:
`java -cp "%JAVA_HOME%\lib\tools.jar;%cd%\javaagent-bootstrap.jar" com.alibaba.adam.javaagent.bootstrap.AgentAttacher -p ${pid}`
                        

查看javaagent目录下log文件,提示启动成功,应用有流量进入后,查看collector的目录下有data目录且有数据,说明agent启动成功且正确发送数据到collector。如有报错,请参见应用采集器常见问题

  • 确保应用的PID获取正确。

  • 启动agent的账号和应用启动账号保持一致,且权限也要一致,否则无法监控。(windows下注册表SYSTEM启动的应用无法通过启动方式一启动,原因是账号权限不一致)。

启动方式二:随应用一起启动监控(推荐)

应用增加javaagent配置重启即可(${javaagent_path}整体替换为javaagent的目录)。

Unix系统

Tomcat:在catalina.sh启动文件最后一个CATALINA_OPTS配置后面增加:
        CATALINA_OPTS="$CATALINA_OPTS -javaagent:${javaagent_path}/javaagent-bootstrap.jar"
Jboss:在run.conf启动文件最后一个JAVA_OPTS配置后面增加:
        JAVA_OPTS="$JAVA_OPTS -javaagent:${javaagent_path}/javaagent-bootstrap.jar"
Weblogic:在startWebLogic.sh启动文件最后一个JAVA_OPTIONS配置后面增加:
        JAVA_OPTIONS="$JAVA_OPTIONS -javaagent:${javaagent_path}/javaagent-bootstrap.jar"
Websphere:
        方式1 配置文件增加: JAVA_OPTS="$JAVA_OPTS -javaagent:/home/admin/javaagent/javaagent-bootstrap.jar"
        方式2 页面配置: 通用JVM参数(Java Virtual Machine)加上:
        name:javaagent  value:/home/admin/javaagent/javaagent-bootstrap.jar
k8s集群docker容器:
        将javaagent目录放入docker镜像中并对应增加-javaagent配置,一起打包镜像部署。
                        

Windows系统

Tomcat:在catalina.bat启动文件最后一个CATALINA_OPTS配置后面增加:
        CATALINA_OPTS="$CATALINA_OPTS -javaagent:${javaagent_path}/javaagent-bootstrap.jar"
Jboss:在run.conf启动文件最后一个JAVA_OPTS配置后面增加:
        JAVA_OPTS="$JAVA_OPTS -javaagent:${javaagent_path}/javaagent-bootstrap.jar"
Weblogic:在startWebLogic.cmd启动文件最后一个JAVA_OPTIONS配置后面增加:
        JAVA_OPTIONS="$JAVA_OPTIONS -javaagent:${javaagent_path}/javaagent-bootstrap.jar"
Websphere:
        方式1 配置文件增加: JAVA_OPTS="$JAVA_OPTS -javaagent:/home/admin/javaagent/javaagent-bootstrap.jar"
        方式2 页面配置: 通用JVM参数(Java Virtual Machine)加上:
        name:javaagent  value:/home/admin/javaagent/javaagent-bootstrap.jar
                        

应用启动后查看应用的日志,显示Java Agent load successfully! 表示启动成功,如报错根据错误原因进行修改,如未显示任何agent信息表示配置路径不对导致未加载。

优缺点

启动方式

优点

缺点

适用场景

启动方式一

对全新应用无须重启即可设置agent监控。

每次应用重启agent需手动启动; 启动agent的账号必须和应用保持一致。

应用长期不重启且重启会造成业务影响。

启动方式二

应用重启agent自动启动,应用采集连续;不用考虑账号权限问题。

第一次需重启应用。

应用可重启、持续采集(大多数场景)。

其他说明

  • 当应用停止:无论方式一、二启动的监控,应用停止则agent停止。

  • agent主动停止监控:

    • 方式一:重启应用或通过命令./attach.sh -p ${pid} -s。

    • 方式二:去掉配置的javaagent后重启应用。

  • agent停止监控后想再次做监控,必须重启应用。

    • 方式一:待应用重启后手动启动agent。

    • 方式二:agent随应用重启而启动。

  • Jboss区分社区版和企业版,如果有jboss.modules.system.pkgs配置项,则无论用方式一、二,都需要先增加com.alibaba.adam.javaagent目录并重启应用才能生效。

数据收集(一般收集1-7天数据)

  • 进入collector目录,将data/下的文件按appname打zip包,分别独立上传ADAM-应用画像,切记一个应用对应一个应用画像,一个应用下不同IP的数据可以打包到一起,但不同appname的数据不能打包到一起,否则上传会报错。