skywalking實現分佈式系統鏈路追蹤

1、背景

    隨着微服務的愈來愈流行,咱們服務之間的調用關係就顯得愈來愈複雜,咱們急需一個APM工具來分析系統中存在的各類性能指標問題以及調用關係。目前主流的APM工具備CATZipkinPinpoint以及SkyWalking,本文主要簡單介紹一下SkyWalking的搭建。html

2、SkyWalking的組成

SkyWalking主要的幾個組成模塊。
一、Agent 主要負責從系統中採集各類指標,鏈路數據,發送給 oap服務。
二、oap服務接收Agent發送過來的數據,存儲,執行分析,提供查詢和報警功能。
三、StorageUI負責存儲數據以及查看數據。java

3、使用 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
複製代碼

一、docker-compose文件的目錄

skywalking
├── ext-config
│   └── application.yml
├── ext-libs
├── skywalking.yml
└── temp.txt
複製代碼

二、訪問

http://localhost:9020node

三、注意事項

一、若是咱們想覆蓋oap鏡像中的/skywalking/config 目錄下的配置文件,咱們能夠在 docker 中掛載一個/skywalking/ext-config目錄,將配置文件丟到此目錄中便可。
二、若是咱們想覆蓋oap鏡像中的/skywalking/oap-libs 目錄下的jar,咱們能夠在 docker 中掛載一個/skywalking/ext-libs目錄,將新的jar包丟到此目錄中便可,可是已經存在的jar包沒法被覆蓋。
三、使用的版本是 8.0.1,數據持久化到 es7git

4、全局日誌追蹤 traceId 的使用

方案一:

一、引入依賴

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

二、修改 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>

複製代碼

方案二(沒有用過)

參考以下連接 github.com/apache/skyw…github

5、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 服務的地址web

6、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界面
複製代碼

7、訪問 skywalking 的界面

skywalking.jpg

項目源碼

docker-compose.yml文件 gitee.com/huan1993/co…docker

參考連接

SkyWalking官網 skywalking.apache.org/zh/
SkyWalking的docker github地址 github.com/apache/skyw…
elasticsearch www.elastic.co/guide/en/el…
skywalking中文文檔 skyapm.github.io/document-cn…apache

相關文章
相關標籤/搜索