Apache SkyWalking 入门

Apache SkyWalking 学习笔记目录

开整 SkyWalking 单机环境

  • 第一步,搭建一个 Elasticsearch 服务。
  • 第二步,下载 SkyWalking 软件包。
  • 第三步,搭建一个 SkyWalking OAP 服务。
  • 第四步,搭建一个 SkyWalking UI 服务。
  • 第五步,启动一个 Spring Boot 应用,并配置 SkyWalking Agent。

1. 本地启动 Elasticsearch

使用版本 : elasticsearch-7.6.2 参考 Elastic 官方文档

1
2
3
4
5
6
# 启动
cd elasticsearch-<version>
./bin/elasticsearch  

# 检查是否成功
curl 'http://localhost:9200/?pretty'

2. 下载 SkyWalking

SkyWalking 版本需要和 Elasticsearch 版本匹配

使用版本 : SkyWalking APM v8.7.0 for H2/MySQL/TiDB/InfluxDB/ElasticSearch 7

3. SkyWalking OAP 搭建

vim config/application.yml

  • 重点修改 storage 配置项,通过 storage.selector 配置项来设置具体使用的存储器。
1
2
storage:
  selector: ${SW_STORAGE:elasticsearch7}

启动 SkyWalking OAP 服务

1
2
3
$ bin/oapService.sh

SkyWalking OAP started successfully!

是否真正启动成功,打开 logs/skywalking-oap-server.log 日志文件,查看是否有错误日志。首次启动时,因为 SkyWalking OAP 会创建 Elasticsearch 的索引,所以会“疯狂”的打印日志。

4. SkyWalking UI 搭建

1
$ bin/webappService.sh

是否真正启动成功,打开 logs/webapp-console.log 日志文件,查看是否有错误日志。

访问 UI 界面 : http://127.0.0.1:8080

5. SkyWalking Agent

需要将 apache-skywalking-apm-bin/agent 目录,拷贝到 Java 应用所在的服务器上。这样,Java 应用才可以配置使用该 SkyWalking Agen。我们来看看 Agent 目录下有哪些:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ ls -ls

total 35176
    0 drwxr-xr-x@  7 yunai  staff       224 Dec 24 14:20 activations
    0 drwxr-xr-x@  4 yunai  staff       128 Dec 24 14:21 bootstrap-plugins
    0 drwxr-xr-x@  3 yunai  staff        96 Dec 24 14:12 config # SkyWalking Agent 配置
    0 drwxr-xr-x@  3 yunai  staff        96 Jan  2 19:29 logs # SkyWalking Agent 日志
    0 drwxr-xr-x@ 13 yunai  staff       416 Dec 24 14:22 optional-plugins # 可选插件
    0 drwxr-xr-x@ 68 yunai  staff      2176 Dec 24 14:20 plugins # 插件
35176 -rw-r--r--@  1 yunai  staff  18006420 Dec 24 14:12 skywalking-agent.jar # SkyWalking Agent

Java 启动脚本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/bin/bash

# SkyWalking Agent 配置
# 配置 Agent 名字。一般来说,我们直接使用 Spring Boot 项目的 `spring.application.name` 。
export SW_AGENT_NAME=demo-application
# 配置 Collector 地址。
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800
# 配置链路的最大 Span 数量。一般情况下,不需要配置,默认为 300 。
# 主要考虑,有些新上 SkyWalking Agent 的项目,代码可能比较糟糕。
export SW_AGENT_SPAN_LIMIT=2000
# SkyWalking Agent jar 地址
export JAVA_AGENT=-javaagent:/Users/aoe/tools/apache-skywalking-apm-es7-8.7.0/agent/skywalking-agent.jar

# Jar 启动
java -jar $JAVA_AGENT -jar lab-39-demo-2.2.2.RELEASE.jar

上报日志

官方文档-log4j2 Print trace ID in your logs 支持:log4j、log4j2、logback

log4j2.xml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<appenders>
    <GRPCLogClientAppender name="grpc-log">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </GRPCLogClientAppender>
</appenders>

<loggers>
    <logger name="com.a.eye.skywalking.ui" level="debug" additivity="false">
        <AppenderRef ref="grpc-log"/>
    </logger>
    <logger name="org.apache.skywalking.apm.dependencies" level="INFO"></logger>

    <root level="info">
        <AppenderRef ref="grpc-log"/>
    </root>
</loggers>

阿里云 RocketMQ ONS 需要插件支持

  • 亲测可用 SkyAPM/java-plugin-extensions ⭐️⭐️⭐️⭐️⭐️
  • 官方大佬推荐:参考 SkyWalking rocketMQ-4.x-plugin 插件的源码,修改成支持 ons-client 库的链路追踪。
    • 详见 8.7 阿里云的消息队列 ONS 服务

Idea 启动配置

VM options:

1
-javaagent:/Users/aoe/tools/apache-skywalking-apm-es7-8.7.0/agent/skywalking-agent.jar

Environment variables:

1
SW_AGENT_NAME=web-api;SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800;SW_AGENT_SPAN_LIMIT=2000;

测试依赖服务

RocketMQ

1
2
3
4
5
6
7
8
# 启动
$ ./bin/mqnamesrv

# 自动创建Topic
$ ./bin/mqbroker -n localhost:9876 autoCreateTopicEnable=true

# 创建一个名为"TPC_NORMAL" 的主题
$ ./mqadmin updateTopic -n localhost:9876  -b localhost:10911  -t TPC_NORMAL

源码

结构说明

  • common 公共包
  • web-api Restful API 服务
  • service-user 用户服务
    • 使用 Redis
    • 使用 MySQL
    • 发送 RocketMQ 消息(阿里云的 ONS)
  • service-statistics 统计服务
    • 接收 RocketMQ 消息

API

  • http://localhost:9900/user/1
    • web-api 单节点链路
  • http://localhost:9900/user/cache/1
    • web-api、service-user、service-statistics 全链路
    • 包含 Redis、MySQL、RocketMQ 的链路

下载地址

相关视频

备注

RocketMQ 启动

1
2
3
4
$ ./bin/mqnamesrv

# 自动创建 Topic
$ ./bin/mqbroker -n localhost:9876 autoCreateTopicEnable=true
comments powered by Disqus