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的代理转发保持一致。
最后看看效果图: