skywalking教程 文档手册 使用详情 从搭建到集群

SkyWalking

性能监视工具 ,是一个APM(application performance Mange)工具
官网:https://skywalking.apache.org/
文档:https://skywalking.apache.org/docs/main/v8.4.0/readme/
中文文档:https://skyapm.github.io/document-cn-translation-of-skywalking/

无侵入性:即不需要改变代码
使用了java agent(java探针技术) 针对字节码做了增强处理
在类加载前就可以增强 内部方法名为premain (在main方法之前,jdk1.5之后引入)

注意skywalking 可能出现一个全局的坑,在windows下启动 dos界面可能会卡住,这时需要按下ESC键, 在监控UI界面 有的时候可能不刷新,则需要手动多点击其它页面再切回来
且skywalking截至目前(8.7版本) 都不支持mysql5.5的存储,这个和mysql的行格式有关 之前给作者提交过issues 但是很遗憾作者可能有自己的考虑 似乎不打算做修改 往后版本应该不知道会不会支持5.5, 下面是我在github的反馈 描述5.5会出现的问题 感兴趣可以看看 不感兴趣可以跳过

Index colum too large . I notice the method of createTableIndexes in MysqlTableInstaller class, it make a distinction between Column.getLength() < 256 and extraQueryIndex. However , the id colum is also index colum default. Such as the inner talbe of skywalking creating: alarm_record , the length of id colum is 512 more than 255, so it occur error : Index colum too large because 512*3 >>767 bytes . And In mysql 5.7 or higher ,it’s right because in those version , creating table sql will append ROW_FORMAT=DYNAMIC default but 5.5 or lower is COMPACT. ROW_FORMAT can only act on table but not database , but the creating table sql is writed by skywalking method in H2TableInstaller#createTable , it seems our user can not change.Our use can only set GLOBAL innodb_large_prefix = ON in mysql ,but it doesn’t act on COMPACT (DYNAMIC is active)

这里有个小细节,如果把已有项目的mysql数据库从5.5换成5.7 ,记得要关闭严格模式,5.7默认是开启的 ,而5.5默认是关闭的

环境部署

组件介绍
.skywalking oapservice 集群 (服务端 收集处理数据)
.skywalking webapp UI 服务  (和服务端在一个安装包内)
.程序端:要绑定java探针 用于给oapservice收集数据

下载: 官网选择SkyWalking APM ,点击Distribution 下载存储方式带mysql的tar (根据自己存储需要)

启动:bin目录下的startup.bat (会自动启动oapService.bat和webappService.bat;即同时启动了服务端及UI界面)

linux下启动startup.sh

目录功能及介绍

webapp目录:UI界面的jar包及yml配置,在yml 修改界面默认端口(界面默认端口为8080容易冲突)

oap-libs目录: 服务端jar包

config目录:application.yml

修改数据存储方式为mysql或其它(默认为h2 内存方式存储 重启数据会丢失):
storage:
    selector:${SW_STORAGE:h2}
h2改为mysql 并在mysql节点下更改数据库地址密码等配置

库需要我们指定 表会自动创建,但是表非常多 为了不影响现有库查看 需要新建一个库

mysql:
    properties:
        jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://127.0.0.1:3306/sw"}

注:改成mysql之后会有一个坑 在oap-libs目录中(即sw的服务端jar包目录) 并没有内置mysql驱动jar包,需要我们手动复制一个进去

修改默认端口:
skywalking-oap-service 服务启动后会暴露两个端口:11800和12800分别为收集监控数据端口 和 接收UI前端请求的端口 
(我们的项目配置端口为监控数据端口)

agent目录: 和我们的项目服务进行绑定 配置如下:

-javaagent 配置agent.jar包路径

-DSW_AGENT_NAME 我们的项目服务名(最好与nacos保持一致)

-DWS_AGENT_COLLECTOR_BACKEND_SERVICES 配置sw oap服务端监控端口

在IDEA的VM options里面配置

-javaagent:D:\apache-skywalking-apm-es7-8.5.0\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar 
-DSW_AGENT_NAME=user 
-DWS_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800

linux配置: 命令启动jar包方式 java -jar xxx.jar 在java和-jar之间加上述配置

java -javaagent:/usr/xxx/xxx/skywalking-agent.jar 
-DWS_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 
-DSW_AGENT_NAME=user -jar ourProject.jar

windows示例

java -javaagent:D:\apache-skywalking-apm-es7-8.5.0\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar -DSW_AGENT_NAME=user  -DWS_AGENT_COLLECTOR_BACKEND_SERVICES=172.26.92.51:11800,172.26.92.50:11800 -Xmx1024M -Xms512M -jar user-0.0.1-SNAPSHOT.jar

注意:默认是不显示gateway服务的,需要在agent/optional-plugins(可选插件目录)找到gateway相关的jar包 选择较新的版本复制进agent/plugins目录中

logs目录: 日志文件(windows下日志只会输出在文件中,即使报错也不会输出在控制台,所以启动startup 尤其首次启动时 需要观察oap和webapp日志文件是否存在ERROR,linux启动成功会提示start successful)

service维度:

Service Apdex(数字):当前服务的评分
Service Apdex(折线图):不同时间的Apdex评分
Successful Rate(数字):请求成功率
Successful Rate(折线图):不同时间的请求成功率
Servce Load(数字):每分钟请求数
Servce Load(折线图):不同时间的每分钟请求数
Service Avg Response Times:平均响应延时,单位ms
Global Response Time Percentile:百分比响应延时
Servce Instances Load:每个服务实例的每分钟请求数
Show Service Instance:每个服务实例的最大延时
Service Instance Successful Rate:每个服务实例的请求成功率

