【SkyWalking从入门到精通】第63篇:监控SkyWalking本身——别让你的APM成为盲点
下一篇【第62篇】通信扩展最佳实践——gRPC/HTTP/Kafka全景对比与选型决策上一篇【第64篇】Trace数据的采集与指标监控——OAL计算、批量操作与数据积压全面监控一、医者不自医的困境每个运维人员都遇到过这种噩梦凌晨3点手机响了生产系统出问题了。你揉着眼睛打开SkyWalking UI想看看到底哪个服务挂了。结果发现——SkyWalking OAP自己崩了或者ES集群CPU 100%或者OAP所在的机器内存被吃光了。你无法看到任何Trace、任何指标、任何告警。你变成了盲人——明明装了APM却在关键时刻什么都看不见。这就是医者不自医的问题。SkyWalking作为APM系统负责监控你的整个微服务体系。但SkyWalking本身——OAP Server、存储集群、网络连接——它们也是需要被监控的。------------------------------------------------------------------ | APM监控的盲区 | ------------------------------------------------------------------ | | | ┌─────────────────────────────────────────┐ │ | │ ✅ 微服务可观测 │ │ | │ ✅ Trace链路可见 │ │ | │ ✅ 指标图表正常 │ │ | │ ✅ 告警规则生效 │ │ | └─────────────────────────────────────────┘ | | | | ┌─────────────────────────────────────────┐ │ | │ ❌ SkyWalking自身的状态 │ │ | │ ❌ OAP Server的CPU/内存 │ │ | │ ❌ ES集群的查询延迟 │ │ | │ ❌ 数据是否有积压 │ │ | │ ❌ 网络连接是否正常 │ │ | └─────────────────────────────────────────┘ | | | | 如果不监控这些你的APM系统就是一个定时炸弹 | | | ------------------------------------------------------------------二、SkyWalking内置的自监控能力好消息是SkyWalking 8.x版本已经内置了自监控能力。OAP Server会暴露自己的指标你可以通过Prometheus来采集。2.1 自监控架构------------------------------------------------------------------ | SkyWalking自监控架构 | ------------------------------------------------------------------ | | | ┌────────────────────────────────────────────┐ │ | │ OAP Server │ │ | │ │ │ | │ ┌──────────────────────────────────────┐ │ │ | │ │ Self-Observability │ │ │ | │ │ │ │ │ | │ │ ┌──────────┐ ┌──────────┐ │ │ │ | │ │ │ Metrics │ │ Health │ │ │ │ | │ │ │ Collector│ │ Check │ │ │ │ | │ │ └─────┬────┘ └─────┬────┘ │ │ │ | │ │ │ │ │ │ │ | │ │ ┌─────▼─────────────▼────────┐ │ │ │ | │ │ │ Telemetry Module │ │ │ │ | │ │ │ 指标聚合 暴露 │ │ │ │ | │ │ └─────────────┬──────────────┘ │ │ │ | │ └────────────────┼───────────────────┘ │ │ | │ │ │ │ | └───────────────────┼──────────────────────┘ │ | │ │ | ┌──────────┼──────────┐ │ | │ │ │ │ | ↓ ↓ ↓ │ | ┌───────────┐ ┌──────────┐ ┌───────────────┐ │ | │Prometheus │ │ Grafana │ │ 告警系统 │ │ | │ 采集指标 │ │ 可视化 │ │ (AlertManager)│ │ | └───────────┘ └──────────┘ └───────────────┘ │ | | ------------------------------------------------------------------2.2 启用自监控# oap-server/config/application.yml# 启用Telemetry模块telemetry:selector:${SW_TELEMETRY:prometheus}# Prometheus配置prometheus:host:${SW_TELEMETRY_PROMETHEUS_HOST:0.0.0.0}port:${SW_TELEMETRY_PROMETHEUS_PORT:1234}# SSL配置如果需要sslEnabled:${SW_TELEMETRY_PROMETHEUS_SSL_ENABLED:false}sslKeyPath:${SW_TELEMETRY_PROMETHEUS_SSL_KEY_PATH:}sslCertChainPath:${SW_TELEMETRY_PROMETHEUS_SSL_CERT_CHAIN_PATH:}# Prometheus 采集配置 (prometheus.yml)scrape_configs:-job_name:skywalking-oapscrape_interval:15sstatic_configs:-targets:-oap-server-1:1234-oap-server-2:1234-oap-server-3:1234三、关键监控指标全解3.1 处理线程池状态OAP使用了多个线程池来处理不同阶段的数据。线程池的状态直接反映了OAP的处理能力。# 关键指标 # JVM指标 jvm_threads_live # 活跃线程数 jvm_threads_daemon # 守护线程数 jvm_threads_peak # 峰值线程数 # 自定义线程池指标 # OAP内部的线程池 oap_thread_pool_active_count # 活跃线程数 oap_thread_pool_queue_size # 等待队列大小⚠ 如果0说明有积压 oap_thread_pool_pool_size # 线程池大小 oap_thread_pool_largest_pool_size # 历史最大线程数 oap_thread_pool_completed_task_count # 已完成任务数 # 告警规则 # oap_thread_pool_queue_size 100 → 处理能力不足需要扩容 # oap_thread_pool_active_count / oap_thread_pool_pool_size 0.9 → 线程接近饱和3.2 网络连接数# gRPC连接指标Agent ↔ OAP grpc_server_connections_total # gRPC总连接数 grpc_server_messages_received_total # 接收消息总数 grpc_server_messages_sent_total # 发送消息总数 # HTTP连接指标如果启用了HTTP扩展 http_server_requests_seconds_count # HTTP请求总数 http_server_requests_seconds_sum # HTTP请求总耗时3.3 存储延迟存储Elasticsearch/MySQL等是OAP最重要的下游依赖。存储慢整个链路的处理都会慢。# Elasticsearch指标 # Bulk写入 es_bulk_write_latency_seconds_bucket # Bulk写入延迟分布 es_bulk_write_latency_seconds_count # Bulk写入次数 es_bulk_write_latency_seconds_sum # Bulk写入总耗时 # 查询延迟 es_query_latency_seconds_bucket # 查询延迟分布 es_query_latency_seconds_count # 查询次数 # 告警规则 # P99 es_bulk_write_latency 500ms → ES写入慢可能需要扩容 # P99 es_query_latency 1000ms → ES查询慢检查索引和查询性能3.4 Trace处理吞吐# Analyzer处理指标 # Trace处理吞吐 trace_segment_analysis_latency_seconds_bucket # 分析延迟 trace_segment_count_total # 处理总数 # 指标聚合 metrics_aggregation_latency_seconds_bucket # 聚合延迟 # 数据积压 # 如果 trace_segment_count_rate ES bulk写入速率 # → 数据积压需要扩容OAP或优化ES3.5 JVM核心指标# JVM内存 jvm_memory_bytes_used{areaheap} # 堆内存使用 jvm_memory_bytes_used{areanonheap} # 非堆内存使用 jvm_memory_bytes_committed # 已提交内存 jvm_memory_bytes_max # 最大内存 # JVM GC jvm_gc_collection_seconds_count # GC次数 jvm_gc_collection_seconds_sum # GC总耗时 # 告警规则 # heap_used / heap_max 0.85 → 堆内存即将耗尽 # P99 GC_time 1s → GC压力过大四、Prometheus告警规则# skywalking-oap-alerts.ymlgroups:-name:skywalking_oap_alertsrules:# 规则1: OAP实例宕机 -alert:OAPInstanceDownexpr:up{jobskywalking-oap} 0for:1mlabels:severity:criticalannotations:summary:OAP instance {{ $labels.instance }} is downdescription:OAP has been down for more than 1 minute# 规则2: JVM堆内存过高 -alert:OAPHighHeapUsageexpr:|(jvm_memory_bytes_used{areaheap} / jvm_memory_bytes_max{areaheap}) 0.85for:5mlabels:severity:warningannotations:summary:OAP heap usage 85%description:{{ $labels.instance }} heap usage {{ $value | humanizePercentage }}# 规则3: ES写入延迟高 -alert:OAPHighESWriteLatencyexpr:|histogram_quantile(0.99, rate(es_bulk_write_latency_seconds_bucket[5m]) ) 0.5for:5mlabels:severity:warningannotations:summary:ES bulk write P99 500msdescription:P99 latency {{ $value }}s for {{ $labels.instance }}# 规则4: 数据积压 -alert:OAPDataBackpressureexpr:oap_thread_pool_queue_size100for:5mlabels:severity:criticalannotations:summary:OAP has data backpressuredescription:Queue size {{ $value }} on {{ $labels.instance }}# 规则5: GC频繁 -alert:OAPFrequentGCexpr:rate(jvm_gc_collection_seconds_count[5m])10for:5mlabels:severity:warningannotations:summary:OAP GC is too frequentdescription:GC rate {{ $value }}/s on {{ $labels.instance }}五、Grafana仪表盘5.1 OAP概览面板{dashboard:{title:SkyWalking OAP Overview,panels:[{title:OAP Instances,targets:[{expr:count(up{job\skywalking-oap\} 1)}]},{title:Trace Processing Throughput,targets:[{expr:rate(trace_segment_count_total[1m])}]},{title:JVM Heap Usage,targets:[{expr:jvm_memory_bytes_used{area\heap\} / jvm_memory_bytes_max{area\heap\} * 100}]},{title:ES Write Latency P99,targets:[{expr:histogram_quantile(0.99, rate(es_bulk_write_latency_seconds_bucket[5m]))}]}]}}六、多层监控体系的搭建建议------------------------------------------------------------------ 多层监控体系 ------------------------------------------------------------------ | | | Layer 1: 基础设施监控 | | ┌────────────────────────────────────────────────────────────┐ │ | │ 服务器指标: CPU, Memory, Disk, Network │ │ | │ 使用: Prometheus Node Exporter, CAdvisor │ │ | └────────────────────────────────────────────────────────────┘ │ | ↓ 发现异常 ↓ │ | Layer 2: 中间件监控 | | ┌────────────────────────────────────────────────────────────┐ │ | │ ES集群: Search Rate, Indexing Rate, Cluster Health │ │ | │ Kafka: Consumer Lag, Broker Throughput │ │ | │ 使用: ES Exporter, Kafka Exporter │ │ | └────────────────────────────────────────────────────────────┘ │ | ↓ 发现异常 ↓ │ | Layer 3: SkyWalking自监控 | | ┌────────────────────────────────────────────────────────────┐ │ | │ OAP: 处理吞吐, 队列大小, JVM, 连接数 │ │ | │ Agent: 上报成功率, 连接状态 │ │ | │ 使用: SkyWalking Telemetry Prometheus │ │ | └────────────────────────────────────────────────────────────┘ │ | ↓ 发现异常 ↓ │ | Layer 4: 业务应用监控 | | ┌────────────────────────────────────────────────────────────┐ │ | │ 微服务: Trace, Metrics, Topology │ │ | │ 使用: SkyWalking 本身! │ │ | └────────────────────────────────────────────────────────────┘ │ | | | 监控的黄金法则永远从最底层开始排查 | | 基础设施 → 中间件 → APM自身 → 业务应用 | | | ------------------------------------------------------------------七、总结监控SkyWalking本身不是过度设计而是生产环境必备的安全网。核心要点启用Telemetry模块让OAP暴露Prometheus指标关注四大指标线程池状态、存储延迟、处理吞吐、JVM健康建立告警规则OAP宕机、数据积压、内存过高必须告警搭建监控面板Grafana可视化让你一眼看到全局状态分层监控从基础设施到业务应用层层覆盖下一个要深入的方向是Trace数据的采集与指标监控。下一篇【第62篇】通信扩展最佳实践——gRPC/HTTP/Kafka全景对比与选型决策上一篇【第64篇】Trace数据的采集与指标监控——OAL计算、批量操作与数据积压全面监控

