阿里云-spring boot 接入SLS日志

1.spring boot项目接入阿里云SLS日志

目的:收集业务日志

本项目集成:Slf4j、sls 通过配置log.xml,log.info()无侵入的更换日志采集

1.1.开通阿里云SLS日志收集

地址:

https://sls.console.aliyun.com/lognext/profile

1.2.创建project

1.3.接入数据

java应用的业务日志

1.4.项目配置

添加依赖

java 复制代码
        <!-- https://mvnrepository.com/artifact/com.aliyun.openservices/aliyun-log-logback-appender -->
        <dependency>
            <groupId>com.aliyun.openservices</groupId>
            <artifactId>aliyun-log-logback-appender</artifactId>
            <version>0.1.18</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.alibaba.arms.apm/arms-sdk -->
        <dependency>
            <groupId>com.alibaba.arms.apm</groupId>
            <artifactId>arms-sdk</artifactId>
            <version>1.7.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-core -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-core</artifactId>
            <version>5.8.38</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.17.0</version>
        </dependency>

配置日志(直接把日志写入到SLS)

java 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) [%X{traceId}] %highlight(%-5level) %boldMagenta(%logger{10}) - %cyan(%msg%n)</pattern>
        </encoder>
    </appender>

    <appender name="aliyun" class="com.aliyun.openservices.log.logback.LoghubAppender">
        <endpoint>cn-hangzhou.log.aliyuncs.com</endpoint>
        <accessKeyId>LTAI*********hAD7a</accessKeyId>           // 密钥管理申请
        <accessKeySecret>y*************ETp</accessKeySecret>
        <project>arms-sls-test</project>
        <logStore>arms-sls-logstore</logStore>
        <topic>arms-sls-topic</topic>

        <!-- Optional parameters -->
        <totalSizeInBytes>104857600</totalSizeInBytes>
        <maxBlockMs>0</maxBlockMs>
        <ioThreadCount>8</ioThreadCount>
        <batchSizeThresholdInBytes>524288</batchSizeThresholdInBytes>
        <batchCountThreshold>4096</batchCountThreshold>
        <lingerMs>2000</lingerMs>
        <retries>10</retries>
        <baseRetryBackoffMs>100</baseRetryBackoffMs>
        <maxRetryBackoffMs>50000</maxRetryBackoffMs>
        <timeFormat>yyyy-MM-dd'T'HH:mmZ</timeFormat>
        <timeZone>Asia/Shanghai</timeZone>

        <mdcFields>traceId</mdcFields>
    </appender>

    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="aliyun"/>
    </root>
</configuration>

获取traceId

java 复制代码
package org.draymond.arms.utils;

import jakarta.servlet.http.HttpServletRequest;

import cn.hutool.core.lang.UUID;
import com.alibaba.arms.tracing.Span;
import com.alibaba.arms.tracing.Tracer;
import org.apache.commons.lang3.StringUtils;
public class TraceIdUtil {

    public static String getTraceIdHttpRequest(HttpServletRequest request) {
        Span span = Tracer.builder().getSpan();
        String traceId = span.getTraceId();
        if (StringUtils.isNotBlank(traceId)) {
            return traceId;
        } else {
            traceId = StringUtils.isBlank(request.getHeader("trace_id")) ? request.getHeader("traceId") : request.getHeader("trace_id");
            return StringUtils.isNotBlank(traceId) ? traceId : UUID.fastUUID().toString();
        }
    }

    public static String getTraceId() {
        Span span = Tracer.builder().getSpan();
        String traceId = span.getTraceId();
        return StringUtils.isNotBlank(traceId) ? traceId : UUID.fastUUID().toString();
    }
}

业务使用

java 复制代码
@Slf4j
@Component
public class ArmsService {


    /**
     * 测试cpu占用
     *
     * @param number
     * @return
     */
    public ArmsModel cpuTest(Integer number) {
        MDC.put("traceId", TraceIdUtil.getTraceId());
        log.info("cpu测试, number={}", number);
        sleepNumberTime(number);
        ArmsModel build = ArmsModel.build(number);
        return build;
    }

}

SLS效果

后续可以根据traceId查询分布式日志

arms中使用traceId查询调用链

全链路

相关推荐
赵渝强老师3 小时前
【赵渝强老师】阿里云大数据集成开发平台DataWorks
大数据·阿里云·云计算
好奇的菜鸟4 小时前
Ubuntu 24.04 安装 MySQL 8 完整指南:包含远程连接和密码设置
ubuntu·阿里云·docker
好奇的菜鸟5 小时前
WSL上的Ubuntu 24.04 (Noble Numbat) 配置阿里云镜像源,提速软件安装
linux·ubuntu·阿里云
ArabySide12 小时前
【ASP.NET Core】ASP.NET Core应用的Docker容器化与阿里云托管
阿里云·docker·asp.net
一念一花一世界14 小时前
DevOps实战(13) - 使用Arbess下载Aliyun OSS制品进行主机部署
阿里云·ci/cd·devops·arbess
互联网老欣1 天前
2025年保姆级教程:阿里云服务器部署Dify+Ollama,打造专属AI应用平台
服务器·阿里云·ai·云计算·dify·ollama·deepseek
G31135422732 天前
从零开始 通义千问大模型本地化到阿里云通义千问API调用
阿里云·云计算
大侠课堂3 天前
互联网大厂面试题100道-阿里百度篇-完整版
百度·阿里云·面试·面试题·阿里
Serverless社区3 天前
【本不该故障系列】告别资源“不确定性”,SAE如何破解刚性交付核心困境
阿里云·云原生·serverless
斯文~4 天前
「玩透ESA」站点配置阿里云ESA全站加速+自定义规则缓存
阿里云·缓存·云计算·cdn·esa