精华内容
下载资源
问答
  • 所以可以通过国产软件 Skywalking 辅助开发。 下载地址: http://skywalking.apache.org/zh/downloads/ ps: 我并没有选择最新的版本,因为怕不稳定,最终版本是6.6.0Binary Distribution (Windows) 解压后的目录...

    当服务多起来的时候,发生错误以后,都不清楚是在哪个环节出了错。需要通过日志逐一排查,这就比较耗时了。所以可以通过国产软件 Skywalking 辅助开发。

    下载地址:

    http://skywalking.apache.org/zh/downloads/

    ps: 我并没有选择最新的版本,因为怕不稳定,最终版本是 6.6.0 Binary Distribution (Windows)

    解压后的目录结构如下:

    258

    Skywalking 是使用 Java Agent 服务器探针来收集和发送数据到归集器。

    有三种方式可以将相关服务的数据发送到 Skywalking 监听的端口(11800):

    • IDEA 部署探针
    • Java 启动方式部署探针
    • Docker 启动方式部署探针

    探针(也就是 skywalking-agent.jar) 放在 agen 目录下。

    IDEA 部署探针

    修改项目的 VM 运行参数,点击菜单栏中的 Run --> EditConfigurations,这里我以项目 platform-apihub

    为例:

    259

    • -javaagent:用于指定探针路径

    • -Dskywalking.agent.service_name:用于重写 agent/config/agent.config 配置文件中的服务名

    • -Dskywalking.collector.backend_service:用于重写 agent/config/agent.config 配置文件中的服务地址

    我用的是eclipse,这里贴上eclipse的配置

    -javaagent:C:\\ProgramFiles\\ASF\\apache-skywalking-apm-bin-8.3.0\\agent\\skywalking-agent.jar
    -Dskywalking.agent.service_name=za-xdecision-admin
    -Dskywalking.collector.backend_service_127.0.0.1:11800

    Java 命令行启动方式

    java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=nacos-provider -Dskywalking.collector.backend_service=localhost:11800 -jar yourApp.jar
    

    通过日志可以发现成功加载到探针

    260

    防丢失

    DEBUG 2020-06-13 12:10:33:180 main AgentPackagePath : The beacon class location is jar:file:/D:/skywalking/apache-skywalking-apm-6.6.0/apache-skywalking-apm-bin/agent/skywalking-agent.jar!/org/apache/skywalking/apm/agent/core/boot/AgentPackagePath.class. 
    INFO 2020-06-13 12:10:33:182 main SnifferConfigInitializer : Config file found in D:\skywalking\apache-skywalking-apm-6.6.0\apache-skywalking-apm-bin\agent\config\agent.config. 
    12:10:36.441 [SkywalkingAgent-2-GRPCChannelManager-0] DEBUG org.apache.skywalking.apm.dependencies.io.netty.util.internal.logging.InternalLoggerFactory - Using SLF4J as the default logging framework
    

    ps:一定要调用服务的接口,才会在 skywalking 上有相应的数据产生

    结果

    图一

    261

    图二

    262

    展开全文
  • 最近在研究skywalking,打算使用k8s部署 skywalking 并将 pod 中的应用接入 skywalking 进行服务链路追踪。这篇文章先不介绍 skywalking 在k8s中的部署和使用,而是先介绍如何使用手动和docker的方式使用 skywalking...

    在这里插入图片描述

    一、概述

    最近在研究skywalking,打算使用k8s部署 skywalking 并将 pod 中的应用接入 skywalking 进行服务链路追踪。这篇文章先不介绍 skywalking 在k8s中的部署和使用,而是先介绍如何使用手动和docker的方式使用 skywalking。在整个实践过程中查阅了大量文档,遇到了各种问题,这里将我自己的实践过程记录下来,希望对有同样需求的小伙伴提供一些帮助。

    1、skywalking 简介

    SkyWalking是一款广受欢迎的国产APM(Application Performance Monitoring,应用性能监控)产品,主要针对微服务、Cloud Native和容器化(Docker、Kubernetes、Mesos)架构的应用。SkyWalking的核心是一个分布式追踪系统,目前是Apache基金会的顶级项目。

    skywalking 的详细介绍可以查看官方文档:skywalking 官网

    2、skywalking 架构

    从逻辑上讲,SkyWalking分为四个部分:探针,平台后端,存储和UI,如下图所示:
    image.png

    • 探针收集数据并重新格式化以符合SkyWalking的要求(不同的探针支持不同的来源)。
    • 平台后端支持数据聚合,分析和流处理,涵盖跟踪,指标和日志。
    • 存储设备通过开放/可插入的界面存储SkyWalking数据。您可以选择现有的实现,例如ElasticSearch,H2,MySQL,TiDB,InfluxDB,或者实现自己的实现。
    • UI是一个高度可定制的基于Web的界面,允许SkyWalking最终用户可视化和管理SkyWalking数据。

    3、skywalking 如何自动上报数据

    在使用链路追踪控制台追踪应用的链路数据之前,需要通过客户端将应用数据上报至链路追踪。SkyWalking将Java应用数据上报至链路追踪控制台,首先需要完成埋点工作。SkyWalking既支持自动探针(Dubbo、gRPC、JDBC、OkHttp、Spring、Tomcat、Struts、Jedis等),也支持手动埋点(OpenTracing)。本文介绍自动埋点方法。

    skywalking 上报数据的原理如下图所示:
    image.png

    二、使用 docker-compose 安装 skywalking-oap-server 和 skywalking-ui

    使用下面的命令在linux中安装 docker-compose

    yum install -y docker-compose
    

    使用下面的命令创建 skywalking-docker-compose.yaml 文件:

    vim skywalking-docker-compose.yaml
    

    这里启动一个 standlone 容器,默认使用 H2 存储数据,如需其他存储可以查看官方文档进行设置。
    skywalking-docker-compose.yaml 文件内容如下:

    version: '3'
    services:
      oap:
        image: apache/skywalking-oap-server:8.4.0-es6
        container_name: oap
        restart: always
        ports:
          - 11800:11800 # agent 上报数据的端口,这是 gRPC 端口
          - 12800:12800 # ui 读取数据的端口, 这是 http 端口
      skywaling-ui:
        image: apache/skywalking-ui:8.4.0
        container_name: ui
        depends_on:
          - oap
        links:
          - oap
        ports:
          - 8088:8080
        environment:
          - SW_OAP_ADDRESS=oap:12800
    
    

    使用下面的命令启动skywalking:

    docker-compose -f skywalking-docker-compose.yaml up -d
    

    使用下面的命令查看启动日志:

    docker-compose -f skywalking-docker-compose.yaml logs -f 
    

    启动成功后,访问:http://localhost:8088,可以看到如下界面:
    image.png

    三、手动将 spring boot 接入 skywalking

    1、下载 skywalking agent

    skywalking 官网下载地址:http://skywalking.apache.org/downloads/
    image.png
    image.png

    我这里下载的是 apache-skywalking-apm-8.4.0.tar.gz,在linux系统中也可以通过下面的命令下载并解压:

    wget https://archive.apache.org/dist/skywalking/8.4.0/apache-skywalking-apm-8.4.0.tar.gz
    
    tar -zxvf apache-skywalking-apm-8.4.0.tar.gz
    

    解压后的目录结构如下图:
    image.png
    agent目录的说明如下图:
    image.png

    2、spring boot 项目自动上报数据

    要上报spring boot项目的数据需要配置 skywalking 的接入点和服务名,可以通过下面的方式配置:

    修改配置文件

    打开前面下载的 agent/config/agent.config文件,找到下面的两个配置:

    # The service name in UI
    agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}
    
    # Backend service addresses.
    collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}
    

    根据实际情况进行配置即可,配置修改完成之后,可以通过下面的命令启动spring boot 项目:

    java -javaagent:<skywalking-agent-path> -jar spring-boot-demo
    

    请将替换为Agent文件夹中的skywalking-agent.jar的绝对路径。
    注意 -javaagent参数一定要在-jar参数之前。

    通过命令参数进行配置

    服务名可以在应用程序的启动命令行中添加-Dskywalking.agent.service_name参数。
    skywalking 接入点可以在应用程序的启动命令行中添加-Dskywalking.collector.backend_service参数。
    完整命令如下:

    java -javaagent:<skywalking-agent-path> -Dskywalking.agent.service_name=<ServiceName> -Dskywalking.collector.backend_service=<backend-service-addresses>  -jar yourApp.jar
    

    在idea中启动参数中配置

    我们也可以在 idea 启动配置选项的 VM options 中进行如下配置:
    image.png

    配置完成后,启动项目可以看到如下信息打印到控制台:
    image.png

    查看skywalking 控制台,并没有数据,因为需要先访问接口,才会上报数据到控制台,通过不断的调用测试接口,再次查看控制台可以看到我们的调用情况,如下图所示:
    image.png

    四、使用 docker 部署 spring boot 并接入 skywalking

    这里 spring boot 的基础镜像选择 skywalking-base,此镜像中包含 openjdk11skywalking-agent,详细的信息可以参考下面的参考文档。
    image.png

    spring boot 的 Dockerfile文件内容如下:

    FROM apache/skywalking-base:8.4.0-es6
    WORKDIR /app
    COPY target/spring-demo-0.0.1-SNAPSHOT.jar spring-demo-0.0.1-SNAPSHOT.jar
    ENV SW_AGENT_COLLECTOR_BACKEND_SERVICES="127.0.0.1:11800" \
        SW_AGENT_NAME="my-spring-demo-test-adfasdf"
    
    
    CMD java -javaagent:/skywalking/agent/skywalking-agent.jar \
             -jar spring-demo-0.0.1-SNAPSHOT.jar
    
    

    这里使用环境变量的方式为 skywalking 设置自定义参数,环境变量的其他配置可以查看 agent/config/agent.config文件。

    使用下面的命令构建镜像:

    docker build -t spring-boot-demo .
    

    使用下面的命令启动镜像:

    docker run --rm -p 8080:8080 spring-boot-demo
    

    启动成功之后可以访问测试的地址,到 skywalking 控制台查看是否有数据上报,如果没有数据上报,我们需要查看 skywalking agent 的日志,可以在 agent/logs/skywalking-api.log文件中查看报错信息。

    参考文档

    skywalking 官方文档
    Apache SkyWalking Docker Files
    通过SkyWalking上报Java应用数据

    展开全文
  • springcloud+skywalkingdemo

    2018-03-30 22:12:27
    springcloud 最新版本搭建基础微服务,包括fegin,ribbon,服务注册发现,熔断,配置中心(jdbc+mysql),zuul网关等。
  • 1. SkyWalking 简介 Skywalking 是由国内开源爱好者吴晟(原 OneAPM 工程师,目前在华为)开源并提交到 Apache 孵化器的产品,它同时吸收了 Zipkin/Pinpoint/CAT 的设计思路,支持非侵入式埋点。是一款基于分布式...

    1. SkyWalking 简介

    Skywalking 是由国内开源爱好者吴晟(原 OneAPM 工程师,目前在华为)开源并提交到 Apache 孵化器的产品,它同时吸收了 Zipkin/Pinpoint/CAT 的设计思路,支持非侵入式埋点。是一款基于分布式跟踪的应用程序性能监控系统。另外社区还发展出了一个叫 OpenTracing 的组织,旨在推进调用链监控的一些规范和标准工作。

    • SkyWalking 是一个开源监控平台,用于从服务和云原生基础设施收集、分析、聚合和可视化数据。

    • SkyWalking 提供了一种简单的方法来维护分布式系统的清晰视图,甚至可以跨云查看。它是一种现代APM,专门为云原生、基于容器的分布式系统设计。

    • SkyWalking 从三个维度对应用进行监视:service(服务), service instance(实例), endpoint(端点)。服务和实例就不多说了,端点是服务中的某个路径或者说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 的控制台,发现各种仪表盘,开始当然是空的

    http://(安装SkyWalking机器的IP):9020
    

    图片

    3. 在 Spring 项目中引入 SkyWalking 客户端

    全局日志追踪 traceId 的使用:

    1. 添加 pom 文件依赖

            <dependency>
                <groupId>org.apache.skywalking</groupId>
                <artifactId>apm-toolkit-logback-1.x</artifactId>
                <version>8.0.1</version>
            </dependency>
            <dependency>
                <groupId>org.apache.skywalking</groupId>
                <artifactId>apm-toolkit-trace</artifactId>
                <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}}"/>
    
    
        <!-- 输出到控制台 -->
        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>info</level>
            </filter>
            <encoder>
                <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
                <charset>UTF-8</charset>
            </encoder>
        </appender>
    
        <!-- 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>
    
        <!-- 输出到文件 -->
        <!-- 时间滚动输出 level为 DEBUG 日志 -->
        <!-- <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <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 class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                &lt;!&ndash; 日志归档 &ndash;&gt;
                <fileNamePattern>${logger.path}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                &lt;!&ndash;日志文件保留天数&ndash;&gt;
                <maxHistory>15</maxHistory>
            </rollingPolicy>
            &lt;!&ndash; 此日志文件只记录debug级别的 &ndash;&gt;
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>debug</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender> -->
    
        <!-- 时间滚动输出 level为 INFO 日志 -->
        <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 正在记录的日志文件的路径及文件名 -->
            <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>
        </appender>
    
        <!-- 时间滚动输出 level为 WARN 日志 -->
        <!-- <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            &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 class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${logger.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>100MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                &lt;!&ndash;日志文件保留天数&ndash;&gt;
                <maxHistory>15</maxHistory>
            </rollingPolicy>
            &lt;!&ndash; 此日志文件只记录warn级别的 &ndash;&gt;
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>warn</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>
        </appender> -->
    
        <!-- 时间滚动输出 level为 ERROR 日志 -->
        <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- 正在记录的日志文件的路径及文件名 -->
            <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>
        </appender>
    
        <!--
            root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
            level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
            不能设置为INHERITED或者同义词NULL。默认是DEBUG
            可以包含零个或多个元素,标识这个appender将会添加到这个logger。
        -->
        <root level="info">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="STDOUT"/>
            <!--<appender-ref ref="DEBUG_FILE" />-->
            <appender-ref ref="INFO_FILE"/>
            <!--<appender-ref ref="WARN_FILE" />-->
            <appender-ref ref="ERROR_FILE"/>
        </root>
    
    </configuration>
    

    注意:其他都是日志常规配置,主要是这部分 <appender-ref ref="STDOUT"/> 的配置。

    1. 进入 skywalking 官网下载 SkyWalking APM,主要是要用到 agent

    skywalking 官网下载地址:http://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=(安装SkyWalking机器的IP):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-gateway,zuul 统一网关微服务。

    • 认证服务:herring-oauth2,oauth2 认证中心微服务。

    • 会员服务: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
    

    仪表盘结果展示:

    图片

    图片

    图片

    拓扑图结果展示

    图片

    图片

    链路追踪结果展示

    图片

    展开全文
  • 文章目录Kubernetes + Spring Cloud 集成链路追踪 SkyWalking一、概述1、什么是 SkyWalking ?2、SkyWalking 特性3、整体结构二、搭建 skywalking1、环境准备2、使用 chart 部署2.1、下载 helm 的二进制文件2.2、...

    Kubernetes + Spring Cloud 集成链路追踪 SkyWalking

    一、概述

    1、什么是 SkyWalking ?

    分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。
    提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。

    官网地址:http://skywalking.apache.org/

    2、SkyWalking 特性

    • 多种监控手段,语言探针和 Service Mesh
    • 多语言自动探针,Java,.NET Core和Node.JS
    • 轻量高效,不需要大数据
    • 模块化,UI、存储、集群管理多种机制可选
    • 支持告警
    • 优秀的可视化方案

    3、整体结构

    在这里插入图片描述
    整个架构,分成上、下、左、右四部分:

    考虑到让描述更简单,我们舍弃掉 Metric 指标相关,而着重在 Tracing 链路相关功能。

    • 上部分 Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持
      SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing数据,传递给服务器。
    • 下部分 SkyWalking OAP :负责接收 Agent 发送的 Tracing 数据信息,然后进行分析(Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query)功能。
    • 右部分 Storage :Tracing 数据存储。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2
      多种存储器。而我们目前采用的是 ES ,主要考虑是 SkyWalking 开发团队自己的生产环境采用 ES 为主。
    • 左部分 SkyWalking UI :负责提供控台,查看链路等等

    简单概况原理为下图:
    在这里插入图片描述

    二、搭建 skywalking

    1、环境准备

    • Mkubernetes 版本:1.18.5
    • Nginx Ingress 版本:2.2.8
    • Helm 版本:3.2.4
    • 持久化存储驱动:NFS

    2、使用 chart 部署

    本文主要讲述的是如何使用 Helm Charts 将 SkyWalking 部署到 Kubernetes 集群中,相关文档可以参考skywalking-kubernetes

    目前推荐的四种方式:

    • 使用 helm 3 提供的 helm serve 启动本地 helm repo
    • 使用本地 chart 文件部署
    • 使用 harbor 提供的 repo 功能
    • 直接从官方 repo 进行部署(暂不满足)

    注意:目前 skywalking 的 chart 还没有提交到官方仓库,请先参照前三种方式进行部署

    2.1、 下载 chart 文件

    可以直接使用本地文件部署 skywalking,按照上面的步骤将skywalking chart下载完成之后,直接使用以下命令进行部署:

    git clone https://github.com/apache/skywalking-kubernetes
    cd skywalking-kubernetes/chart
    helm repo add elastic https://helm.elastic.co
    helm dep up skywalking
    export SKYWALKING_RELEASE_NAME=skywalking  # 定义自己的名称
    export SKYWALKING_RELEASE_NAMESPACE=default  # 定义自己的命名空间
    

    2.2、定义已存在es参数文件

    修改values-my-es.yaml:

    oap:
      image:
        tag: 8.1.0-es7      # Set the right tag according to the existing Elasticsearch version
      storageType: elasticsearch7
    
    ui:
      image:
        tag: 8.1.0
    
    elasticsearch:
      enabled: false
      config:               # For users of an existing elasticsearch cluster,takes effect when `elasticsearch.enabled` is false
        host: elasticsearch-client
        port:
          http: 9200
        user: "elastic"         # [optional]
        password: "admin@123"     # [optional]
    

    2.3、helm 安装

    helm install "${SKYWALKING_RELEASE_NAME}" skywalking -n "${SKYWALKING_RELEASE_NAMESPACE}" \
      -f ./skywalking/values-my-es.yaml
    

    安装完成后,我们核实下安装情况:

    $ kubectl get deployment -n skywalking
    NAME                READY   UP-TO-DATE   AVAILABLE   AGE
    my-skywalking-oap   2/2     2            2           9m
    my-skywalking-ui    1/1     1            1           9m
    

    三、使用 Skywalking Agent

    Java 中使用 agent ,提供了以下三种方式供你选择

    • 使用官方提供的基础镜像
    • 将 agent 包构建到已经存在的基础镜像中
    • sidecar 模式挂载 agent(推荐)

    1、使用官方提供的基础镜像

    查看官方 docker hub 提供的基础镜像,只需要在你构建服务镜像是 From 这个镜像即可,直接集成到 Jenkins 中可以更加方便

    2、将 agent 包构建到已经存在的基础镜像中

    提供这种方式的原因是:官方的镜像属于精简镜像,并且是 openjdk ,可能很多命令没有,需要自己二次安装,这里略过。

    3、sidecar 模式挂载 agent

    由于服务是部署在 Kubernetes 中,使用这种方式来使用 Skywalking Agent ,这种方式的好处在与不需要修改原来的基础镜像,也不用重新构建新的服务镜像,而是以sidecar 模式,通过共享 volume 的方式将 agent 所需的相关文件挂载到已经存在的服务镜像中。

    3.1、构建 skywalking agent image

    自己构建,参考:https://hub.docker.com/r/prophet/skywalking-agent

    通过以下 dockerfile 进行构建:

    FROM alpine:3.8
    
    LABEL maintainer="zuozewei@hotmail.com"
    
    ENV SKYWALKING_VERSION=8.1.0
    
    ADD http://mirrors.tuna.tsinghua.edu.cn/apache/skywalking/${SKYWALKING_VERSION}/apache-skywalking-apm-${SKYWALKING_VERSION}.tar.gz /
    
    RUN tar -zxvf /apache-skywalking-apm-${SKYWALKING_VERSION}.tar.gz && \
        mv apache-skywalking-apm-bin skywalking && \
        mv /skywalking/agent/optional-plugins/apm-trace-ignore-plugin* /skywalking/agent/plugins/ && \
        echo -e "\n# Ignore Path" >> /skywalking/agent/config/agent.config && \
        echo "# see https://github.com/apache/skywalking/blob/v8.1.0/docs/en/setup/service-agent/java-agent/agent-optional-plugins/trace-ignore-plugin.md" >> /skywalking/agent/config/agent.config && \
        echo 'trace.ignore_path=${SW_IGNORE_PATH:/health}' >> /skywalking/agent/config/agent.config
    
    docker build -t 172.16.106.237/monitor/skywalking-agent:8.1.0 .
    

    待 docker build 完毕后,push 到仓库即可。

    3.2、使用 sidecar 挂载

    示例配置文件如下:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: demo-skywalking
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: demo-skywalking
      strategy:
        rollingUpdate:
          maxSurge: 1
          maxUnavailable: 0
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: demo-skywalking
        spec:
          initContainers:
            - name: init-skywalking-agent
              image: 172.16.106.237/monitor/skywalking-agent:8.1.0
              command:
                - 'sh'
                - '-c'
                - 'set -ex;mkdir -p /vmskywalking/agent;cp -r /skywalking/agent/* /vmskywalking/agent;'
              volumeMounts:
                - mountPath: /vmskywalking/agent
                  name: skywalking-agent
          containers:
            - image: nginx:1.7.9
              imagePullPolicy: Always
              name: nginx
              ports:
                - containerPort: 80
                  protocol: TCP
              volumeMounts:
                - mountPath: /opt/skywalking/agent
                  name: skywalking-agent
          volumes:
            - name: skywalking-agent
              emptyDir: {}
    

    以上是挂载 sidecar 的 deployment.yaml 文件,以 nginx 作为服务为例,主要是通过共享 volume 的方式挂载 agent,首先 initContainers 通过 skywalking-agent 卷挂载了 sw-agent-sidecar 中的 /vmskywalking/agent,并且将上面构建好的镜像中的 agent 目录 cp 到了 /vmskywalking/agent 目录,完成之后 nginx 启动时也挂载了 skywalking-agent 卷,并将其挂载到了容器的 /opt/skywalking/agent 目录,这样就完成了共享过程。

    四、改造 Spring Cloud 应用

    1、docker打包并推送到仓库

    修改下 dockerfile 配置,集成 skywalking agent:

    FROM insideo/centos7-java8-build
    VOLUME /tmp
    ADD mall-admin.jar app.jar
    RUN bash -c 'touch /app.jar'
    RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime && echo Asia/Shanghai > /etc/timezone
    ENTRYPOINT ["java","-Dapp.id=svc-mall-admin","-javaagent:/opt/skywalking/agent/skywalking-agent.jar","-Dskywalking.agent.service_name=svc-mall-admin","-Dskywalking.collector.backend_service=my-skywalking-oap.skywalking.svc.cluster.local:11800","-jar","-Dspring.profiles.active=prod","-Djava.security.egd=file:/dev/./urandom","/app.jar"]
    

    改好了,直接运行 maven package 就能将这个项目打包成镜像。

    注意:

    k8s 创建 Service 时,它会创建相应的 DNS 条目。此条目的格式为 <service-name>.<namespace-name>.svc.cluster.local,这意味着如果容器只使用<service-name>,它将解析为本地服务到命名空间。 如果要跨命名空间访问,则需要使用完全限定的域名。

    2、编写 k8s的yaml版本的部署脚本

    这里我以其中某服务举例:

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: svc-mall-admin
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: svc-mall-admin
      strategy:
        rollingUpdate:
          maxSurge: 1
          maxUnavailable: 0
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: svc-mall-admin
        spec:
          initContainers:
            - name: init-skywalking-agent
              image: 172.16.106.237/monitor/skywalking-agent:8.1.0
              command:
                - 'sh'
                - '-c'
                - 'set -ex;mkdir -p /vmskywalking/agent;cp -r /skywalking/agent/* /vmskywalking/agent;'
              volumeMounts:
                - mountPath: /vmskywalking/agent
                  name: skywalking-agent
          containers:
            - image: 172.16.106.237/mall_repo/mall-admin:1.0
              imagePullPolicy: Always
              name: mall-admin
              ports:
                - containerPort: 8180
                  protocol: TCP
              volumeMounts:
                - mountPath: /opt/skywalking/agent
                  name: skywalking-agent
          volumes:
            - name: skywalking-agent
              emptyDir: {}
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: svc-mall-admin
    spec:
      ports:
        - name: http
          port: 8180
          protocol: TCP
          targetPort: 8180
      selector:
        app: svc-mall-admin
    

    然后就可以直接运行了,它就可以将的项目全部跑起来了。

    五、测试验证

    完事,可以去 SkyWalking UI 查看是否链路收集成功。

    1、 测试应用 API

    首先,请求下 Spring Cloud 应用提供的 API。因为,我们要追踪下该链路。
    在这里插入图片描述

    2、 查看 SkyWalking UI 界面

    在这里插入图片描述

    这里,我们会看到 SkyWalking 中非常重要的三个概念:

    • 服务(Service) :表示对请求提供相同行为的一系列或一组工作负载。在使用 Agent 或 SDK 的时候,你可以定义服务的名字。如果不定义的话,SkyWalking 将会使用你在平台(例如说 Istio)上定义的名字。这里,我们可以看到 Spring Cloud 应用的服务为 svc-mall-admin,就是我们在 agent 环境变量 service_name 中所定义的。

    • 服务实例(Service Instance) :上述的一组工作负载中的每一个工作负载称为一个实例。就像 Kubernetes 中的 pods 一样, 服务实例未必就是操作系统上的一个进程。但当你在使用 Agent 的时候, 一个服务实例实际就是操作系统上的一个真实进程。这里,我们可以看到 Spring Cloud 应用的服务为 UUID@hostname,由 Agent 自动生成。

    • 端点(Endpoint) :对于特定服务所接收的请求路径, 如 HTTP 的 URI 路径和 gRPC 服务的类名 + 方法签名。

    这里,我们可以看到 Spring Cloud 应用的一个端点,为 API 接口 /mall-admin/admin/login

    更多 agent 参数介绍参考:https://github.com/apache/skywalking/blob/v8.1.0/docs/en/setup/service-agent/java-agent/README.md

    点击「拓扑图」菜单,进入查看拓扑图的界面:
    在这里插入图片描述
    点击「追踪」菜单,进入查看链路数据的界面:
    在这里插入图片描述

    六、小结

    本文详细介绍了如何使用 Kubernetes + Spring Cloud 集成 SkyWalking,顺便说下调用链监控在目前的微服务系统里面是必不可少的组件,分布式追踪、服务网格遥测分析、度量聚合和可视化还是挺好用的,这里我们选择了 Skywalking,具体原因和细节的玩法就不在此详述了。

    本文源码:

    • https://github.com/zuozewei/blog-example/tree/master/Kubernetes/k8s-skywalking
    展开全文
  • 微服务集成SkyWalking

    2019-11-24 12:09:47
    title: 微服务集成SkyWalking date: 2019-11-24 09:59:21 categories: 微服务 tags: SkyWalking 最近做的一个项目使用了Spring Cloud Alibaba,随着服务系统的增多,调用连也越来越复杂,好几天不碰,就有点忘了...
  • Docker + Spring Boot 演示 SkyWalking Demo

    千次阅读 2020-01-04 21:36:13
    本文使用 Docker + Spring Boot 做一个 SkyWalking 的简单 Demo 演示。 简介 [外链图片转存失败,站可能有防盗链机制,建议将图片保存下来直接上传(img-IC0jHc0n-1578144817056)...
  • 1、登录skywalking官网 https://skywalking.apache.org/downloads/,下载8.5版本。 2、下载解压安装包,进入/config目录,修改application.yml,根据实际情况配置数据库信息。 3、配置好数据库以后,进入/...
  • Apache Skywalking(Incubator)简介Apache Skywalking(Incubator) 专门为微服务架构和云原生架构系统而设计并且支持分布式链路追踪的APM系统。Apache Skywalking(Incubator)通过加载探针的方式收集应用调用链路信息,...
  • apache-skywalking-apm-8.3.0 elasticsearch-6.8.10 2.skywalking es数据库配置 aoolication.yml 3.es安装 参照之前博客 4.服务启动参数: -javaagent:****\agent\skywalking-agent.jar -Dskywalking....
  • 包含ui oap es模块和完整的springcloud测试用例 此外将agent整合到sidecar中,也就是说每个pod中有两个应用 app+agent sidecar,更加适合于生产环境 描述 我弄这个主要是为了学习整合skywalking作为kubernetes...
  • 最近在研究skywalking,打算使用k8s部署 skywalking 并将 pod 中的应用接入 skywalking 进行服务链路追踪。这篇文章先不介绍 skywalking 在k8s中的部署和使用,而是先介绍如何使用手动和docker的方式使用 skywalking...
  • 首先启动 consul 参考网址: https://blog.csdn.net/qq_35433926/article/details/96477211 进入到exe所在目录 然后 运行 consul agent -dev ... ...然后安装elasticsearch 和 skywalking 参考网址: htt...
  • docker中集成skywalking

    2021-09-26 11:29:39
    基于docker部署的项目如何和skywalking agent进行整合 skywalking简介 skywalking是一款开源的应用性能监控系统,包括指标监控,分布式追踪,分布式系统性能诊断 skywalking官方中文翻译文档 SkyWalking 文档...
  • 什么是SkyWalking 查看官网https://skywalking.apache.org/ 分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。 安装 进入下载页面...
  • SkyWalking的使用
  • kubernetes 部署spring boot项目+skywalking链路追踪制作Dockerfile文件kubernetes yaml配置文件 制作Dockerfile文件 FROM openjdk:8-jdk MAINTAINER xxx "xxx@qq.com" COPY target/*.jar /app.jar RUN sh -c 'touch...
  • 基于docker-compose搭建单机版skywalking: docker-compose.yml文件内容 version: '3.5' services: elasticsearch: image: elasticsearch:${ES_TAG} container_name: elasticsearch restart: always ports...
  • maven skywalking

    2021-05-14 10:19:34
    web org.springframework.boot spring-boot-starter-test test org.projectlombok lombok 1.18.10 org.mapstruct mapstruct-jdk8 1.3.0.Final org.springframework.cloud spring-cloud-dependencies ${spring-cloud....
  • skywalking简介 skywalking是一款开源的应用性能监控系统,包括指标监控,分布式追踪,分布式系统性能诊断 skywalking官方中文翻译文档 ...项目如何集成skywalking 1、下载skywalking agent https://arc
  • Skywalking 简介 Skywalking 容器安装部署 SpringBoot应用 虚拟机环境自动调用链追踪 容器环境自动调用链追踪 结束语 参考文献
  • 7.10.1(方式二)修改配置文件启动elasticsearch1.3 安装oap1.4 安装ui1.5 下载源码包,会用到其中的agent二、SpringBoot集成Skywalking2.1 配置文件准备使用方式详细配置参考链接 一、安装环境部署 下载镜像: $ ...
  • k8s微服务接入SkyWalking,怎么玩?

    千次阅读 2021-03-03 14:36:40
    大家好!我是"无敌码农"!前两天我在《分布式链路追踪,要怎么玩下?》这篇文章中给大家分享了关于分布式链路追踪的基本原理和SkyWalking的k8s部署玩法,如果还没来得及...
  • 上一篇文章介绍了使用 docker 部署 spring boot 并接入 skywalking,其中描述了使用 docker-compose 搭建 skywalking,这一篇文章就不介绍 skywalking 的搭建了,这里主要记录一下使用 docker 部署一个 tomcat 并接...
  • skywalking在apache里全票通过成为了apache顶级链路追踪系统 项目地址:github.com/apache/skyw…官方文档:github.com/apache/skyw… 虽然官方文档很全,但是中文文档目前还没完全翻译过来,研究文档需要花费一.....
  • 文章末尾提供了githup、gitee的代码地址,如有疑问或问题,可在文章底部留言,我们共同讨论。如解决您的问题,欢迎留言点赞!最后感谢您的阅读。 SpringCloud、SpringBoot群聊:958923746 LoadBalancer 什么是...
  • skywalking是一个开放源码的,用于收集、分析,聚合,可视化来自于不同服务和本地基础服务的数据的可观察的平台,skywalking提供了一个简单的方法来让你对你的分布式系统甚至是跨云的服务有清晰的了解。它更像是一个...
  • SideCar模式接入SkyWalking服务

    千次阅读 2021-12-15 10:28:39
    微服务Kubernetes发布文件集成SkyWalking Agent实现埋点,其主要原理:通过Kubernetes的初始化容器initContainers来实现的,initContainers是一种专用容器,可以在应用容器启动之前运行,可以用于完成应用启动前的...
  • Skywalking是一个可观测性分析平台(Observability Analysis Platform简称OAP)和应用性能管理系统(Application Performance Management简称APM)。提供分布式链路追踪、服务网格(Service Mesh)遥测分析、度量...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 263
精华内容 105
关键字:

spring集成skywalking,源镜像

spring 订阅