
1. 背景与核心概念什么是可观测性平台在复杂的分布式系统和云原生架构成为主流的今天传统的监控手段已经显得力不从心。你是否遇到过这样的场景线上服务突然变慢告警信息铺天盖地但你却像在黑暗中摸索不知道问题到底出在哪个微服务、哪个数据库连接池还是哪段代码逻辑传统的监控Monitoring主要关注“已知的未知”即预设好指标和阈值当系统偏离预设状态时发出告警。然而现代系统故障往往是“未知的未知”问题根源错综复杂仅靠几个预设指标根本无法快速定位。这正是可观测性Observability要解决的核心问题。它不是一个产品而是一种系统属性指通过系统外部输出的信息如日志、指标、链路来推断其内部状态的能力。一个具备高可观测性的系统能让开发者像拥有“X光透视眼”一样清晰地看到请求在成百上千个服务间流转的完整路径、每一步的耗时、资源消耗以及任何异常。而可观测性平台就是将这种能力工程化、产品化的工具集合。它通常整合了三大支柱指标Metrics反映系统状态的数值化度量如CPU使用率、请求QPS、错误率。特点是可聚合、适合告警。日志Logs系统运行时产生的离散事件记录包含丰富的上下文信息用于记录“发生了什么”。链路Traces记录单个请求在分布式系统中流转的完整路径用于分析请求延迟和依赖关系。Gartner作为全球最具权威的IT研究与顾问咨询公司其发布的《Magic Quadrant for Application Performance Monitoring and Observability》报告是业界选型的重要风向标。报告将厂商分为四个象限领导者Leaders、挑战者Challengers、远见者Visionaries和利基者Niche Players。“挑战者”称号意味着该厂商在执行能力即产品、服务、市场表现上具有强大实力市场份额和客户基数增长迅速是市场格局的有力竞争者。因此“阿里云获Gartner可观测性平台挑战者称号”这一事件标志着阿里云在可观测性领域的产品成熟度、市场执行力以及未来潜力获得了国际顶级分析机构的认可。对于开发者而言这意味着我们手边多了一个经过市场验证的、强大的工具选项来应对日益复杂的系统运维与排障挑战。2. 环境准备与版本说明在深入探讨阿里云可观测性平台其核心产品为应用实时监控服务 ARMS和日志服务 SLS的具体实践前我们先明确一个基础的实战环境。本文的示例将围绕一个典型的Spring Boot微服务展开演示如何将其接入阿里云可观测性体系。你可以使用任何你熟悉的Spring Boot项目或者按照以下步骤创建一个最简单的示例。环境要求操作系统Windows 10/11, macOS, 或主流Linux发行版如Ubuntu 20.04。Java开发环境JDK 8 或 JDK 11推荐。本文示例使用JDK 11。构建工具Apache Maven 3.6 或 Gradle。IDEIntelliJ IDEA, Eclipse, VS Code 等均可。阿里云账号拥有一个有效的阿里云账号并确保账号余额或信用额度足以开通相关产品部分功能有免费额度。示例项目结构我们将创建一个名为demo-observability的Spring Boot项目包含一个简单的REST接口。demo-observability/ ├── pom.xml ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ └── controller/ │ │ │ └── HelloController.java │ │ └── resources/ │ │ ├── application.properties │ │ └── arms-agent.config │ └── test/ │ └── java/ └── target/版本说明本文涉及的阿里云产品组件版本会随时间更新以下配置思路具有通用性。具体Agent版本请在阿里云控制台获取最新推荐版本。Spring Boot: 2.7.xarms-spring-boot-starter: 建议使用阿里云官方推荐的最新稳定版本。3. 核心组件与原理拆解阿里云的可观测性能力并非单一产品而是一个由多个服务有机组合的解决方案。理解其核心组件及其扮演的角色是有效使用它的关键。3.1 应用实时监控服务 ARMSARMS 是可观测性体系中的“大脑”和“展示层”专注于应用性能管理(APM)和链路追踪。核心功能应用监控自动发现并监控应用拓扑、接口调用、JVM性能、慢SQL等。前端监控监控浏览器、小程序、Node.js端的性能与异常。链路追踪基于OpenTelemetry等标准提供分布式请求链路还原精准定位慢调用和故障点。智能告警基于机器学习基线告警减少误报。工作原理通过在应用端安装一个轻量级的探针Agent以“旁路”方式收集JVM、HTTP调用、SQL执行等数据加密后上报到ARMS服务端进行处理、存储和可视化分析。它对业务代码几乎无侵入。3.2 日志服务 SLSSLS 是海量日志数据的“中枢神经”负责日志的采集、存储、查询与分析。核心功能日志采集支持服务器文件、标准输出、SDK等多种方式采集。实时查询与分析使用强大的查询语言能秒级查询TB级日志。日志审计与监控结合告警功能实现基于日志内容的实时监控。对接生态与ARMS、云监控等无缝集成实现“指标-链路-日志”联动。与ARMS的关系ARMS侧重于应用性能的“结构化”指标和链路而SLS处理的是“非结构化”或“半结构化”的原始日志。两者通过TraceID关联可以在ARMS中看到某次慢调用的链路后一键跳转到SLS查询该请求对应的详细日志实现根因的快速定位。3.3 云监控云监控提供基础资源层如ECS、RDS、SLB的监控指标和事件告警是可观测性的“基石”。它与ARMS的应用层监控、SLS的日志层监控共同构成了从基础设施到应用逻辑的立体监控体系。为什么需要整合现代故障排查是一个“剥洋葱”的过程。通常流程是云监控告警如CPU飙升- ARMS查看应用拓扑和接口性能定位到具体问题应用和接口- 查看该接口的调用链路找到慢在哪一步- 跳转SLS查询该链路对应的错误日志和上下文最终定位错误代码行或异常参数。阿里云将这些工具无缝集成正是其可观测性平台强大执行力的体现。4. 完整实战将Spring Boot应用接入阿里云可观测性平台接下来我们通过一个完整的示例将手写的Spring Boot应用接入ARMS和SLS体验端到端的可观测性。4.1 第一步阿里云资源准备开通服务登录 阿里云控制台 搜索并开通应用实时监控服务 ARMS和日志服务 SLS。新用户通常有免费试用额度。创建ARMS应用进入ARMS控制台在“应用监控”-“应用列表”中点击“新建应用”。填写应用名称如demo-springboot-app选择地域。创建成功后你会获得一个License Key和一个上报地址。请记录它们。创建SLS项目与日志库进入SLS控制台选择一个地域建议与ARMS应用所在地域相同创建一个Project如demo-observability-log在该Project下创建一个Logstore如app-log用于存储应用日志。4.2 第二步Spring Boot项目配置与改造1. 添加Maven依赖在项目的pom.xml中引入ARMS的Spring Boot Starter。!-- 文件路径pom.xml -- dependency groupIdcom.alibaba.arms.apm/groupId artifactIdarms-spring-boot-starter/artifactId version2.1.1/version !-- 请使用控制台推荐的最新版本 -- /dependency2. 配置应用启动参数编辑你的IDE运行配置或准备启动脚本添加JVM参数来指定ARMS Agent。这是最关键的一步。# 启动命令示例 java -javaagent:/path/to/arms-agent/arms-bootstrap-1.7.0-SNAPSHOT.jar \ # Agent jar包路径 -Darms.licenseKeyyour_license_key_from_console \ # 替换为你的License Key -Darms.appNamedemo-springboot-app \ # 替换为你的应用名 -jar your-application.jarAgent下载arms-bootstrap-*.jar需要从ARMS控制台你的应用详情页中下载。配置方式更推荐使用arms-agent.config文件进行配置便于管理。将下载的Agent包中的arms-agent.config文件复制到你的项目src/main/resources目录下并修改其中关键配置# 文件路径src/main/resources/arms-agent.config licenseKeyyour_license_key_from_console appNamedemo-springboot-app # 其他配置保持默认即可然后启动命令可以简化为java -javaagent:/path/to/arms-agent/arms-bootstrap-1.7.0-SNAPSHot.jar -jar your-application.jar3. 配置SLS日志Appender为了将日志自动采集到SLS我们需要配置LogbackSpring Boot默认日志框架。首先在pom.xml中添加SLS Logback Appender依赖。!-- 文件路径pom.xml -- dependency groupIdcom.aliyun.openservices/groupId artifactIdaliyun-log-logback-appender/artifactId version0.1.16/version /dependency然后创建或修改src/main/resources/logback-spring.xml配置文件。?xml version1.0 encodingUTF-8? !-- 文件路径src/main/resources/logback-spring.xml -- configuration !-- 控制台输出 -- appender nameCONSOLE classch.qos.logback.core.ConsoleAppender encoder pattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n/pattern /encoder /appender !-- 阿里云SLS Appender -- appender nameSLS classcom.aliyun.openservices.aliyun.log.producer.LogBackAppender encoder classch.qos.logback.classic.encoder.PatternLayoutEncoder pattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} [%X{traceId}] - %msg%n/pattern /encoder !-- 替换为你的SLS项目配置 -- endpointcn-hangzhou.log.aliyuncs.com/endpoint !-- SLS Project所在区域Endpoint -- accessKeyId${ACCESS_KEY_ID}/accessKeyId !-- 建议使用环境变量 -- accessKeySecret${ACCESS_KEY_SECRET}/accessKeySecret projectdemo-observability-log/project logStoreapp-log/logStore topicdemo-app/topic timeFormatyyyy-MM-ddTHH:mmZ/timeFormat timeZoneUTC/timeZone /appender root levelINFO appender-ref refCONSOLE/ appender-ref refSLS/ /root /configuration注意AccessKey建议通过环境变量注入切勿直接提交到代码仓库。4.3 第三步编写示例代码并运行创建一个简单的Controller模拟一些业务逻辑。// 文件路径src/main/java/com/example/demo/controller/HelloController.java package com.example.demo.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; RestController Slf4j public class HelloController { GetMapping(/hello) public String sayHello(RequestParam(value name, defaultValue World) String name) { log.info(Received a request to greet: {}, name); // 模拟业务处理 try { Thread.sleep(50); // 模拟处理耗时 } catch (InterruptedException e) { log.error(Sleep interrupted, e); } if (error.equalsIgnoreCase(name)) { log.error(An error was triggered for name: {}, name); throw new RuntimeException(Simulated error for demo); } String message Hello, name !; log.info(Response prepared: {}, message); return message; } }使用配置好的启动命令运行应用。访问http://localhost:8080/hello和http://localhost:8080/hello?nameerror几次生成正常的和异常的流量。4.4 第四步在控制台查看可观测性数据ARMS控制台进入ARMS“应用监控”-“应用列表”找到你的demo-springboot-app。点击进入应用详情你可以看到应用总览QPS、RT、错误率等黄金指标。应用拓扑直观展示应用本身及其依赖如数据库本例未配置。接口调用查看/hello接口的调用次数、平均耗时、错误率。调用链路在“链路查询”中可以搜索到每次/hello请求的详细轨迹包括进入Controller、执行日志、休眠耗时等Span信息。特别注意链路中会包含一个唯一的TraceID。SLS控制台进入你的Project和Logstoreapp-log。在查询分析页面你可以看到实时上报的日志。进行联动排查复制ARMS链路中的TraceID在SLS的查询框中输入__tag__:__trace_id__: your_trace_id即可查询到该次请求对应的所有日志实现从“链路”到“日志”的一键穿透。5. 常见问题与排查思路在集成和使用过程中你可能会遇到以下典型问题问题现象可能原因排查思路与解决方案ARMS控制台看不到应用数据1. Agent启动参数配置错误。2. License Key或应用名错误。3. 网络不通如服务器在VPC内未配置公网访问。1. 检查启动命令确保-javaagent路径正确且arms-agent.config文件被正确加载。2. 登录ARMS控制台核对应用名和License Key。3. 在服务器上执行telnet arms-agent-endpoint 80测试网络连通性Endpoint在控制台查看。确保VPC内ECS通过NAT网关或配置了ARMS私有接入点。SLS日志采集失败1. AccessKey权限不足或配置错误。2. SLS Project/LogStore名称错误。3. 日志库索引未开启。1. 检查使用的AccessKey是否拥有目标Project的写权限Log:PostLogStoreLogs。2. 核对logback-spring.xml中的endpoint,project,logStore配置。3. 进入SLS控制台在Logstore的“查询分析”页签下确认已开启“全文索引”或“字段索引”。链路与日志无法通过TraceID关联1. 日志Pattern中未包含TraceID占位符。2. Logback配置中未使用MDC或相关上下文。1. 确保日志输出模式Pattern中包含[%X{traceId}]或类似能输出TraceID的变量。ARMS Agent会自动将TraceID注入MDC。2. 检查是否引入了正确的arms-spring-boot-starter它负责了上下文的传递。Agent导致应用启动变慢或CPU升高1. Agent版本与JDK或Spring Boot版本不兼容。2. 采样率或数据量过大。1. 前往ARMS控制台下载与你的环境匹配的最新版本Agent。2. 在arms-agent.config中调整采样率如sampleRate1000表示每1000次请求采样1次和插件开关减少非必要数据的收集。6. 最佳实践与工程建议将可观测性有效落地到生产环境远不止接入SDK那么简单。以下是一些关键的最佳实践标准化与规范化日志规范制定团队统一的日志格式明确INFO、WARN、ERROR等级别的使用场景。确保关键业务日志包含业务ID、用户ID、操作类型等固定字段便于SLS进行统计分析。命名规范ARMS应用名、SLS的Project/LogStore命名需遵循清晰的规则如{部门}-{产品线}-{环境}-{组件}便于管理和权限分配。合理的采样与成本控制全量采集所有链路和日志成本极高。应为不同环境设置不同的采样率生产环境核心业务链路可全采样或高采样非核心业务低采样预发和环境可抽样采样。利用SLS的日志投递功能将原始日志冷存储至OSS仅将需要实时查询的热数据保留在SLS大幅降低成本。告警智能化与降噪避免“告警风暴”。利用ARMS的智能基线告警让系统学习指标的正常波动规律只在异常偏离基线时才告警。告警升级机制设置多级通知如企业微信-电话确保严重告警能被及时响应。在SLS中设置基于日志内容的告警例如特定错误码出现频率在5分钟内超过10次即触发。安全与权限管理遵循最小权限原则。为不同的运维、开发角色创建RAM子用户并授予其仅能访问特定ARMS应用或SLS Project的权限避免数据越权访问。生产环境的AccessKey、License Key等敏感信息必须通过环境变量、KMS或专门的配置中心如阿里云ACM管理严禁硬编码。性能影响评估在预发环境对接入Agent的应用进行压测评估其对应用RT、CPU、内存的额外开销通常应在5%以内。根据评估结果调整Agent配置。建立可观测性文化将可观测性纳入开发流程代码评审时检查关键日志点故障复盘时必须使用链路和日志作为分析依据。制作可观测性视图在ARMS中为不同服务、不同团队定制专属的应用大盘将核心指标可视化让状态一目了然。通过以上步骤你不仅能够将应用成功接入阿里云可观测性平台更能建立起一套可持续运营的、高效的运维排障体系。Gartner将阿里云评为挑战者正是对其产品在帮助企业实现这些最佳实践方面所具备能力的肯定。作为开发者熟练掌握这套工具能让你在应对系统复杂性时更加从容真正将技术风险转化为可控的工程问题。