日志上报到skywalking

1部署 skywalking

# more opt/skywalking/.env

# more opt/skywalking/.env 


ES_VERSION=7.9.0
#OAP_IMAGE=apache/skywalking-oap-server/oap:9.5.0
#OAP_IMAGE=apache/skywalking-oap-server/oap:9.5.0
OAP_IMAGE=apache/skywalking-oap-server:9.5.0
UI_IMAGE=apache/skywalking-ui:9.5.0


##  more opt/skywalking/docker-compose.yml

# more docker-compose.yml

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

version: '3.8'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch-oss:${ES_VERSION}
    container_name: elasticsearch
    ports:
      - "9200:9200"
    healthcheck:
      test: [ "CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1" ]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 10s
    environment:
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1

  oap:
    image: ${OAP_IMAGE}
    container_name: oap
    depends_on:
      elasticsearch:
        condition: service_healthy
    links:
      - elasticsearch
    ports:
      - "11800:11800"
      - "12800:12800"
    healthcheck:
      test: [ "CMD-SHELL", "/skywalking/bin/swctl ch" ]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 10s
    environment:
      SW_STORAGE: elasticsearch
      SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
      SW_HEALTH_CHECKER: default
      SW_TELEMETRY: prometheus
      JAVA_OPTS: "-Xms2048m -Xmx2048m"

  ui:
    image: ${UI_IMAGE}
    container_name: ui
    depends_on:
      oap:
        condition: service_healthy
    links:
      - oap
    ports:
      - "8080:8080"
    environment:
      SW_OAP_ADDRESS: http://oap:12800
      SW_ZIPKIN_ADDRESS: http://oap:9412
 

启动skywalking 服务端

# docker-compose up -d -f docker-compose.yml

2 java agent 配置

 JAVA_OPTS='-Xms8g -Xmx8g -Dspring.profiles.active=shsj  -javaagent:/home/opt/skywalking-agent/skywalking-agent.jar  -DSW_AGENT_COLLEC
TOR_BACKEND_SERVICES=172.150.1.29:11800  -Dskywalking.agent.service_name=zsyy-api '

docker 文件卷挂载

  -v  /home/opt/skywa
lking-agent:/home/opt/skywalking-agent

3logback采集日志修改

pom.xml

<properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        
        <git-commit-id-plugin.version>3.0.1</git-commit-id-plugin.version>
         
                <skywalking.toolkit.version>8.16.0</skywalking.toolkit.version>
    </properties>
         

           <!-- skywalking toolkit -->
        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-trace</artifactId>
            <version>${skywalking.toolkit.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-logback-1.x</artifactId>
            <version>${skywalking.toolkit.version}</version>
        </dependency>

 配置logback.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration  scan="true" scanPeriod="10 seconds">
    <springProperty scope="context" name="log.path" source="logging.logback.path"/>
    <springProperty scope="context" name="log.level" source="logging.logback.level" />
    <springProperty scope="context" name="LOG_NAME" source="spring.application.name" defaultValue="sky_info"/>
    <contextName>zsyy-api</contextName>
    <conversionRule conversionWord="msg" converterClass="cn.zsyy.common.config.LogBackConverter"> </conversionRule>
    <!-- add converter for %tid -->
    <conversionRule conversionWord="tid" converterClass="org.apache.skywalking.apm.toolkit.log.logback.v1.x.LogbackPatternConverter"/>
    <!-- add converter for %sw_ctx -->
    <conversionRule conversionWord="sw_ctx" converterClass="org.apache.skywalking.apm.toolkit.log.logback.v1.x.LogbackSkyWalkingContextPatternConverter"/>


    <property name="CONSOLE_LOG_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%5level) %magenta(${PID}) --- [%15.15thread] %cyan(%-40.40logger) : %msg%n"/>
    <property name="FILE_LOG_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5level ${PID} --- [%15.15thread] %-40.40logger : %msg%n"/>

    <property name="STDOUT_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - [%tid] - %msg%n"/>
<!--
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        &lt;!&ndash;保证控制台打印链路信息&ndash;&gt;
        <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="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>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
            <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
                <marker>MARKER_MP_NOTIFY</marker>
            </evaluator>
            <onMismatch>NEUTRAL</onMismatch>
            <onMatch>DENY</onMatch>
        </filter>
        <file>${log.path}/${LOG_NAME}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/${LOG_NAME}_%d{yyyy-MM-dd}_%i.log</fileNamePattern>
            <!-- 单个日志文件最多50MB -->
            <maxFileSize>1000MB</maxFileSize>
            <!-- 日志文件保留天数 -->
            <maxHistory>30</maxHistory>
            <!-- 最大不能超过20GB, 到了这个值, 就会删除旧的日志 -->
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!--保证日志文件打印链路信息-->
        <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>

    <!--整合skyWalking,日志上传至skyWalking-->
    <property name="SKY_LOG_PATTERN"
              value="%d{yyyy-MM-dd HH:mm:ss} | %-5level | %thread | %tid | %logger{50} %L\ | %msg%n" />
    <appender name="SKY_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>${SKY_LOG_PATTERN}</pattern>
            </layout>
        </encoder>
    </appender>

    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/info.log</file>
     <!--   <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}  %p ${PID:-} -&#45;&#45; [%15thread] %logger:%-3L [%X{requestId}] : %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>-->
        <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>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/info/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>1GB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>45</maxHistory>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>


    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/warn.log</file>
        <!--       <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                   <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}  %p ${PID:-} -&#45;&#45; [%15thread] %logger:%-3L [%X{requestId}] : %msg%n</pattern>
                   <charset>UTF-8</charset>
               </encoder>-->

        <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>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/warn/warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>1GB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>180</maxHistory>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>


    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/error.log</file>
 <!--       <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}  %p ${PID:-} -&#45;&#45; [%15thread] %logger:%-3L [%X{requestId}] : %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>-->

        <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>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/error/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>1GB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>180</maxHistory>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>error</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <root level="info">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="INFO_FILE"/>
        <appender-ref ref="WARN_FILE"/>

        <appender-ref ref="ERROR_FILE"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="SKY_LOG"/>
    </root>