相关新闻

BLIP与BLIP-2多模态模型实战:从原理到应用

BLIP与BLIP-2多模态模型实战:从原理到应用

1. 项目概述:CV转多模态大模型的第五周攻坚 上周我们完成了CLIP模型的迁移学习实践,这周要啃的硬骨头是BLIP和BLIP-2这两个视觉-语言预训练领域的标杆模型。不同于CLIP的对比学习范式,BLIP系列开创性地将图像编码器与文本生成器结合&#xff…

2026/7/22 12:17:58阅读更多 →
Rust构建轻量级世界杯CLI工具的技术实践

Rust构建轻量级世界杯CLI工具的技术实践

1. 项目概述:当Rust遇上世界杯数据 去年用Java写的世界杯数据查询工具终于迎来了彻底重构——这次我们选择了Rust作为技术栈,配合自研的TeaQL数据引擎,打造了一个仅7MB大小的命令行交互程序。这个看似简单的工具背后,其实藏着不少…

2026/7/22 12:15:57阅读更多 →
Skynet框架源码解析与服务器开发实战

Skynet框架源码解析与服务器开发实战

1. Skynet框架概述与源码学习价值 Skynet是一个轻量级的游戏服务器框架,采用C语言编写核心模块,通过Lua脚本实现业务逻辑。这个设计使得它在保持高性能的同时,又具备足够的灵活性。我第一次接触Skynet是在开发一个实时对战游戏时,…

