【Java监控】使用SkyWalking监控Java服务
你的Java服务是如何监控的呢?
- 1.Null:监控?什么监控?我一个写代码的服务挂了跟我有什么关系?
- 2.命令行:服务挂了?内存泄漏?jstat jmap jcmd,还好不是我写的
- 3.撸代码:Java采集JVM/服务器资源信息 -> Prometheus -> Grafana,请允许我对业务代码稍作修改。
今天,给大家介绍一个对源码0入侵的Java服务监控方式,SkyWalking Agent,只需要启动Java程序的时候加几个参数,就能对Java服务进行可视化监控啦
首次接触SkyWalking是学习SpringCloud的时候,使用SkyWalking进行链路追踪。使用SkyWalking进行链路追踪时得到的拓扑图大概是这个样子(Demo项目),不过链路追踪不是本文介绍的重点,本文主要讲解如何使用SkyWalking进行Java服务的监控。
1.下载并配置SkyWalking的后端服务
SkyWalking是需要后端服务的,即启动Java项目的时使用的Agent只负责像SkyWalking后端服务发送指标信息,本身只是个客户端Jar包
(1)下载
直接到SkyWalking的官网下载APM即可,官网地址:https://skywalking.apache.org/
下载完成后解压,得到这个文件夹:
(2)修改配置文件
SkyWalking的后端服务配置文件在 apache-skywalking-apm-bin/webapp 目录下,主要修改一下服务端口号,默认是8080,如果与你的项目端口不冲突的话,可以忽略这一步
(3)启动SkyWalking后端服务
Windows的话,直接运行apache-skywalking-apm-bin/bin目录下的 startup.bat 就好了,其他系统可以运行sh那个。Windows打开后会出现两个黑色的框框,不用管他,最小化就好,这时我们需要的SkyWalking后端服务实际已经启动了。
(4)验证
使用浏览器打开 localhost:18080,如果访问正常,说明服务已正常启动。
2.启动Java项目和SkyWalking Agent
SkyWalking使用了比较简单的jar包agent方式进行客户端启动,Java服务启动命令添加以下参数
-javaagent:F:\skywalking-agent\skywalking-agent.jar -Dskywalking.agent.service_name=demo -Dskywalking.collector.backend_service=localhost:11800
参数说明:
- -javaagent后添加skywalking-agent.jar的本地路径,哦,对了,这个agent jar包也是从SkyWalking的官网下载就可以
- skywalking.agent.service_name,该Java服务在SkyWalking后端服务中的显示名称=
- skywalking.collector.backend_service,SkyWalking的后端服务地址,如果你像我一样修改了配置文件的话,这里就应该是 localhost:11800
3.查看服务相关监控
使用浏览器访问 localhost:18080
点击Service Name,打开服务监控面板,其中Overview中记录了服务的一些基本监控指标,例如:Service Apdex,请求成功率,平均响应时间等
除了服务响应信息,SkyWalking还可以用来监控JVM。 选择Instance,并点击节点链接打开详情
打开后的Overview是单个节点的服务响应信息
选择JVM后,就是常见的JVM指标啦
可以通过以上仪表盘监控JVM堆内存和堆外内存大小,gc时间和gc次数,以及线程相关信息和JVM加在的Class数量,基本的错误排查大体够用。不过并没有JVM老年代和年轻代的具体使用情况,内存监控只区分了堆外内存和堆内存。如果是为了详细的监控JVM的话,这些指标感觉差点儿意思,后面将再介绍一个拥有更多JVM详细监控指标的开源项目,及搭建时遇到的问题,欢迎大家一下交流