springboots 接入 skywalking

日志

log42j

pom 文件配置依赖

  1. web 依赖默认引入的 logback
  2. 添加 log4j2 依赖
  3. 添加 log4j2 和 skywalking 的依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <!-- 排除掉logging,不使用logback,改用log4j2 -->
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency> 

<!-- log4j2 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-log4j-2.x</artifactId>
    <version>8.10.0</version>
</dependency>

添加 log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!-- Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,
你会看到log4j2内部各种详细输出。可以设置成OFF(关闭) 或 Error(只输出错误信息)。
-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<configuration status="WARN" monitorInterval="30">

	<Properties>
		<Property name="log.path">logs/lemes-auth</Property>
		<Property name="logging.lemes.pattern">
			%d{yyyy-MM-dd HH:mm:ss.SSS}  %highlight{[%-5level]} [%traceId]  %highlight{[%logger{50}.%M:%L]} - %msg%n
		</Property>
	</Properties>

	<Appenders>
		<!-- 输出控制台日志的配置 -->
		<Console name="Console" target="SYSTEM_OUT">
			<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
			<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
			<!-- 输出日志的格式 -->
			<PatternLayout pattern="${logging.lemes.pattern}"/>
		</Console>

		<RollingRandomAccessFile name="debugRollingFile" fileName="${log.path}/debug.log"
								 filePattern="${log.path}/debug/$${date:yyyy-MM}/debug.%d{yyyy-MM-dd}-%i.log.gz">
			<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
			<PatternLayout charset="UTF-8" pattern="${logging.lemes.pattern}"/>
			<Policies>
				<TimeBasedTriggeringPolicy interval="1"/>
				<SizeBasedTriggeringPolicy size="100 MB"/>
			</Policies>
			<DefaultRolloverStrategy max="30"/>
		</RollingRandomAccessFile>

		<GRPCLogClientAppender name="grpc-log">
			<PatternLayout pattern="${logging.lemes.pattern}"/>
		</GRPCLogClientAppender>
	</Appenders>
	<Loggers>
		<!-- ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF -->
		<Logger name="com.lenovo.lemes" level="debug"/>
		<Logger name="org.apache.kafka" level="warn"/>
		<Root level="info">
			<AppenderRef ref="Console"/>
			<AppenderRef ref="debugRollingFile"/>
			<AppenderRef ref="grpc-log"/>
		</Root>
	</Loggers>
</configuration>

 

logback

pom 文件配置依赖

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

添加 logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>  
    <!-- 控制台输出 -->
    <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} %highlight(%-5level) [%tid] %highlight(%logger{36}) -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>
	<!-- 配置异步记录 AsyncAppender -->
    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>1024</queueSize>
        <neverBlock>true</neverBlock>
        <appender-ref ref="STDOUT"/>
    </appender>
    <!-- skywalking grpc 日志收集 8.4.0版本开始支持 -->
    <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} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>

    <!--系统操作日志-->
    <root level="INFO">  
        <appender-ref ref="STDOUT"/> 
        <appender-ref ref="ASYNC"/> 
        <appender-ref ref="grpc-log"/>
    </root>
</configuration>

 

链路追踪

pom 文件配置依赖

<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-trace</artifactId>
    <version>8.10.0</version>
</dependency>

需要追踪的地方使用 @Trace 注解
示例代码


import io.swagger.annotations.ApiOperation;
import org.apache.skywalking.apm.toolkit.trace.Trace;
import org.apache.skywalking.apm.toolkit.trace.TraceContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.Date;
 
@RestController
public class TestLog0Controller {
    private static final Logger logger = LoggerFactory.getLogger(TestLog0Controller.class);

    @ApiOperation(value = "测试log", notes = "测试log")
    @GetMapping(value = "/test/log")
    public String logtest() {
        logger.info("logtest");
        start();
        return "success";
    }

    @Trace(operationName = "/log/traceId")
    public String getTraceId() {
        try {
            return TraceContext.traceId();
        } catch (Exception e) {
            logger.error("skywalking agent is not mount");
        }
        return "TID: N/A";
    }

    @Trace(operationName = "/log/date")
    public String getNowDate(String str) {
        logger.info("{} get date, traceId: {}", str, getTraceId());
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
    }

    @Trace(operationName = "/log/start")
    public void start() {
        logger.info("start log now is {}", getNowDate("START"));
        running();
    }

    @Trace(operationName = "/log/running")
    public void running() {
        logger.info("running log now is {}", getNowDate("RUNNING"));
        waiting();
    }

    @Trace(operationName = "/log/waiting")
    public void waiting() {
        logger.info("waiting log now is {}", getNowDate("WAITING"));
        ending();
    }

    @Trace(operationName = "/log/ending")
    public void ending() {
        logger.info("ending log now is {}", getNowDate("ENDING"));
    }
}

追踪结果

在这里插入图片描述
点击右边的查看日志,可以看到这个请求所打印的日志
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringCloud是一个开源的分布式系统开发框架,可以用于快速构建基于Java的微服务架构。而SkyWalking是一个开源的分布式APM(Application Performance Management)系统,用于监控、诊断和管理分布式系统的性能。 要实现SpringCloud服务整合SkyWalking,首先我们需要在SpringCloud微服务架构中集成SkyWalking的Agent组件。通过在每个微服务应用中引入SkyWalking的Agent,就可以实现对每个微服务节点的性能监控。其次,我们还需要在SkyWalking的Server端配置和管理各个微服务应用的监控数据,以便进行统一的性能分析和故障定位。 在服务整合的过程中,还需要考虑一些细节问题,比如Agent的版本兼容性、监控数据的采集频率和存储策略、以及监控数据的可视化展示等。同时,还需要注意Agent的性能开销和系统资源消耗,避免给微服务应用带来过大的性能损耗。 通过整合SpringCloud和SkyWalking,我们可以实现对整个微服务架构的性能监控和分析,及时发现系统中的性能瓶颈和故障节点,为系统的稳定性和可靠性提供保障。同时,还可以利用SkyWalking的可视化监控界面,直观地展示微服务架构的性能指标和运行情况,为开发人员和运维人员提供更加直观和有效的管理工具。 总之,SpringCloud服务整合SkyWalking是一个非常有益的举措,可以提升微服务架构的可观测性和可管理性,为系统的稳定性和高效性提供保障。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值