2026/7/22 12:15:57阅读更多 →
PixiJS 2D渲染引擎入门:从WebGL原理到实战项目开发

PixiJS 2D渲染引擎入门:从WebGL原理到实战项目开发

1. 项目概述:为什么是PixiJS?如果你正在寻找一个能在浏览器里高效、流畅地绘制2D图形的工具,无论是做H5小游戏、数据可视化大屏,还是复杂的互动营销页面,PixiJS大概率会出现在你的候选名单前列。它不是Canvas API的简单…

2026/7/22 13:18:13阅读更多 →
MobileSAM轻量化分割模型解析与优化实践

MobileSAM轻量化分割模型解析与优化实践

1. MobileSAM论文核心贡献解析MobileSAM作为轻量化分割模型的里程碑式工作,其核心创新在于将原始SAM模型的参数量从637M压缩到仅9.6M,同时保持了较好的零样本分割能力。论文提出的解耦蒸馏策略(Decoupled Knowledge Distillation)…

2026/7/22 13:18:13阅读更多 →
参数化开孔设计:从基础概念到Fusion 360实战应用

参数化开孔设计:从基础概念到Fusion 360实战应用

最近在刷短视频时,你是不是经常看到这样的场景:一块完整的板材,经过设计师在屏幕上点点画画,机器就自动开出各种形状的孔洞,然后组装成精美的家具或装饰品?这种“开孔”操作背后,其实是一套成熟…