</configuration>

查看日志:未集成完成会生成 TAD: N/A

2023-07-13 15:22:09.799 [http-nio-14001-exec-12] INFO  cn. .zsyy.order.service.CommonOrderService - [TID: N/A] -

集成成日志文件内容如下(包含tid traceid):

2023-07-13 15:59:10.264 [TID:90e9717cda1147ec946db3c1bf7b0be6.132.16892351502620001] [http-nio-14001-exec-68] INFO  c.u.z.s.aop.SentinelResourceAop -医院:1123010915235514310,ip:183.129.254.162,用户:null,请求:静态资源列表/resource/patient/list
2023-07-13 15:59:10.268 [TID:90e9717cda1147ec946db3c1bf7b0be6.132.16892351502620001] [http-nio-14001-exec-68] INFO  c.u.z.s.aop.SentinelResourceAop -接口:/resource/patient/list,限流配置信息:[]

参考:

微服务日志通过agent接入skywalking 8.7配置方法_skywalking接入日志_程序猿(攻城狮)的博客-CSDN博客

微服务日志通过agent接入skywalking 8.7配置方法_skywalking接入日志_程序猿(攻城狮)的博客-CSDN博客

注意:

1) logback 关键配置 :

<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.mdc.TraceIdMDCPatternLogbackLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
</appender>
 
 
 
<root level="info">      
      <appender-ref ref="grpc-log"/>                
</root>


2) 启动项目时,必须要使用-javaagent参数激活skywalking tracer,才会输出TraceID信息。 否则,TraceID信息将会是N/A

如何激活  skywalking traceid  :

JAVA_OPTS = '    -javaagent:/home/opt/skywalking-agent/skywalking-agent.jar  -DSW_AGENT_COLLEC
TOR_BACKEND_SERVICES=172.150.1.29:11800  -Dskywalking.agent.service_name=zsyy-api'

]# more zsyy-api.env


APP_LOG_PATH=/home/logs/zsyy-api-skywalking/

SW_AGENT_NAME=zsyy-api
SW_AGENT_COLLECTOR_BACKEND_SERVICES=172.150.1.29:11800
SW_LOGGING_LEVEL=debug
SW_LOGGING_DIR=${APP_LOG_PATH}
SW_GRPC_LOG_MAX_MESSAGE_SIZE=10485760

SW_LOGGING_MAX_FILE_SIZE=1000000000
SW_LOGGING_MAX_HISTORY_FILES=180
SW_MYSQL_TRACE_SQL_PARAMETERS=true
SW_SPRING_MVC_USE_QUALIFIED_NAME_AS_ENDPOINT_NAME=true

猜你喜欢

转载自blog.csdn.net/ywtech/article/details/131704643