skywalking实现分布式系统链路追踪

JuliusOswald 发布于4月前

一、背景

随着微服务的越来越流行,我们服务之间的调用关系就显得越来越复杂,我们急需一个 APM 工具来分析系统中存在的各种性能指标问题以及调用关系。目前主流的APM工具有 CAT 、 Zipkin 、 Pinpoint 以及 SkyWalking ,本文主要简单介绍一下 SkyWalking 的搭建。

二、SkyWalking的组成

SkyWalking 主要的几个组成模块。

1、 Agent 主要负责从系统中采集各种指标,链路数据,发送给 oap 服务。

2、 oap 服务接收 Agent 发送过来的数据,存储,执行分析,提供查询和报警功能。

3、 Storage 和 UI 负责存储数据以及查看数据。

三、使用 docker-compose 搭建一个 oap 和 ui 服务

version: '3'
services:
  elasticsearch7:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.5.0
    container_name: elasticsearch7
    restart: always
    ports:
      - 9023:9200
    environment:
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - TZ=Asia/Shanghai
    ulimits:
      memlock:
        soft: -1
        hard: -1
    networks:
      - skywalking
    volumes:
      - elasticsearch7:/usr/share/elasticsearch/data
  oap:
    image: apache/skywalking-oap-server:8.0.1-es7
    container_name: oap
    depends_on:
      - elasticsearch7
    links:
      - elasticsearch7
    restart: always
    ports:
      - 9022:11800
      - 9021:12800
    networks:
      - skywalking
    volumes:
      - ./ext-config:/skywalking/ext-config
  ui:
    image: apache/skywalking-ui:8.0.1
    container_name: ui
    depends_on:
      - oap
    links:
      - oap
    restart: always
    ports:
      - 9020:8080
    environment:
      SW_OAP_ADDRESS: oap:12800
    networks:
      - skywalking

networks:
  skywalking:
    driver: bridge

volumes:
  elasticsearch7:
    driver: local

1、docker-compose文件的目录

skywalking
├── ext-config
│   └── application.yml
├── ext-libs
├── skywalking.yml
└── temp.txt

2、访问

http://localhost:9020

3、注意事项

1、如果我们想覆盖 oap 镜像中的 /skywalking/config 目录下的配置文件,我们可以在 docker 中挂载一个 /skywalking/ext-config 目录,将配置文件丢到此目录中即可。

2、如果我们想覆盖 oap 镜像中的 /skywalking/oap-libs 目录下的jar,我们可以在 docker 中挂载一个 /skywalking/ext-libs 目录,将新的jar包丢到此目录中即可,但是已经存在的jar包无法被覆盖。

3、使用的版本是 8.0.1 ,数据持久化到 es7 中

四、全局日志追踪 traceId 的使用

方案一:

1、引入依赖

<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-logback-1.x</artifactId>
    <version>8.0.1</version>
</dependency>

2、修改 logback.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- Logback Configuration.  -->
<configuration debug="false">

    <!-- ConsoleAppender:把日志输出到控制台 -->
    <appender name="STDOUT" 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.mdc.TraceIdMDCPatternLogbackLayout">
                <Pattern><![CDATA[
%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} [%X{tid}] %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
            ]]></Pattern>
            </layout>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>

方案二(没有用过)

参考如下链接 https://github.com/apache/sky...

五、idea 或 jar 中使用

使用如下命令,需要折成一行
java -jar 
-javaagent:(agentjar包的位置)(eg: /Users/huan/soft/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar )
-Dskywalking.agent.service_name=xxxxx-service 
-Dskywalking.collector.backend_service=127.0.0.1:9022  xxxx.jar

-javaagent 指定 agent jar 包的位置

-Dskywalking.agent.service_name 指定服务名

-Dskywalking.collector.backend_service 指定 oap 服务的地址

六、skywalking的目录解释

apache-skywalking-apm-bin-es7
├── LICENSE
├── NOTICE
├── README.txt
├── agent
                        ├── activations
                      ├── bootstrap-plugins
                      ├── config   -- agent 的配置文件,比如我们上一步使用 -Dskywalking.agent.service_name配置的这些
                      ├── logs
                      ├── optional-plugins     可选插件      (将optional-plugins目录的jar包放到 plugins 目录下即可启动这些插件)
                      ├── plugins                     启用的插件
                     └── skywalking-agent.jar  我们自己的服务需要使用 -javaagent 指定到这个jar的位置
├── bin          oap/ui 的启动脚本
├── config    配置文件
├── licenses
├── oap-libs
├── tools
└── webapp   ui界面

七、访问 skywalking 的界面

skywalking实现分布式系统链路追踪

项目源码

查看原文: skywalking实现分布式系统链路追踪

  • goldenmouse
  • orangerabbit102
  • purplerabbit
  • JudithArthur
  • BloomfieldPenelope
  • JohnsonSimona
  • GissingEd