后端应用系统监控(Smart Agent)常见问题说明


01:什么是SmartAgent? 

02:内网环境下如何部署SmartAgent?

03:部署应用Agent及主机Agent后透视宝平台出现两个相同主机?

04:应用Agent是否需要root权限?

05:应用Agent安装完毕后是否需要重启应用?

06:应用Agent安装完毕后应用重启报错?

07:主机Agent安装完毕后透视宝平台无监控数据?

08:应用Agent安装完毕后透视宝平台无监控数据?

09:Docker环境下部署JavaAgent时容器环境不支持bash?

10:Docker环境下部署JavaAgent时SendProxy地址配置不正确?

11:Docker环境下部署PHPAgent时容器环境不支持bash?


01:什么是SmartAgent?

Smart Agent是透视宝部署在主机端的软件程序(探针),用来监控主机端操作系统性能及主机内运行的应用系统的性能状态,实现针对后端应用系统的代码级监控与分析。

随着透视宝产品的不断发展,SmartAgent在不同时期分为两个大版本:老版本(v1.*.*)SmartAgent采用插件式架构,针对不同监控对象需在主程序基础上安装对应插件,目前已停止更新,不推荐使用;新版本(v2.*.*)SmartAgent在原有插件架构的基础上,将各类型监控插件拆分为独立探针,部署使用更加灵活,推荐用户使用。

SmartAgent由如下几部分组成:

  • 应用Agent(CodeAgent):监控后端应用系统性能状态,实现代码级性能监控与分析,根据被监控应用语言类型需部署各自所对应的应用Agent,包括PHP Agent、Java Agent、DotNet Agent、Python Agent、Nodejs Agent。

  • 主机Agent(OSAgent):监控服务器操作系统性能状态,包括windows及linux版本,需根据被监控服务器操作系统类型分别安装。

  • SendProxy:数据发送代理,将应用Agent及主机Agent采集到的数据进行压缩及处理后发送至透视宝平台,可独立部署于单独服务器中,也可分散部署于各被监控服务器中。大规模部署条件下推荐独立部署,以降低系统性能占用并增强系统安全性。


02:内网环境下如何部署SmartAgent?

在内网环境下部署SmartAgent时需确保内网环境中至少有一台服务器能够访问透视宝平台,在该服务器安装SendProxy,并在其它服务器安装应用Agent和主机Agent时将SendProxy地址修改为该服务器所在地址即可。SendProxy地址修改方式见应用Agent和主机Agent安装说明。


03:部署应用Agent及主机Agent后透视宝平台出现两个相同主机?

服务器内同时部署应用Agent及主机Agent时,需将应用Agent及主机Agent放在同级目录下,如果置于不同目录则会导致同一主机的不同类型监控数据分别发送至透视宝平台不同的主机项下,出现多个重复主机的情况。

出现本情况时,可将应用Agent及主机Agent重新部署于相同目录下,并将透视宝平台上的多余主机暂停即可。


04:应用Agent是否需要root权限?

应用Agent自身不需要额外的root权限,但需具备与被监控应用程序相同的权限,且能够读写应用Agent所在目录。


05:应用Agent安装完毕后是否需要重启应用?

需要,请在安装并配置完毕后重启被监控应用。


06:应用Agent安装完毕后应用重启报错?

安装配置探针后,应用在启动过程中会加载探针,请确保探针路径正确并检查应用日志。


07:主机Agent安装完毕后透视宝平台无监控数据?

Agent启动后无数据的可能性较多,整体排查方式如下:

1, 检查主机Agent是否成功启动,进入OSAgent目录,执行java -jar osagent-bootstrap.jar status 命令,其中"states":"ok"表示Agent运行正常,如命令无返回值或为其它值,说明OSAgent未成功启动,请重新启动OSAgent。

2, 检查Agent所在主机能否与SendProxy正常通信,进入Agent所在主机,执行curl {SendProxyIP}:26789/status,其中{SendProxyIP}需替换为Agent所配置的SendProxy地址,如返回json格式的状态页内容,说明网络通信正常,如无返回内容或命令执行超时,说明网络通信异常。Agent需能够访问SendProxy所在服务器的tcp/26789及udp/26799端口。

3, 检查Agent日志信息,Agent日志位于Agent目录下的logs文件夹,可根据日志内容进一步查看错误信息并进行排查。


08:应用Agent安装完毕后透视宝平台无监控数据?

应用Agent安装后无数据的可能性较多,整体排查方式如下:

