Back to Javatutorial

1. SkyWalking

docs/Spring全家桶/SpringCloudAlibaba/SpringCloudAlibabaSkywalking.md

1.0.013.6 KB
Original Source

1. SkyWalking

Skywalking ɹڿԴɣԭ OneAPM ʦĿǰڻΪԴύ Apache IJƷͬʱ Zipkin/Pinpoint/CAT ˼·ַ֧ʽ㡣һڷֲʽٵӦóܼϵͳչһ OpenTracing ּ֯ƽصһЩ淶ͱ׼

  • SkyWalking һԴƽ̨ڴӷԭʩռۺϺͿӻݡ
  • SkyWalking ṩһּ򵥵ķάֲʽϵͳͼԿƲ鿴һִAPMרΪԭķֲʽϵͳơ
  • SkyWalking άȶӦýмӣservice, service instanceʵ, endpoint˵㣩ʵͲ˵ˣ˵Ƿеij·˵URI
  • SkyWalking û˽Ͷ˵֮˹ϵ鿴ÿ/ʵ/˵Ķþ

SkyWalking

SkyWalkingҪļģ:

  1. Agent Ҫϵͳвɼָ꣬·ݣ͸ oap
  2. oap Agent ͹ݣ洢ִзṩѯͱܡ
  3. Storage UI 洢Լ鿴ݡ

2. ʹ Docker ٴ SkyWalking 8.0

  1. ** linux ѡ񲢽Ŀ¼**
mkdir skywalking-docker
ƴ
  1. ** skywalking-docker Ŀ¼һΪ skywalking.yaml Ľűļ**
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
ƴ

ע븲 oap е /skywalking/config Ŀ¼µļǿ docker йһ /skywalking/ext-config Ŀ¼ļĿ¼мɡ

  1. ִ skywalking.yaml ű
docker-compose -f skywalking.yaml up
ƴ
  1. ** skywalking Ŀָ̨DẒʼȻǿյ**
http://(װSkyWalkingIP):9020
ƴ

3. Spring Ŀ SkyWalking ͻ

ȫ־׷ traceId ʹã

  1. ** pom ļ**
        <dependency>
            <groupId>org.apache.skywalking</groupId>
            apm-toolkit-logback-1.x
            <version>8.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.skywalking</groupId>
            apm-toolkit-trace
            <version>8.0.1</version>
        </dependency>
