skywalking接入客户端监控的坑

skywalking接入客户端监控的坑
  该文是接上上文,应用性能监控skywalking服务端配置好的,进行jar包客户端接入监控的工作。
  首先说明下:skywalking服务端和客户端是两个不同的机器,后面我会说下为啥要这样强调,因为之前做的一个skywalking测试环境是用docker跑的,且监控和被监控端部署在同一台服务器。  
  话说我以为接入客户端很简单,把服务端的skywalking-agent.jar拷到被监控机器上,然后运行启动命令:
java -javaagent:/home/{用户名}/monitor/skywalking-agent.jar \
   -Dskywalking.agent.service_name=被监控端的一个服务名 \
   -jar /home/{用户名}/app/jar_data/服务名.jar  --server.port=19090  -Dskywalking.collector.backend_service=192.168.2.228:11800

  结果返回报错信息:Failed to read the config file, skywalking is going to run in default config.

org.apache.skywalking.apm.agent.core.conf.ConfigNotFoundException: Failed to load agent.config.

     当时就纳闷了,明明启动的时候都指定了连接的服务端。看来不能使用取巧的方式,乖乖依规矩行事,部署个skywalking的客户端。

  欢喜地找到个下载地址:https://archive.apache.org/dist/skywalking/,一开始下了个6.6.0版本,后来不行又下载个7.0.0版本,做无谓的挣扎。

  修改配置文件:agent.config,包括

(1)服务名(The service nmae in UI),随意

(2)服务器地址(Backend service addresses),改成skywalking的服务端地址:xxx:11800

  启动服务,又是空的(这次我不怀疑自己的眼睛 = =)

   服务端日志,没报错信息;客户端日志(apache-skywalking-apm-bin-es7/agent/logs/skywalking-api.log),发现服务注册失败。

   我以为版本不兼容,试了7.0.0.版本,不行;以为是skywalking的权限验证功能:http://t.zoukankan.com/kebibuluan-p-14024134.html。说要采用 Token 认证确保采集的应用数据是被信任的,当时还真以为这个是解决方法,在agent的配置文件里明文写了skywalking的登录密码,因为不知道具体要写什么,服务端application.yml 的参数SW_AUTHENTICATION 是空的!

  最后看清楚,这文章的报错信息是:PERMISSION_DENIED

  报错信息里压根没有这个关键字,应该不是同一个问题,继续找。当时我一直FQ用谷歌找原因,找来找去没有合适的,最后切换到度娘,终于发现问题解决关键【https://codeantenna.com/a/pIA8ShKaJ7】

如果skywalking的服务端和被监控客户端不是在同一台服务器,需要把skywlking的agent目录拷贝到被监控端。之前用docker跑的时候,客户端和服务端在同一个服务器上,所以没这个问题

 

   客户端不要自作聪明地重新下载,用服务端的agent目录就好了。

   今天还解决了另一个问题:prometheus的jvm监控和这个skywalking性能监控并行跑起来,附上命令不累赘了: 

java -javaagent:/home/{用户}/monitor/jmx_exporter/jmx_prometheus_javaagent-0.16.0.jar=30100:/home/{用户}/monitor/jmx_exporter/simple-config.yml -javaagent:/home/{用户}/monitor/sw/apm/agent-228/skywalking-agent.jar \
   -jar /home/{用户}/app/jar_data/{项目名}.jar  --server.port=8088 

 cat simple-config.yaml

---
lowercaseOutputLabelNames: true
lowercaseOutputName: true
whitelistObjectNames: ["java.lang:type=OperatingSystem"]
rules:
 - pattern: 'java.lang<type=OperatingSystem><>((?!process_cpu_time)\w+):'
   name: os_$1
   type: GAUGE
   attrNameSnakeCase: true

   server.port 是jar包启动的后台地址,跟nginx的代理转发保持一致。

 

  最后看看效果图:

 

 

 

 

 

 

 

 

 

 

 

posted @ 2022-05-25 22:18  windysai  阅读(4420)  评论(0编辑  收藏  举报