AppDynamics添加Java层级代理无法注册、主机解析失败排查
AppDynamics Java代理注册失败/UnknownHostException排查方案
核心报错对应根因
你遇到的java.net.UnknownHostException、https: Name or service not known、Auth Service broken问题,和提前创建Tier的操作无关,绝大多数是配置格式不兼容或者容器网络配置问题,按以下步骤逐一排查修复:
1. 首先修复controller-info.xml的3个配置错误
Python代理对不规范配置的容错性更高,所以Python侧正常但Java侧报错,你当前的XML配置存在3个Java代理无法兼容的写法:
- 标签闭合错误:
<controller-host>my host url<//>是非法XML写法,结束标签必须完整写为</controller-host>,否则Java代理解析配置时会读到空值或错误值 - controller-host值格式错误:该字段只能填纯域名/IP,绝对不能带
https://或http://协议前缀。Java代理不会自动拆分协议头,如果你带了https://前缀,代理会把https当做主机名去解析,刚好对应你日志里https: Name or service not known的报错 - SSL配置值错误:
<controller-ssl-enabled>字段Java代理只识别true/false两个值,不识别Python侧兼容的on值,填on会导致代理误判为关闭SSL,用HTTP协议去连443端口
修正后的合法配置参考:
<?xml version="1.0" encoding="UTF-8"?> <controller-info> <controller-host>填写你的Controller纯域名,不带任何协议前缀</controller-host> <account-access-key>my key</account-access-key> <controller-port>443</controller-port> <controller-ssl-enabled>true</controller-ssl-enabled> <application-name>myapplication</application-name> <account-name>myaccount</account-name> <node-name>mynode</node-name> <tier-name>mytier</tier-name> </controller-info>
2. 校验Java容器的网络连通性
不要以其他容器/宿主机的连通性为准,必须进入运行Java应用的Docker容器内部实测:
- 执行域名解析测试:
nslookup 你配置的Controller纯域名,如果解析失败,说明当前容器的DNS配置有误,检查Docker启动参数里的DNS配置、宿主机防火墙规则、K8s环境下的CoreDNS服务状态 - 执行端口连通性测试:
curl -vk https://你配置的Controller纯域名:443,如果连接超时,检查容器网络是否放通到Controller的443端口出站规则
3. 修复启动配置和权限问题
- 你贴的启动命令存在语法错误,末尾的
application.jar少了闭合单引号,修正后的正确启动命令为:
如果是Dockerfile的ENTRYPOINT数组写法,修正为:java -javaagent:/opt/appdynamics/ver22.4.0.33722/javaagent.jar -jar application.jarENTRYPOINT ["java", "-javaagent:/opt/appdynamics/ver22.4.0.33722/javaagent.jar", "-jar", "application.jar"] - 确认AppDynamics代理目录的权限:Java进程启动用户必须对
/opt/appdynamics/ver22.4.0.33722/目录有完整读写权限,否则代理无法解压临时组件、写入日志,会出现组件启动失败的报错,可以在Dockerfile中添加赋权命令(替换为你实际的Java进程启动用户):RUN chown -R appuser:appuser /opt/appdynamics/
验证结果
配置修正后重启应用,查看agent.log,如果出现Agent registered successfully类日志,再去控制台的Tiers & Nodes页面就能看到Java节点上报的数据。日志里提到的Argento Agent是AppDynamics的内嵌下一代采集组件,主代理连通Controller后会自动启动,不需要额外配置。
内容的提问来源于stack exchange,提问作者Carabes
相关产品推荐
相关产品推荐

