skywalking接入客户端监控的坑
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.
当时就纳闷了,明明启动的时候都指定了连接的服务端。看来不能使用取巧的方式,乖乖依规矩行事,部署个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的代理转发保持一致。
最后看看效果图: