skywalking (1) implementación e integración de skywalking con Springboot para una introducción sencilla


1. Introducción

  Skywalking es un excelente marco nacional de código abierto, que fue abierto por Wu Sheng (desarrollador de Huawei) en 2015 y se unió a la incubadora Apache en 2017. En apenas dos años fue contratado por Apache, lo que demuestra su fortaleza. Skywalking admite la integración de Dubbo, SpringCloud, SpringBoot, el código no es intrusivo, el método de comunicación usa GRPC y el rendimiento es bueno. El método de implementación es la sonda Java, admite alarmas, admite monitoreo JVM, admite estadísticas de llamadas globales, etc. y tiene funciones relativamente completas.

Sitio web oficial: https://skywalking.apache.org/

Arquitectura de Skywalking
SkyWalking se divide lógicamente en cuatro partes: sonda, plataforma backend, almacenamiento e interfaz de usuario.

  • Las sondas pueden ser diferentes según diferentes fuentes, pero su función es recopilar datos y formatearlos en un formato adecuado para SkyWalking;
  • El backend de la plataforma admite la agregación de datos, el análisis de datos y los procesos que impulsan el flujo de datos desde las sondas hasta las interfaces de usuario. El análisis incluye indicadores de rendimiento y seguimiento nativos de Skywalking, así como fuentes de terceros, incluida la telemetría de Istio y Envoy, el formato de seguimiento Zipkin, etc.;
  • El almacenamiento almacena los datos de SkyWalking a través de una interfaz de complemento abierta. Puede elegir un sistema de almacenamiento existente, como ElasticSearch, H2 o MySQL cluster (administración de Sharding-Sphere), o puede optar por implementar un sistema de almacenamiento usted mismo. Por supuesto, nosotros son bienvenidos. Usted contribuye con nuevas implementaciones de sistemas de almacenamiento;
  • UI es un sistema web altamente personalizado basado en la interfaz, que permite a los usuarios ver y administrar visualmente los datos de SkyWalking.

2. Docker-compose implementa el skywalking

Aprenda a utilizar Docker-compose usted mismo y no entrará en detalles aquí. El archivo docker-compose.yml es el siguiente:

version: '3.8'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.6
    container_name: elasticsearch
    restart: always
    ports:
      - 9200:9200
      - 9300:9300
    environment:
      - discovery.type=single-node
      - TZ=Asia/Shanghai
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
    volumes:
      - /skywalking/elasticsearch/data:/usr/share/elasticsearch/data
    ulimits:
      memlock:
        soft: -1
        hard: -1
  oap:
    image: docker.io/apache/skywalking-oap-server:9.4.0
    container_name: oap
    depends_on:
      - elasticsearch
    restart: always
    ports:
      - 11800:11800
      - 12800:12800
    environment:
      SW_CORE_RECORD_DATA_TTL: 15
      SW_CORE_METRICS_DATA_TTL: 15
      SW_STORAGE: elasticsearch
      SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
      SW_ENABLE_UPDATE_UI_TEMPLATE: true
      TZ: Asia/Shanghai
      JAVA_OPTS: "-Xms2048m -Xmx2048m"
  ui:
    image: docker.io/apache/skywalking-ui:9.4.0
    container_name: ui
    depends_on:
      - oap
    links:
      - oap
    restart: always
    ports:
      - 8080:8080
    environment:
      SW_OAP_ADDRESS: http://oap:12800
      SW_ZIPKIN_ADDRESS: http://oap:9412

  Después de la ejecución normal, tardará aproximadamente 1 minuto en esperar. Ingrese http://IP:8080 en el navegador y verá la siguiente interfaz. No hay datos cuando recién se inicia (no es necesario iniciar sesión). No hay trampas en todo el proceso, sólo una vez.
Insertar descripción de la imagen aquí
El uso de la interfaz de usuario se presentará más adelante.

3. springboot integra skywalking

Prepare un proyecto web springboot simple.

1. Descargue el agente de descompresión.

注意:agent版本和oap版本需要适配,版本不适配可能会出现页面无法访问、agent上报不到页面等问题。

Dirección de descarga : https://skywalking.apache.org/downloads/

