SW快速上手

  • Skywalking 本地安装(windows为例)
  • skywalking
  • idea接入
  • MySql 数据持久化
  • 自定义链路追踪
  • 性能剖析
  • 日志
  • 告警


Skywalking 本地安装(windows为例)

skywalking

本次使用的是 apache-skywalking-apm-bin-es7(https://archive.apache.org/dist/skywalking),打开文件夹,打开目录 bin/

skywalking 简单验证java skywalking jvm 设置_skywalking 简单验证java


.bat 是windows 启动。点击之后会出钱两个command,这个时候就启动成功了。

打开localhost:8080,出现如下页面,启动成功

skywalking 简单验证java skywalking jvm 设置_skywalking 简单验证java_02


如果想改变8080端口,在 apache-skywalking-apm-bin-es7\webapp 当中有webapp.yml文件,打开文件修改端口即可。

skywalking 简单验证java skywalking jvm 设置_java_03

idea接入

在vm option当中加入以下命令

skywalking 简单验证java skywalking jvm 设置_java_04

-javaagent:D:/###/skywalking/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar
-Dskywalking.agent.service_name=rare_disease
-Dskywalking.collector.backend_service=127.0.0.1:11800

其中第一行选择自己文件目录下apache-skywalking-apm-bin-es7/agentskywalking-agent.jar地址。

skywalking 简单验证java skywalking jvm 设置_xml_05

第二行则是自定义服务名,之后再skywalking上展示的就是这个服务名称。

第三行则是skywalking上报的路径端口。本地默认用11800端口

启动项目

skywalking 简单验证java skywalking jvm 设置_java_06


表明skywalking成功的接进去了,之后则需要对当中随便一个接口进行一次访问,刷新skywalking,仪表盘当中就会有数据了

skywalking 简单验证java skywalking jvm 设置_xml_07

MySql 数据持久化

如何让skywalking监控数据持久化呢?在目录 apache-skywalking-apm-bin-es7\config 文件夹中打开 application.yml文件

skywalking 简单验证java skywalking jvm 设置_xml_08


在storage:此处将 selector: ${SW_STORAGE:h2}改成你想要改成的存储方式,此处我们使用mysql 则:

selector: ${SW_STORAGE:mysql}

在下面的mysql配置当中,指定数据库为 swtest ,需要提前给swtest数据库建好。 之后修改下面的账户密码。

skywalking 简单验证java skywalking jvm 设置_java_09


保存之后重新启动 startup.bat

== 注意,此处有个小坑==

在 apache-skywalking-apm-bin-es7\oap-libs 当中缺少数据库连接的jar包,导致直接启动会出现闪退的问题。需要自己从本地maven仓库等地方将mysql的连接jar包拷贝一份过来

skywalking 简单验证java skywalking jvm 设置_skywalking 简单验证java_10


之后再次启动startup.bat,打开数据库,就会发现它会开始创建表

skywalking 简单验证java skywalking jvm 设置_skywalking 简单验证java_11


此时数据持久化就成功了

自定义链路追踪

首先加入pom依赖

<dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-trace</artifactId>
            <version>8.5.0</version>
        </dependency>

之后在需要追踪的方法上加上@Trace方法

这边写了个小demo

//controller
    @GetMapping("/get")
    @ResponseBody
    @Trace
    private ResponseDto<String> test(@RequestParam("uuid") final String uuid) {
        return new ResponseDto(grapService.query(uuid));
    }
// iservice
    /**
     * test skywalking trace
     * @param uuid
     * @return
     */
    String query(String uuid);
//service
    @Override
    public String query(String uuid) {
         return MD5.create().digestHex(uuid);
    }

此时调用接口

skywalking 简单验证java skywalking jvm 设置_apache_12


可以在仪表盘 追踪下面看到详细信息。点击之后,还能看到跨度信息。

skywalking 简单验证java skywalking jvm 设置_xml_13


于此同时,我们可以将监控输入输出,在类上加上注解:

@Tags({@Tag(key = "parm",value = "arg[0]"),
            @Tag(key = "return",value = "returnedObj")})

之后,我们就可以看到,这边可以打印入参出参了。入参出参当中的class一定要复写tostring方法,才能输出想要的值

skywalking 简单验证java skywalking jvm 设置_java_14

性能剖析

skywalking 简单验证java skywalking jvm 设置_apache_15


此处我们可以在仪表盘当中新建任务,选择好想要监控的端口。

skywalking 简单验证java skywalking jvm 设置_skywalking 简单验证java_16


监控结束后出现结果,选择分析,会有详细的堆栈以及消耗时间

skywalking 简单验证java skywalking jvm 设置_apache_17


可以用来排查哪一步影响性能。(感觉与 Arthas 的 trace 命令有异曲同工之妙)

日志

//加入pom依赖
 <dependency>
     <groupId>org.apache.skywalking</groupId>
       <artifactId>apm-toolkit-logback-1.x</artifactId>
       <version>8.5.0</version>
 </dependency>

创建logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 引入 Spring Boot 默认的 logback XML 配置文件  -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>


    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 日志的格式化 -->
        <encoder  class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                <Pattern>-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} [%tid] %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}</Pattern>
            </layout>
        </encoder>

    </appender>

    <appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>

    <!-- 设置 Appender -->
    <root level="INFO">
        <appender-ref ref="console"/>
        <appender-ref ref="grpc-log"/>
    </root>
</configuration>

启动成功后,调用即可将日志上传,在页面看到。

告警

官方文档 配置文件在 \apache-skywalking-apm-bin-es7\config 当中的alarm-setting.yml文件当中,可以配置回调函数,告警的时候调用微信/飞书等发送告警信息等。

skywalking 简单验证java skywalking jvm 设置_java_18