ƴ
  1. ** resources Ŀ¼ logback-spring.xml ļ**:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="logger.path" value="/mnt/logs"/>

    <!-- ɫ־ -->
    <!-- ɫ־Ⱦ -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wex"
                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
    <conversionRule conversionWord="wEx"
                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
    <!-- ɫ־ʽ -->
    <property name="CONSOLE_LOG_PATTERN"
              value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %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}}"/>

    <!-- ̨ -->
    
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>info</level>
        </filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <charset>UTF-8</charset>
        </encoder>
    

    <!-- 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>
    

    <!-- ļ -->
    <!-- ʱ levelΪ DEBUG ־ -->
    <!-- 
        <file>${logger.path}/log_debug.log</file>
        &lt;!&ndash;־ļʽ&ndash;&gt;
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> &lt;!&ndash; ַ &ndash;&gt;
        </encoder>
        &lt;!&ndash; ־¼ĹԣڣС¼ &ndash;&gt;
        <rollingPolicy >
            &lt;!&ndash; ־鵵 &ndash;&gt;
            <fileNamePattern>${logger.path}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy >
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            &lt;!&ndash;־ļ&ndash;&gt;
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        &lt;!&ndash; ־ļֻ¼debug &ndash;&gt;
        <filter >
            <level>debug</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
     -->

    <!-- ʱ levelΪ INFO ־ -->
    
        <!-- ڼ¼־ļ·ļ -->
        <file>${logger.path}/log_info.log</file>
        <!--־ļʽ-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- ־¼ĹԣڣС¼ -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- ÿ־鵵·Լʽ -->
            <fileNamePattern>${logger.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--־ļ-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- ־ļֻ¼info -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    

    <!-- ʱ levelΪ WARN ־ -->
    <!-- 
        &lt;!&ndash; ڼ¼־ļ·ļ &ndash;&gt;
        <file>${logger.path}/log_warn.log</file>
        &lt;!&ndash;־ļʽ&ndash;&gt;
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> &lt;!&ndash; ˴ַ &ndash;&gt;
        </encoder>
        &lt;!&ndash; ־¼ĹԣڣС¼ &ndash;&gt;
        <rollingPolicy >
            <fileNamePattern>${logger.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy >
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            &lt;!&ndash;־ļ&ndash;&gt;
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        &lt;!&ndash; ־ļֻ¼warn &ndash;&gt;
        <filter >
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
     -->

    <!-- ʱ levelΪ ERROR ־ -->
    
        <!-- ڼ¼־ļ·ļ -->
        <file>${logger.path}/log_error.log</file>
        <!--־ļʽ-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- ˴ַ -->
        </encoder>
        <!-- ־¼ĹԣڣС¼ -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logger.path}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--־ļ-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- ־ļֻ¼ERROR -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    

    <!--
        rootڵDZѡڵ㣬ָ־ֻһlevel
        level:ôӡ𣬴Сд޹أTRACE, DEBUG, INFO, WARN, ERROR, ALL  OFF
        ΪINHERITEDͬNULLĬDEBUG
        ԰Ԫأʶappenderӵlogger
    -->
    <root level="info">
        
        
        <!---->
        
        <!---->
        
    </root>

</configuration>
ƴ

ע־ãҪⲿ `` á

  1. ** skywalking SkyWalking APMҪҪõ agent**

skywalking صַskywalking.apache.org/downloads/

  1. ѹص apache-skywalking-apm-es7-8.0.1.tar.gz Ŀ¼ṹͼ

ֻҪе agent Ŀ¼Уagent ĶЩ

agent Ŀ¼ƵһƵĿ¼£һҪ JVM Ŀ¼ȻֱӷŵĿ

  1. ** idea JVM **
-javaagent:(agentļڵĿ¼)\agent\skywalking-agent.jar -Dskywalking.agent.service_name=()-service -Dskywalking.agent.instance_name=()-instance -Dskywalking.collector.backend_service=(װSkyWalkingIP):9022
ƴ

Ϊ skywalking Ƿʽʵֲַʽ·ٺܼأһ javaagent ķʽ

Javaagent ʲôJVM ǰ̬ Instrument

Javaagent java һ javaagent ָһ jar ҶԸ java Ҫ

  1. jar MANIFEST.MF ļָ Premain-Class 
  2. Premain-Class ָǸʵ premain()

premain() ⣬ main() ֮ǰĵࡣ Java ʱִ main() ֮ǰjvm -javaagent ָ jar Premain-Class premain()

  1. ǰƪдĿЩĿȫϱߵһ飬Ч
  • طherring-gatewayzuul ͳһ΢
  • ֤herring-oauth2oauth2 ֤΢
  • Աherring-member-service΢֮һյᵽ֤֤
  • herring-orders-service΢֮յᵽ֤֤
  • Ʒherring-product-service΢֮յᵽ֤֤

  1. һ£ tokenȻ /api/member/update
#### 

POST http://localhost:8080/oauth2-service/oauth/token?grant_type=password&username=admin&password=123456&client_id=app-client&client_secret=client-secret-8888&scope=all
Accept: */*
Cache-Control: no-cache
ƴ

õؽ token

{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiZ2F0ZXdheS1zZXJ2aWNlIl0sInVzZXJfbmFtZSI6ImFkbWluIiwiand0LWV4dCI6IkpXVCDmianlsZXkv6Hmga8iLCJzY29wZSI6WyJhbGwiXSwiZXhwIjoxNjEzOTcwMDk2LCJhdXRob3JpdGllcyI6WyJST0xFX0FETUlOIl0sImp0aSI6IjU4MDY5ODlhLWUyNDQtNGQyMy04YTU5LTBjODRiYzE0Yjk5OSIsImNsaWVudF9pZCI6ImFwcC1jbGllbnQifQ.EP4acam0tkJQ9kSGRGk_mQsfi1y4M_hhiBL0H931v60",
  "token_type": "bearer",
  "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiZ2F0ZXdheS1zZXJ2aWNlIl0sInVzZXJfbmFtZSI6ImFkbWluIiwiand0LWV4dCI6IkpXVCDmianlsZXkv6Hmga8iLCJzY29wZSI6WyJhbGwiXSwiYXRpIjoiNTgwNjk4OWEtZTI0NC00ZDIzLThhNTktMGM4NGJjMTRiOTk5IiwiZXhwIjoxNjE0MDM0ODk2LCJhdXRob3JpdGllcyI6WyJST0xFX0FETUlOIl0sImp0aSI6IjQxZGM1ZDc1LTZmZDgtNDU3My04YmRjLWI4ZTMwNWEzMThmMyIsImNsaWVudF9pZCI6ImFwcC1jbGllbnQifQ.CGmGx_msqJBHxa95bBROY2SAO14RyeRklVPYrRxZ7pQ",
  "expires_in": 7199,
  "scope": "all",
  "jwt-ext": "JWT չϢ",
  "jti": "5806989a-e244-4d23-8a59-0c84bc14b999"
}
ƴ

ִ /api/member/update

####

GET http://localhost:8080/member-service/api/member/update
Accept: */*
Cache-Control: no-cache
Authorization: bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiZ2F0ZXdheS1zZXJ2aWNlIl0sInVzZXJfbmFtZSI6ImFkbWluIiwiand0LWV4dCI6IkpXVCDmianlsZXkv6Hmga8iLCJzY29wZSI6WyJhbGwiXSwiZXhwIjoxNjEzOTcwMDk2LCJhdXRob3JpdGllcyI6WyJST0xFX0FETUlOIl0sImp0aSI6IjU4MDY5ODlhLWUyNDQtNGQyMy04YTU5LTBjODRiYzE0Yjk5OSIsImNsaWVudF9pZCI6ImFwcC1jbGllbnQifQ.EP4acam0tkJQ9kSGRGk_mQsfi1y4M_hhiBL0H931v60
ƴ

DZ̽չʾ:

ͼչʾ

·׷ٽչʾ

ߣײ˵ ӣhttps://juejin.cn/post/6931922457741770760 Դϡ ȨСҵתϵ߻Ȩҵתע

ο

https://lijunyi.xyz/docs/SpringCloud/SpringCloud.html#_2-2-x-%E5%88%86%E6%94%AF https://mp.weixin.qq.com/s/2jeovmj77O9Ux96v3A0NtA https://juejin.cn/post/6931922457741770760 https://github.com/D2C-Cai/herring http://c.biancheng.net/springcloud