1, 应用部署Agent后需重启应用程序方可生效,请检查应用是否已重启

2, 应用Agent只会在应用实际发生业务访问时才会采集到相应性能数据,请访问被监控应用程序,并等待约1分钟后再检查是否有监控数据

3, 检查透视宝平台license是否已满,登录透视宝平台,点击界面右上角的用户名称,打开账户界面,在server配额信息中查看license是否已满

4, 检查应用Agent是否被应用成功加载,应用系统在运行时需成功加载应用Agent方可实现监控,常见各语言的应用Agent检查方式如下,如应用Agent未成功加载,请重新进行应用Agent部署,确保各步骤正确。

a)Java Agent:进入应用所在主机,使用ps命令查看被监控应用进程信息,如Java Agent成功加载,进程参数中应当有javaagent字样,且地址为Java Agent所在目录

b)PHP Agent:进入应用所在主机,使用php –m命令查看php模块加载信息,如PHP Agent成功加载,命令返回结果中应当有SmartAgent

c)DotNet Agent:使用浏览器访问被监控系统页面,刷新2~3次后使用开发者工具查看Document请求的Response Header,如DoNet Agent成功加载,Response Header中应当有cloudwise_request_id项

5, 检查Agent所在主机能否与SendProxy正常通信,进入Agent所在主机,执行curl {SendProxyIP}:26789/status,其中{SendProxyIP}需替换为Agent所配置的SendProxy地址,如返回json格式的状态页内容,说明网络通信正常,如无返回内容或命令执行超时,说明网络通信异常。Agent需能够访问SendProxy所在服务器的tcp/26789及udp/26799端口。

6, 检查Agent日志信息,Agent日志位于Agent目录下的logs文件夹,可根据日志内容进一步查看错误信息并进行排查

如问题仍未解决,请保存以上检查操作的截屏及相应日志信息,反馈至云智慧技术支持人员以获得进一步支持。


09:Docker环境下部署JavaAgent时容器环境不支持bash?

第一步:

将JavaAgent目录中的javaagent.sh文件的开头#!/bin/bash 改为了#!/bin/sh

第二步:

将catalian.sh文件中的

bash /var/cloudwise/JavaAgent_2.0.14/javaagent.sh startindocker

改成:

sh /var/cloudwise/JavaAgent_2.0.14/javaagent.sh startindocker

第三步

将JavaAgent目录中的javaagent.sh文件中的

if [[ "${_sendProxyFromSA}" =~ "127.0.0.1" ]];then

改为

result=$(echo ${_sendProxyFromSA} | grep "127.0.0.1")
if [[ "$result" != "" ]]


10:Docker环境下部署JavaAgent时SendProxy地址配置不正确?

按正常流程部署后,若发现容器内的“JavaAgent/conf/app.conf文件中“SendProxy”的值为http://127.0.0.1:26789说明SendProxy地址配置不正确。

这是由于javaagent配置参数未注入,可通过以下方法排查:

第一步:

hosts=`grep $(hostname) /etc/hosts | awk -F. '{print $1"."$2"."$3"."1}' | head -1`
curl http://${hosts}:27799/smartagent/getHostIP

第二步:

如果能获取到值,则查看容器启动日志,查找错误信息,查看日志命令如下:docker logs <容器ID>

如果未获取到值,则查看容器中的IP,把所有IP的第四位改成“1”,然后逐个执行如下命令(例如:IP为172.18.0.3):

curl http://172.18.0.1:27799/smartagent/getHostIP

直到可以获取到值,停止执行命令。然后把startup.sh中“export hosts=${hosts}“改为:export hosts=”172.18.0.1”,最后重新尝试打镜像,启动容器。


11:Docker环境下部署PHPAgent时容器环境不支持bash?

第一步:

将startup.sh文件和PHPAgent目录中的install_phpindocker.sh文件的开头

#!/bin/bash

改为了

#!/bin/sh

 第二步:

将startup.sh文件中的

bash /var/cloudwise/PHPAgent/install_phpindocker.sh startindocker

改成

sh /var/cloudwise/PHPAgent/install_phpindocker.sh startindocker

第三步:

将PHPAgent目录中的install_phpindocker.sh文件中的

if [[ "${_sendProxyFromSA}" =~ "127.0.0.1" ]];then

改为

result=$(echo ${_sendProxyFromSA} | grep "127.0.0.1")
if [[ "$result" != "" ]]