La versión de Skywalking utilizada por el autor es 9.4.0. No hay problema en descargar la versión v8.16.0 del cliente, está disponible para pruebas personales.
Insertar descripción de la imagen aquí

La estructura del código se muestra a continuación:

Insertar descripción de la imagen aquí
  Debe configurar el archivo de configuración config/agent.config en la carpeta skywalking-agent. Se enumeran las dos configuraciones más críticas. Puede explorar otras configuraciones usted mismo.

agent.service_name=${
    
    SW_AGENT_NAME:HS}
collector.backend_service=${
    
    SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.54.53:11800}
2. Atraque de troncos

  Hay un módulo de registro en el lado de la interfaz de usuario de Skywalking, que se utiliza para recopilar registros de clientes. De forma predeterminada, no hay datos. Entonces, ¿cómo transferir los datos de registro a Skywalking?

Skywalking admite los siguientes métodos de acceso a registros.
Insertar descripción de la imagen aquí
Usemos el inicio de sesión predeterminado de Springboot como ejemplo para presentar cómo configurarlo.

(1) Introducir dependencias
        <!--打印skywalking的TraceId到日志-->
        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-logback-1.x</artifactId>
            <version>8.12.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-trace</artifactId>
            <version>8.12.0</version>
        </dependency>
(2) Agregar archivo de configuración

Cree un nuevo logback-spring.xml y colóquelo en el directorio de recursos. La configuración es la siguiente:

<configuration debug="false" scan="false">
    <springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue=""/>
    <property name="log.path" value="logs/${spring.application.name}"/>
    <!-- 彩色日志格式 -->
    <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}}"/>
    <!-- 彩色日志依赖的渲染类 -->
    <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"/>
    <!-- Console log output -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- Log file debug output -->
    <appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/debug.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/%d{yyyy-MM, aux}/debug.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>50MB</maxFileSize>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- Log file error output -->
    <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>50MB</maxFileSize>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
    </appender>
    <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.TraceIdPatternLogbackLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>

    <appender name="grpc" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>
    <!--nacos 心跳 INFO 屏蔽-->
    <logger name="com.alibaba.nacos" level="OFF">
        <appender-ref ref="error"/>
    </logger>

    <!-- Level: FATAL 0  ERROR 3  WARN 4  INFO 6  DEBUG 7 -->
    <root level="INFO">
        <!-- <appender-ref ref="console"/>-->
        <appender-ref ref="debug"/>
        <appender-ref ref="error"/>
        <appender-ref ref="stdout"/>
        <appender-ref ref="grpc"/>
    </root>
</configuration>
(3) Agregar registros al código
    @RequestMapping(value = "/test", method = RequestMethod.GET)
    @ApiOperation(value = "测试")
    public ModelMap test(){
    
    
        ModelMap modelMap = new ModelMap();
        modelMap.addAttribute("code", "success");
        log.info(modelMap.toString());
        return modelMap;
    }
3. Comience a usar el modo sonda
(1) Comience con una idea

Configurar las opciones de VM
Insertar descripción de la imagen aquí
El parámetro de configuración javaagent es la ruta absoluta de skywalking-agent.

-javaagent:D:\code\test\HS\src\main\skywalking-agent\skywalking-agent.jar

Iniciar proyecto
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

Verá que ya hay registros en Skywalking, que son consistentes con los registros en la consola de ideas.

(2) Comience a usar el frasco

Como idea, simplemente configure las opciones de VM al inicio

java -javaagent:D:\code\test\HS\src\main\skywalking-agent\skywalking-agent.jar -Dskywalking.agent.service_name=HS -Dskywalking.collector.backend_service=192.168.54.53:11800 -jar app.jar
(3) Verificación de interfaz

Llamar a la interfaz web
Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

4. Resumen

  Durante el proceso de integración de Skywalking y Springboot, básicamente no hubo obstáculos, todo el proceso fue relativamente sencillo y, de hecho, fue un proyecto de depósito de Apache. El proceso está registrado, espero que pueda ayudarte. El próximo artículo presenta principalmente la integración de Skywalking y Apisix, ¡así que estad atentos!

  Terminó la obra.

Supongo que te gusta

Origin blog.csdn.net/bacawa/article/details/132359924
Recomendado
Clasificación