Skywalking之二基础
个人专题目录
Skywalking基础
1. agent的使用
agent探针可以让我们不修改代码的情况下,对java应用上使用到的组件进行动态监控,获取运行数据
发送到OAP上进行统计和存储。agent探针在java中是使用java agent技术实现的,不需要更改任何代
码,java agent会通过虚拟机(VM)接口来在运行期更改代码。
Agent探针支持 JDK 1.6 - 12的版本,Agent探针所有的文件在Skywalking的agent文件夹下。文件目录如下;
+-- agent
+-- activations
apm-toolkit-log4j-1.x-activation.jar
apm-toolkit-log4j-2.x-activation.jar
apm-toolkit-logback-1.x-activation.jar
...
//配置文件
+-- config
agent.config
//组件的所有插件
+-- plugins
apm-dubbo-plugin.jar
apm-feign-default-http-9.x.jar
apm-httpClient-4.x-plugin.jar
.....
//可选插件
+-- optional-plugins
apm-gson-2.x-plugin.jar
.....
+-- bootstrap-plugins
jdk-http-plugin.jar
.....
+-- logs
skywalking-agent.jar
部分插件在使用上会影响整体的性能或者由于版权问题放置于可选插件包中,不会直接加载,如果需要使用,将可选插件中的jar包拷贝到plugins包下。
注:-javaagent配置参数一定要在 -jar 之前。
配置文件详解
# 当前的应用编码,最终会显示在webui上。
# 建议一个应用的多个实例,使用有相同的application_code。请使用英文 agent.application_code=Your_ApplicationName
# 每三秒采样的Trace数量
# 默认为负数,代表在保证不超过内存Buffer区的前提下,采集所有的Trace
# agent.sample_n_per_3_secs=-1
# 设置需要忽略的请求地址
# 默认配置如下
# agent.ignore_suffix=.jpg,.jpeg,.js,.css,.png,.bmp,.gif,.ico,.mp3,.mp4,.html,.svg
# 探针调试开关,如果设置为true,探针会将所有操作字节码的类输出 到/debugging目录下
# skywalking团队可能在调试,需要此文件
# agent.is_open_debugging_class = true
# 对应Collector的config/application.yml配置文件中 agent_server/jetty/port 配置内容
# 例如:
# 单节点配置:SERVERS="127.0.0.1:8080"
# 集群配置:SERVERS="10.2.45.126:8080,10.2.45.127:7600"
collector.servers=127.0.0.1:10800
# 日志文件名称前缀
logging.file_name=skywalking-agent.log
# 日志文件最大大小
# 如果超过此大小,则会生成新文件。
# 默认为300M
logging.max_file_size=314572800
# 日志级别,默认为DEBUG。
logging.level=DEBUG
由于没有修改agent探针中的应用名,所以默认显示的是Your_ApplicationName。我们修改下应用名称,让他显示的更加正确。编辑agent配置文件:
cd /usr/local/skywalking/apache-skywalking-apm-bin/agent/config
vi agent.config
我们在配置中找到这么一行:
# The service name in UI
agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}
这里的配置含义是可以读取到SW_AGENT_NAME配置属性,如果该配置没有指定,那么默认名称为
Your_ApplicationName。这里我们把Your_ApplicationName替换成skywalking_tomcat。
# The service name in UI
agent.service_name=${SW_AGENT_NAME:skywalking_tomcat}
然后将tomcat重启:
./shutdown.sh
./startup.sh
1.1 Linux下Tomcat7和8中使用
要使用Skywalking监控Tomcat中的应用,需要先准备一个Spring Mvc项目,在资源中已经提供了打包好的文件
skywalking_springmvc-1.0-SNAPSHOT.war
核心代码如下:
@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping("/sayHello")
@ResponseBody
public String sayHello(String name){
return "hello world";
}
}
将资源文件下的apache-tomcat-8.5.47.tar.gz 文件上传至虚拟机/usr/local/skywalking目录下,然后解压:
tar -zxvf apache-tomcat-8.5.47.tar.gz
将war包上传至/usr/local/skywalking/apache-tomcat-8.5.47/webapps/下。编
辑/usr/local/skywalking/apache-tomcat-8.5.47/bin/catalina.sh 文件,在文件顶部添加:
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/usr/local/skywalking/apacheskywalking-
apm-bin/agent/skywalking-agent.jar"; export CATALINA_OPTS
修改tomcat启动端口:
vi conf/server.xml
#修改这一行的端口为8081
<Connector port="8080" protocol=...
执行bin目录下的./startup.sh 文件启动tomcat。然后访问地址:
http://虚拟机IP:8081/skywalking_springmvc-1.0-SNAPSHOT/hello/sayHello.do
如果正确打开,能输出hello world。
此时再访问Skywalking的页面,会发现出现了一个服务和端点,同时有一笔调用显示了调用的应用名和接口地址。
由于没有修改agent探针中的应用名,所以默认显示的是Your_ApplicationName。接下来我们修改下应
用名称,让他显示的更加正确。编辑agent配置文件:
cd /usr/local/skywalking/apache-skywalking-apm-bin/agent/config
vi agent.config
我们在配置中找到这么一行:
# The service name in UI
agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}
这里的配置含义是可以读取到SW_AGENT_NAME配置属性,如果该配置没有指定,那么默认名称为
Your_ApplicationName。这里我们把Your_ApplicationName替换成skywalking_tomcat
# The service name in UI
agent.service_name=${SW_AGENT_NAME:skywalking_tomcat}
./shutdown.sh
./startup.sh
1.2 Windows 下Tomcat7和8中使用
Windows下只需要修改f tomcat目录/bin/catalina.bat
文件的第一行为:
set "CATALINA_OPTS=-javaagent:/path/to/skywalking-agent/skywalking-agent.jar"
1.3 Spring Boot中使用
Skywalking与Spring Boot集成提供了完善的支持。
复制一份agent,防止与tomcat使用的冲突
cd /usr/local/skywalking/apache-skywalking-apm-bin/
cp -r agent agent_boot
vi agent_boot/config/agent.config
修改配置中的应用名为:
# The service name in UI
agent.service_name=${SW_AGENT_NAME:skywalking_boot}
将资源文件夹中skywalking_springboot.jar
文件上传到/usr/local/skywalking 目录下。
Controller层代码如下,提供了一个正常访问的接口和一个异常访问接口:
@RestController
public class MyController {
//正常访问接口
@RequestMapping("/sayBoot")
public String sayBoot(){
return "Hello Boot!";
}
//异常访问接口
@RequestMapping("/exception")
public String exception(){
int i = 1/0;
return "Hello Boot!";
}
}
使用命令启动spring boot项目:
java -javaagent:/usr/local/skywalking/apache-skywalking-apmbin/
agent_boot/skywalking-agent.jar -Dserver.port=8082 -jar
skywalking_springboot.jar &
使用jar包启动的项目如果需要集成skywalking,需要添加-javaagent参数,参数值为agent的jar包所在位置。
-Dserver.port参数用于指定端口号,防止与tomcat冲突。
末尾添加& 后台运行模式启动Spring Boot项目。
访问http://虚拟机IP:8082/sayBoot地址来进行访问,访问之后稍等片刻访问Skywalking
的UI页面。
2. RocketBot的使用
Skywalking的监控UI页面成为RocketBot,我们可以通过8080 端口进行访问, 由于8080端口很容易冲
突,可以修改webapp/webapp.yml 来更改启动端口:
server:
port: 8080
更改为9010端口防止冲突。访问http://虚拟机IP:9010/打开RocketBot的页面。
2.1 仪表盘
打开RocketBot默认会出现仪表盘页面:
![](https://img.haomeiwen.com/i4639175/a726f618b063c3eb.png)
仪表盘页面分为两大块:
-
服务仪表盘,展示服务的调用情况
-
数据库仪表盘,展示数据库的响应时间等数据
选中服务仪表盘,有四个维度的统计数据可以进行查看:
-
全局,查看全局接口的调用,包括全局响应时长的百分比,最慢的端点,服务的吞吐量等
-
服务,显示服务的响应时长、SLA、吞吐量等信息
-
端点,显示端点的响应时长、SLA、吞吐量等信息
-
实例,显示实例的响应时长、SLA、吞吐量等信息,还可以查看实例的JVM的GC信息、CPU信息、
内存信息
2.3 拓扑图
Skywalking提供拓扑图,直观的查看服务之间的调用关系:
![](https://img.haomeiwen.com/i4639175/237f0167abc4523d.png)
2.3 追踪
在Skywalking中,每一次用户发起一条请求,就可以视为一条追踪数据,每条追踪数据携带有一个ID
值。追踪数据在追踪页面中可以进行查询:
![](https://img.haomeiwen.com/i4639175/815f705b5e6c5ee8.png)
左侧是追踪列表,也可以通过上方的追踪ID来进行查询。点击追踪列表某一条记录之后,右侧会显示出
此条追踪的详细信息。有三种显示效果:
- 列表
- 树结构
- 表格
可以很好的展现此条追踪的调用链情况而链路上每个节点,可以通过左键点击节点查看详细信息:
当前的接口是HTTP的GET请求,相对比较简单,出现异常情况或者数据库访问,可以打印
出异常信息、堆栈甚至详细的SQL语句。
2.4 告警
Skywalking中的告警功能相对比较简单,在达到告警阈值之后会生成一条告警记录,在告警页面上进行展示。