SkyWalking - 指标(Metrics)采集:JVM、OS、HTTP 等内置指标说明

news2026/4/11 3:16:50
大家好欢迎来到我的技术博客 在这里我会分享学习笔记、实战经验与技术思考力求用简单的方式讲清楚复杂的问题。 本文将围绕SkyWalking这个话题展开希望能为你带来一些启发或实用的参考。 无论你是刚入门的新手还是正在进阶的开发者希望你都能有所收获文章目录SkyWalking - 指标Metrics采集JVM、OS、HTTP 等内置指标说明 什么是 SkyWalking 指标Metrics SkyWalking 指标采集架构概览 ️JVM 指标详解与实战 1. 内存使用情况Memory UsageJava 示例模拟内存增长2. 垃圾回收GC指标查看 GC 日志辅助手段3. 线程与类加载指标Java 示例线程泄漏模拟操作系统OS指标监控 1. CPU 使用率2. 文件描述符File Descriptors查看系统 FD 限制3. 磁盘与网络 I/O有限支持HTTP/REST 接口指标详解 1. 请求量Throughput2. 延迟Latency3. 错误率Error RateJava 示例Spring Boot 接口监控数据库与中间件指标 ️JDBC 指标示例慢查询检测Redis/MQ 指标指标存储与查询 常见 MQL 查询示例告警Alarm配置实战 配置文件示例alarm-settings.ymlWebhook 接收示例Spring Boot性能影响与最佳实践 ⚖️性能影响评估最佳实践建议与其他监控系统的对比 结语让指标驱动运维决策 SkyWalking - 指标Metrics采集JVM、OS、HTTP 等内置指标说明 在现代微服务架构中可观测性Observability已成为保障系统稳定性和性能的关键支柱。而 Apache SkyWalking 作为一款开源的 APMApplication Performance Monitoring系统凭借其强大的分布式追踪、服务拓扑图、日志集成以及指标Metrics采集与分析能力被广泛应用于生产环境中。本文将深入探讨 SkyWalking 中关于 JVM、操作系统OS、HTTP 接口等核心组件的内置指标采集机制并通过 Java 示例代码帮助开发者理解如何利用这些指标进行性能监控与问题诊断。什么是 SkyWalking 指标Metrics 在 SkyWalking 的语境中指标Metrics是指对系统运行状态进行量化描述的数据点。它们通常是时间序列数据Time Series Data例如 CPU 使用率、内存占用、请求延迟、错误率等。SkyWalking 将这些指标分为多个维度服务级指标Service Metrics如服务平均响应时间、吞吐量TPS、成功率。实例级指标Instance Metrics如 JVM 堆内存使用、线程数、GC 时间。端点级指标Endpoint Metrics如某个 HTTP 接口/api/user的调用次数、P99 延迟。数据库/中间件指标如 SQL 执行耗时、Redis 命令延迟。这些指标由 SkyWalking Agent 在应用运行时自动采集并通过 gRPC 或 HTTP 协议上报至 SkyWalking OAPObservability Analysis Platform后端最终在 UI 控制台中可视化展示。提示SkyWalking 的指标体系基于其自研的Meter System和OpenTelemetry 兼容接口支持高度可扩展性。但本文聚焦于开箱即用的内置指标适用于大多数 Java 应用场景。SkyWalking 指标采集架构概览 ️在深入具体指标前先了解 SkyWalking 的指标采集流程有助于建立整体认知。以下是简化后的数据流InstrumentationCollect MetricsReport via gRPCStore inJava ApplicationSkyWalking AgentJVM / OS / HTTP MetricsSkyWalking OAP ServerStorage: ElasticSearch / MySQL / etc.SkyWalking UIVisualize MetricsAgent以 Java Agent 形式挂载到 JVM 进程中通过字节码增强Bytecode Instrumentation技术自动注入监控逻辑。OAP Server负责接收、聚合、分析指标数据并持久化到后端存储。UI提供图形化界面展示服务拓扑、指标曲线、告警等。整个过程对业务代码零侵入开发者只需配置 Agent 启动参数即可启用监控。JVM 指标详解与实战 JVM 是 Java 应用的运行基石其内部状态直接影响应用性能。SkyWalking Agent 自动采集以下关键 JVM 指标1. 内存使用情况Memory Usageheap_used_bytes堆内存已使用字节数。heap_max_bytes堆内存最大容量。non_heap_used_bytes非堆内存如 Metaspace使用量。memory_pool_used_bytes{pool“PS Eden Space”}各内存池Eden、Survivor、Old Gen使用情况。这些指标帮助判断是否存在内存泄漏或 GC 压力过大。Java 示例模拟内存增长importjava.util.ArrayList;importjava.util.List;publicclassMemoryLeakDemo{privatestaticListbyte[]memoryHognewArrayList();publicstaticvoidmain(String[]args)throwsInterruptedException{System.out.println(Starting memory leak simulation...);while(true){// 每次分配 10MB 内存memoryHog.add(newbyte[10*1024*1024]);Thread.sleep(500);// 触发 Full GC可选if(memoryHog.size()%200){System.gc();System.out.println(Full GC triggered at size: memoryHog.size());}}}}启动该程序并挂载 SkyWalking Agent 后在 UI 中可观察到heap_used_bytes持续上升周期性下降对应 GC 行为。若曲线呈“锯齿状”且基线不断抬高则可能存在内存泄漏。诊断建议结合gc\_count和gc\_time指标若 GC 频繁但内存回收效果差应使用 Heap Dump 工具如 Eclipse MAT进一步分析。2. 垃圾回收GC指标gc_count{action“end of minor GC”, cause“Allocation Failure”}Minor GC 次数。gc_time{action“end of major GC”}Major GC 耗时毫秒。young_gc_count / old_gc_count年轻代/老年代 GC 次数。高频 GC 或长时间 Stop-The-World 会导致应用卡顿。查看 GC 日志辅助手段虽然 SkyWalking 提供 GC 指标但详细 GC 日志仍需 JVM 参数开启-XX:PrintGCDetails-XX:PrintGCDateStamps-Xloggc:/var/log/myapp-gc.logSkyWalking 可通过 Log Collect 功能关联 GC 日志与指标实现根因分析。3. 线程与类加载指标thread_live_count活跃线程数。thread_daemon_count守护线程数。class_loaded_count已加载类数量。class_unloaded_count已卸载类数量。异常高的线程数可能预示线程泄漏如未关闭的线程池。Java 示例线程泄漏模拟importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;publicclassThreadLeakDemo{publicstaticvoidmain(String[]args)throwsInterruptedException{while(true){// 创建固定大小线程池但不关闭ExecutorServiceexecutorExecutors.newFixedThreadPool(10);executor.submit(()-{try{Thread.sleep(1000);}catch(InterruptedExceptione){}});// 忘记调用 executor.shutdown()Thread.sleep(100);}}}运行后thread_live_count将持续增长。在 SkyWalking UI 中可设置告警规则当线程数 500 持续 5 分钟时触发通知。操作系统OS指标监控 除了 JVM应用所依赖的操作系统资源同样关键。SkyWalking Agent 通过 JMX 或系统调用采集以下 OS 指标1. CPU 使用率cpu_percent进程 CPU 使用百分比非系统整体。system_cpu_percent系统整体 CPU 使用率部分版本支持。注意cpu_percent是当前 Java 进程占用的 CPU而非整机。若该值长期 80%需排查热点方法。2. 文件描述符File Descriptorsfd_used_count已使用的文件描述符数量。fd_max_count系统允许的最大 FD 数。在 Linux 系统中每个 TCP 连接、打开的文件都会消耗 FD。若fd_used_count接近fd_max_count将导致“Too many open files”错误。查看系统 FD 限制ulimit-n# 查看当前用户 FD 限制cat/proc/pid/limits|grepMax open files# 查看进程实际限制3. 磁盘与网络 I/O有限支持SkyWalking 对磁盘 I/O 的直接监控较弱但可通过以下间接指标推断buffer_pool_used_bytes{pool“direct”}Direct Buffer 使用量反映 NIO 网络/文件操作压力。结合 HTTP 指标中的高延迟可推测是否因磁盘慢导致。扩展阅读对于深度 OS 监控建议搭配 Prometheus Node Exporter。SkyWalking 支持通过OpenTelemetry Collector接收外部指标实现统一视图。详见 OpenTelemetry 官方文档。HTTP/REST 接口指标详解 微服务间通信多基于 HTTP/RESTSkyWalking 对主流 Web 框架Spring Boot、Tomcat、Jetty 等自动埋点采集以下端点级指标1. 请求量Throughputhttp_request_count{endpoint“/api/users”, status“200”}按端点和状态码统计的请求数。http_request_tps每秒事务数Transactions Per Second。高 TPS 代表服务负载高需关注资源是否充足。2. 延迟Latencyhttp_request_latency_avg平均响应时间毫秒。http_request_latency_p9999% 请求的延迟上限。http_request_latency_max最大延迟。P99 比平均值更能反映用户体验因它排除了少量异常慢请求的干扰。3. 错误率Error Ratehttp_request_error_count{status“500”}5xx 错误数。http_request_error_rate错误请求占比错误数 / 总请求数。错误率突增往往是故障的第一信号。Java 示例Spring Boot 接口监控importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;importjava.util.concurrent.ThreadLocalRandom;SpringBootApplicationRestControllerpublicclassDemoApplication{publicstaticvoidmain(String[]args){SpringApplication.run(DemoApplication.class,args);}GetMapping(/api/hello)publicStringhello(RequestParam(defaultValueWorld)Stringname){// 模拟随机延迟10~200mstry{Thread.sleep(ThreadLocalRandom.current().nextInt(10,200));}catch(InterruptedExceptione){Thread.currentThread().interrupt();}returnHello, name!;}GetMapping(/api/error)publicStringerror(){// 模拟 50% 概率抛出异常if(Math.random()0.5){thrownewRuntimeException(Simulated server error);}returnOK;}}启动后访问/api/hello?nameAlice和/api/error在 SkyWalking UI 的Dashboard → Endpoint页面可看到/api/hello的 P99 延迟约 200ms。/api/error的错误率接近 50%且http_request_error_count持续增加。52%48%/api/error 接口状态码分布200500⚠️注意SkyWalking 默认只记录 HTTP 4xx/5xx 为错误。若需将特定 200 响应视为业务错误如 JSON 中的{code: 500}需通过Customize Span Tag实现这属于高级用法。数据库与中间件指标 ️虽然本文重点在 JVM/OS/HTTP但 SkyWalking 对数据库操作也有深度监控JDBC 指标jdbc_statement_execute_latencySQL 执行延迟。jdbc_connection_acquire_latency获取数据库连接耗时。慢 SQL 是常见性能瓶颈。SkyWalking 会自动捕获 SQL 语句脱敏后并关联到调用链。示例慢查询检测// Spring Data JPA RepositorypublicinterfaceUserRepositoryextendsJpaRepositoryUser,Long{Query(valueSELECT * FROM users u WHERE u.created_at :date,nativeQuerytrue)ListUserfindOldUsers(Param(date)LocalDateTimedate);}若users表无索引该查询将变慢。在 SkyWalking 的Database Dashboard中可查看 Top N 慢 SQL。Redis/MQ 指标通过插件支持 LettuceRedis、RocketMQ、Kafka 等指标包括redis_command_latencykafka_produce_latency指标存储与查询 SkyWalking OAP 将指标写入后端存储如 ElasticSearch并通过Metrics Query Protocol (MQL)提供查询能力。常见 MQL 查询示例在 UI 的Metrics页面可直接输入-- 查询服务 user-service 的平均延迟service_resp_time.avg(user-service)-- 查询实例的堆内存使用率instance_jvm_memory_heap.used(user-service-instance-1)/instance_jvm_memory_heap.max(user-service-instance-1)*100-- 查询 HTTP 5xx 错误率http_endpoint_request.error(POST:/api/order)/http_endpoint_request.count(POST:/api/order)*100MQL 支持函数avg, p99, rate、标签过滤、数学运算功能强大。学习资源完整的 MQL 语法参考 SkyWalking 官方文档 - Metrics Query。告警Alarm配置实战 仅有指标还不够需设置告警规则及时发现问题。SkyWalking 支持基于指标的动态告警。配置文件示例alarm-settings.ymlrules:# 规则名称service_resp_time_rule:# 指标名对应 UI 中的 Metrics 名称metrics-name:service_resp_time# 操作符, , op:# 阈值单位毫秒threshold:1000# 周期最近 2 分钟内有 3 次超过阈值则告警period:2count:3# 仅针对特定服务include-names:-user-service-order-service# 告警消息模板message:High response time: {name} {value}, greater than {threshold} msinstance_jvm_memory_rule:metrics-name:instance_jvm_memory_heap_usedop:threshold:8589934592# 8GBperiod:5count:1message:High heap memory usage on {entity.name}: {value} bytes告警可通过 Webhook 发送至企业微信、钉钉、Slack 等。Webhook 接收示例Spring BootRestControllerpublicclassAlarmWebhookController{privatestaticfinalLoggerloggerLoggerFactory.getLogger(AlarmWebhookController.class);PostMapping(/skywalking-alarm)publicResponseEntityStringhandleAlarm(RequestBodyListAlarmMessagealarms){for(AlarmMessagealarm:alarms){logger.error(SkyWalking Alarm: {},alarm.toString());// 此处可集成工单系统、自动扩容等}returnResponseEntity.ok(Received);}publicstaticclassAlarmMessage{publicStringscopeId;publicStringscope;publicStringname;publicStringid;publicStringruleName;publicStringalarmMessage;publiclongstartTime;// getters and setters}}性能影响与最佳实践 ⚖️虽然 SkyWalking 强大但需权衡监控开销性能影响评估CPU 开销 3%默认配置下。内存开销约 50~100MB取决于采样率和指标数量。网络带宽每分钟上报数百 KB ~ 几 MB 数据。最佳实践建议调整采样率高流量系统可降低agent.sample_n_per_3_secs默认 -1 表示全采样。关闭非必要插件如不用 Dubbo可在agent/plugins中移除相关 jar。指标聚合OAP 端启用metrics-data-ttl自动清理历史数据。敏感信息脱敏通过agent.ignore_suffix过滤隐私 URL。# 启动参数示例-javaagent:/path/to/skywalking-agent/skywalking-agent.jar-Dskywalking.agent.service_namemy-order-service-Dskywalking.collector.backend_service127.0.0.1:11800-Dskywalking.agent.sample_n_per_3_secs1# 每 3 秒采样 1 次与其他监控系统的对比 特性SkyWalkingPrometheus GrafanaZipkin自动埋点✅Java Agent❌需手动埋点❌需客户端上报JVM 指标✅ 内置❌需 JMX Exporter❌服务拓扑✅ 实时自动发现❌❌存储依赖ES/MySQL/TiDBPrometheus TSDBCassandra/ES学习曲线中等较陡峭简单结论若以 Java 微服务为主SkyWalking 的开箱即用性和一体化体验Trace Metric Log具有显著优势。结语让指标驱动运维决策 通过本文我们系统梳理了 SkyWalking 在 JVM、OS、HTTP 等层面的内置指标体系并辅以 Java 代码示例和实战配置。这些指标不仅是“事后复盘”的依据更是主动运维的基础——通过设置合理的阈值与告警团队能在用户感知问题前介入处理。记住没有监控的系统等于盲人骑瞎马。而 SkyWalking 正是那盏照亮微服务迷宫的明灯。开始集成吧让你的应用运行状态尽在掌握✨延伸学习Apache SkyWalking 官方网站OpenTelemetry 规范JVM 性能调优指南Oracle 感谢你读到这里 技术之路没有捷径但每一次阅读、思考和实践都在悄悄拉近你与目标的距离。 如果本文对你有帮助不妨 点赞、收藏、分享给更多需要的朋友 欢迎在评论区留下你的想法、疑问或建议我会一一回复我们一起交流、共同成长 关注我不错过下一篇干货我们下期再见✨

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2421927.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…