自定义链路追踪:

自定义意义:例如希望追踪某个业务方法的入参及返回值(点击链路即可看到信息)

第一步:需要引入依赖

<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-trace</artifactId>
    <!-- 和sw的版本一致即可 -->
    <version>8.5.0</version>
</dependency>

第二步:在业务方法上面加上@Trace注解 (该注解为记录方法注解)

第三步:再追加上@Tags或@Tag注解 (该注解用于记录方法的入参或返回值)

key一般可以指定为方法名或参数名(自定义),

value不能随便填 arg[0]表示下标为0的参数 ,returnedObj表示返回值

@Trace
@Tags({@Tag(key = "param", value = "arg[0]"), @Tag(key = "test", value = "returnedObj")})
private String test(String param) {
    return "xxx";
}

性能剖析:

可以定位到具体代码 占用时间

操作方法:性能剖析页面点击新建任务
选择实例服务 输入端点名称(接口相对路径url)

skyWalking链路追踪与logback日志整合

需要在oap-libs 目录中加上 log4j-web.jar
且需要mysql5.7 或以上版本 (需要创建表时行格式默认为dynamic或compressed的版本)

第一步: 在pom文件中添加整合依赖

<!-- skywalking和logback整合 print traceId in our logs-->
<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-logback-1.x</artifactId>
</dependency>

第二步: 在resources下新建名为logback-spring.xml 的文件

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <!-- 引入springboot 默认的 logback xml 配置文件 (springboot default log config)-->
    <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">
                <!-- 来源于defaults.xml 可以全局查找文件找到springboot中的该配置文件 如果无需更改 只需要引入>${CONSOLE_LOG_PATTERN}-->
                <!-- 我们需要记录traceId 所以需要加上[%tid] 加在下面任意一个不破坏格式的地方-->
                <!--source from springboot logback defaults.xml,default:${CONSOLE_LOG_PATTERN}
                 but we need to note the traceId ,add [%tid]-->
                <!-- https://github.com/apache/skywalking/tree/master/docs/en/setup/service-agent/java-agent -->
                <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>

    <!-- grpc方式将traceId推送至skywalking-->
    <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>
注意:当skyWalking部署在远程服务的时候 需要在./agent/config目录下面对agent.config配置文件追加:

SW_GRPC_LOG_SERVER_HOST 对应服务地址 没有该配置默认为127.0.0.1

plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:192.168.0.1}
plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_SERVER_PORT:11800}
plugin.toolkit.log.grpc.reporter.max_message_size=${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760}
plugin.toolkit.log.grpc.reporter.upstream_timeout=${SW_GRPC_LOG_GRPC_UPSTREAM_TIMEOUT:30}

告警功能: (如果只需使用内置基础功能则无需再配置)

SkyWalking告警功能是在6.x版本新增的的,其核心由一组规则驱动,这些规则定义在config目录的alarm-settings.yml文件中。
SkyWalking的发行版都会默认提供该配置,里面预先定义了一些常用的告警规则

1. 过去3分钟内服务平均响应时间超过1秒
2.过去2分钟服务成功率低于80%
3.过去3分钟内服务响应时间超过1s的百分比
4,服务实例在过去2分钟内平均响应时间超过1s.并且实例名称与正则表达式匹配,
5.过去2分钟内端点平均响应时间超过1秒
6.过去2分钟内数据库访问平均炯应时间超过1秒
7.过去2分钟内端点关系平均响应时间超过1秒。
告警规则配置项的说明

规则名称: 告警信息中显示的唯一名称。必须以过 _rule 结尾,前綴可自定义

Metrics name:配置时只需要取 _rule 前的名称;度量名称,取值为oal脚本中的度量,目前只支持long、double和Int型

Include names:该规则作用于哪些实体名称,比如服务名,终端名(可选,默认为全部〕

Exclude names:该规则作不用于哪些实体名称,比如服务名,终惴名(可选,默认为空)

Threshold:阈值, 例如2000为2s

OP:操作符,目前支持> < =

Period:多久告警规则需要被核实一下。这是一个时间窗囗,与后端部署环境时间相匹配

Count: 在一个Period窗口中,如值values超过Threshold值(按op) 达到count值需要发送警报

Silence period : 在时间N中 触发报警后,在TN->TN+ period 这个阶段不告警 ,默认情况下 它和period一样,意味着相同的告警 在同一个period内只会触发一次

webhooks: 网络钩子 可以理解为web回调 出现告警时,可以往我们任意一个服务发送请求,
我们可以在服务里面写业务代码:如发送短信、邮件等 请求方式:http, post, Content-type:application/json

基于List<org.apache.skywalking.oap.server.core.alarm.AlarmMessage>进行序列化的
,可以自定义一个类 字段保持上述一致

skyWalking 集群

1.skywalking的config目录 application.yml配置文件 指定nacos地址 (两处配置 一处配置集群 一处为动态配置 在配置文件中搜索nacos即可)

cluster:
    nacos: 

2.配置ui服务 webapp.yml 文件的listOfServers 写多个地址 用逗号隔开

3.在vm options里面 地址同样指定多个地址

skywalking(8.5)在nacos中只会显示一个实例 但实际是正常的

Guess you like

Origin blog.csdn.net/qq_36268103/article/details/119750035