利用SkyWalking对分布式应用进行监控

1. 概述

1.1 SkyWalking 是什么?

FROM http://skywalking.apache.org/
分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。
提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。
—— 官网

1.2 目的

本文主要利用SkyWalking对分布式应用进行请求链路监控,为后续的性能优化提供指南。

1.3 参考链接

  • SkyWalking官网:推荐读一读“博客”栏目
  • Github
  • 中文文档
  • skywalking-docker

1.4 版本

本文使用skywalking版本为最新的8.1.0

2. 安装

本文使用 skywalking-docker仓库的脚本进行安装试用。首先进入仓库,选择你需要的版本,下载对应的 docker-compose.yml 文件到本地。

可根据实际情况,对docker-compose.yml文件进行适当的修改。

此处,我们默认不该动任何内容。

启动容器:

docker-compose -d

首次执行的话,可能需要拉取镜像,请耐心等待。

启动完成。访问 http://127.0.0.1:8080,正常访问即表示安装成功。

3. 集成

3.1 下载skywalking程序

此处我们使用8.1.0版本。访问https://github.com/apache/skywalking/releases,点击下载8.1.0版本的压缩包。

下载 完成后,进行解压,项目目录如下:

项目文件目录

后续,我们主要关注agent文件夹,这里面包含了探针代理工具包、相关插件及其配置文件。

3.2 本地集成

我们以idea作为开发工具,进行agent的集成。

首先,我们准备一个Spring boot应用;
然后配置jvm的启动参数;

编辑启动配置文件
配置jvm参数
# 代理包绝对路径
-javaagent:/your/path/apache-skywalking-apm-bin/agent/skywalking-agent.jar
# 项目名称
-Dskywalking.agent.service_name=demo
# sw后台服务地址
-Dskywalking.collector.backend_service=127.0.0.1:11800

全部配置参数参见:agent安装与配置

最后启动并访问测试http服务,稍等一会儿,skywalking的页面即可看到监控信息。

监控页面

3.3 远程集成

远程应用的集成,需要注意的是,要把“agent整个文件夹”复制到远程服务器,然后按照本地集成的方法,将jvm启动参数配置到容器的配置文件,例如tomcat的“bin/catalina.sh ”文件中。

JAVA_OPTS="$JAVA_OPTS -javaagent:/home/demo/sharefile/ext_lib/agent/skywalking-agent.jar -Dskywalking.agent.service_name=demo -Dskywalking.collector.backend_service=192.168.0.104:11800"

3.4 自定义增强监控

文档地址

自定义增强功能,可以通过xml配置的方式,实现对方法(端点)的监控。例如:我们需用监控socket请求的信息,但是目前skywalking没有监控socket的插件,所以我们可以用自定义增强的方法来采集处理请求的方法。

如何配置

实现对类的自定义增强需要以下几步。

  1. 激活插件,将插件从optional-plugins/apm-customize-enhance-plugin.jar移动到plugin/apm-customize-enhance-plugin.jar。
  2. 在agent.config中配置plugin.customize.enhance_file,指明增强规则文件,比如/absolute/path/to/customize_enhance.xml。
  3. 在customize_enhance.xml中配置增强规则。


    
        
        
            arg[0]
            arg[1]
            arg[3].[0]
            arg[2].['k1']
            arg[4].[1]
            arg[4].[2]
        
        
        
            arg[0]
            arg[0]
            arg[1]
        
        
            arg[0].id
            arg[0].model1.name
            arg[0].model1.getId()
            arg[0].os.[1]
            arg[0].getM().['k1']
        
    
    
        
            arg[0]
            arg[1]
        
        
            arg[0].[0]
        
        
            arg[0].[0]
            arg[1]
        
    

文件中的配置说明。

配置 说明
class_name 要被增强的类
method 类的拦截器方法
operation_name 如果进行了配置,将用它替代默认的operation_name
operation_name_suffix 表示在operation_name后添加动态数据
static 方法是否为静态方法
tag 将在local span中添加一个tag。key的值需要在XML节点上表示。
log 将在local span中添加一个log。key的值需要在XML节点上表示。
arg[x] 表示输入的参数值。比如args[0]表示第一个参数。
.[x] 当正在被解析的对象是Array或List,你可以用这个表达式得到对应index上的对象。
.['key'] 当正在被解析的对象是Map, 你可以用这个表达式得到map的key。

!!!重要注意点!!!
!!!重要注意点!!!
!!!重要注意点!!!

  1. 上边第2步,配置plugin.customize.enhance_file=路径,此处路径必须是xml文件的绝对路径;
  2. 上边第3步,配置method值时,例如“method(java.lang.String,int.class)”,方法参数之间,不能有空格

你可能感兴趣的:(利用SkyWalking对分布式应用进行监控)