spring-boot日志收录到skywalking

210 阅读1分钟
  1. 添加依赖
    <!-- 请根据实际使用的SkyWalking版本调整 -->
        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-trace</artifactId>
            <version>9.3.0</version>
        </dependency>

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

2.logback文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 日志输出格式 -->
    <property name="FILE_LOG_PATTERN" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] %green(%-5level) [%thread] %yellow([%tid]) %cyan(%logger{50}) : %msg%n" />

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 默认日志打印的格式 -->
        <!--<encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>utf-8</charset>
        </encoder>-->
        <!-- 配置了skywalking的traceId的日志打印的格式 -->
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                <Pattern>${FILE_LOG_PATTERN}</Pattern>
            </layout>
        </encoder>
    </appender>

    <appender name="GRPC_LOG" 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.TraceIdPatternLogbackLayout">
                <Pattern>${FILE_LOG_PATTERN}</Pattern>
            </layout>
        </encoder>
    </appender>

    <appender name="ERROR_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/error.log</file>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>utf-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- 异步输出 控制台 -->
    <appender name="ASYNC_STDOUT" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>256</queueSize>
        <appender-ref ref="STDOUT"/>
    </appender>

    <!-- Level: FATAL 0  ERROR 3  WARN 4  INFO 6  DEBUG 7 -->
    <root level="DEBUG">
        <appender-ref ref="ERROR_LOG"/>
        <appender-ref ref="ASYNC_STDOUT"/>
        <appender-ref ref="GRPC_LOG"/>
    </root>
</configuration>

3. 代码启动

java -javaagent:/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=skywalking-test -Dskywalking.collector.backend_service=127.0.0.1:11800   -Dskywalking.agent.protocol=grpc  -jar   $APP_NAME  --spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848   

4. docker-compose 启动skywalking

services:
  elasticsearch:
    image: elasticsearch:8.15.0
    container_name: elasticsearch
    ports:
      - "9200:9200"
    healthcheck:
      test: ["CMD-SHELL", "curl -sf http://localhost:9200/_cluster/health || exit 1"]
      interval: 60s
      timeout: 10s
      retries: 3
      start_period: 60s
    environment:
      discovery.type: "single-node"      
      ingest.geoip.downloader.enabled: "false"
      bootstrap.memory_lock: "true"
      ES_JAVA_OPTS: "-Xms512m -Xmx512m"
      TZ: "Asia/Shanghai"
      xpack.security.enabled: "false"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    networks:
      - skywalking

  skywalking-oap:
    image: apache/skywalking-oap-server:9.3.0
    container_name: skywalking-oap
    depends_on:
      elasticsearch:
        condition: service_healthy
    links:
      - elasticsearch
    environment:
      SW_HEALTH_CHECKER: default
      SW_STORAGE: elasticsearch
      SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
      SW_STORAGE_ES_INDEX_SHARDS_NUMBER: 1 
      SW_STORAGE_ES_INDEX_REPLICAS_NUMBER: 0 
      SW_CLUSTER: standalone  
      SW_TELEMETRY: prometheus
      SW_ENVOY_METRIC_ALS_HTTP_ANALYSIS: default
      JAVA_OPTS: "-Xms2048m -Xmx2048m -Dmode=grpc -DrestHost=0.0.0.0 -DrestPort=12800 -Dcore.default.grpcHost=0.0.0.0 -Dcore.default.grpcPort=11800"
      TZ: Asia/Shanghai
    healthcheck:
      test: ["CMD-SHELL", "/skywalking/bin/swctl ch"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 10s
    restart: on-failure
    ports:
      - "9998:11800"
      - "12800:12800"
    networks:
      - skywalking

  skywalking-ui:
    image: apache/skywalking-ui:9.3.0
    container_name: skywalking-ui
    depends_on:
      skywalking-oap:
        condition: service_healthy
    links:
      - skywalking-oap
    ports:
      - "19180:8080"
    environment:
      SW_OAP_ADDRESS: "http://skywalking-oap:12800"
      SW_HEALTH_CHECKER: default
      TZ: Asia/Shanghai
    healthcheck:
      test: ["CMD-SHELL", "curl -sf http://localhost:8080 || exit 1"]
      interval: 60s
      timeout: 10s
      retries: 3
      start_period: 60s
    networks:
      - skywalking
  otel-collector:
    image: otel/opentelemetry-collector:0.120.0
    container_name: otel-collector
    command: [ "--config=/etc/otel-collector-config.yaml" ]
    volumes:
      - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
    expose:
      - 55678
    networks:
      - skywalking

networks:
  skywalking:
    driver: bridge

  1. 实现效果如图

    4.1监控服务器状态 Snipaste_1.png 4.2收集gateway Snipaste_2.png