2026/7/22 13:18:13阅读更多 →
GCC 7下Abseil库编译兼容性问题的深度解析与解决方案

GCC 7下Abseil库编译兼容性问题的深度解析与解决方案

1. 项目概述:当现代C库遇上“经典”编译器最近在为一个老项目的技术栈升级做适配,核心目标是把代码迁移到C17标准,同时引入Google的Abseil库来替换一些老旧的工具组件。项目本身运行在一个相对稳定的Linux生产环境上,系统自带的GC…

2026/7/22 13:18:13阅读更多 →
Resource2Skill: Distilling Executable Skills from Human-Created Resources for Software Agents

Resource2Skill: Distilling Executable Skills from Human-Created Resources for Software Agents

阅读笔记:Resource2Skill — Distilling Executable Skills from Human-Created Resources for Software Agents TL;DR 这篇论文用 从多模态人类资源(教学视频、代码库、文章、参考制品)蒸馏出可执行技能、再组织成层级化多模态 Skill Wiki…

2026/7/22 13:18:13阅读更多 →
C++属性attribute

C++属性attribute

目录 〇,基本信息 一,常用的C属性 1, [[nodiscard]] 2,[[maybe_unused]] 3,[[deprecated]] 4,[[likely]] / [[unlikely]] 二,更多C属性 1,[[fallthrough]] 2,[…

2026/7/22 13:16:13阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 0:53:59阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 0:53:59阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 0:53:59阅读更多 →
中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业做小程序,最常见的矛盾是预算有限,但又不希望功能太单薄;没有技术团队,但又希望后续能自己运营;想快速上线,又担心隐性收费和售后失联。选型时如果只看“低价套餐”或“案例数量”,很容…

2026/7/22 0:01:17阅读更多 →
GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

企业做营销,最怕钱花完了,资产没有留下。 效果广告能带来一段时间的曝光,但预算停止后,流量往往也随之停止。短视频内容可能在几天内冲高,也可能很快沉下去。AI搜索时代,企业需要重新思考一个问题&#xff…

2026/7/22 0:01:17阅读更多 →
Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复 一、你的 Agent 在"再想想"的循环里绕了 12 轮,用户已经关窗口了 Agent 与人最大的区别是:人知道什么时候该停下来给答案,Agent 会一直"想"下去。你给 Agent 接…

2026/7/22 0:01:17阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/21 22:53:50阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/21 18:53:30阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/21 18:53:30阅读更多 →