【SkyWalking从入门到精通】第65篇:Service Mesh数据的采集监控——Mixer与ALS模式的监控差异与排查指南
下一篇【第64篇】Trace数据的采集与指标监控——OAL计算、批量操作与数据积压全面监控上一篇【第66篇】SkyWalking观测Service Mesh——挑战、混合部署与统一拓扑图一、Service Mesh监控的特殊性Service Mesh监控和传统的语言探针监控有着本质的不同------------------------------------------------------------------ | 两种数据采集模式的本质差异 | ------------------------------------------------------------------ | | | 传统Agent模式侵入式 | | ┌──────────────────────────────────────┐ │ | │ Application │ │ | │ ┌────────────────────────────┐ │ │ | │ │ Business Code │ │ │ | │ │ ┌──────────────────────┐ │ │ │ | │ │ │SkyWalking Agent │ │ │ │ | │ │ │(字节码增强,同进程) │ │ │ │ | │ │ └──────────────────────┘ │ │ │ | │ └────────────────────────────┘ │ │ | │ │ 上报 │ │ | └──────────────┼────────────────────────┘ │ | ↓ │ | OAP Server │ | | | Service Mesh模式非侵入式 | | ┌──────────────────────────────────────┐ │ | │ Pod │ │ | │ ┌──────────┐ ┌──────────┐ │ │ | │ │ App │ │ Envoy │ │ │ | │ │Container │ │Sidecar │ │ │ | │ │(无Agent!) │ │(代理所有 │ │ │ | │ │ │ │ 进出流量) │ │ │ | │ └─────┬─────┘ └────┬─────┘ │ │ | │ │ │ │ │ | │ 进出流量 ─────────→ Envoy截获 │ │ | │ │ 上报 │ │ | └────────────────────────┼──────────────┘ │ | ↓ │ | OAP Server │ | | | 关键区别: | | - Agent模式深入到代码级别能看到方法调用、数据库访问等 | | - Mesh模式只能在网络层面看到进出流量粒度粗但无需代码改动 | | | ------------------------------------------------------------------二、两种数据接收模式2.1 Mixer模式已废弃Istio的Mixer组件负责从Envoy收集遥测数据然后转发给Adapter如SkyWalking Mixer Adapter。------------------------------------------------------------------ Mixer模式的数据流 | ------------------------------------------------------------------ | | | Envoy Sidecar Istio Mixer | | ┌──────────────┐ ┌─────────────┐ | | │ 每次请求 │ │ │ | | │ ↓ │ ──report()──→ │ 接收请求 │ | | │ 构造Attribute│ │ ↓ │ | | │ (大量的 │ │ 检查规则 │ | | │ key-value) │ │ ↓ │ | | └──────────────┘ │ 调用Adapter │ | | │ ↓ │ | | │ SkyWalking │ | | │ Mixer │ ──→ OAP | | │ Adapter │ | | └─────────────┘ | | | | 问题每次请求都要同步调用Mixer → 性能开销大 | | Istio 1.5 已废弃Mixer | | | ------------------------------------------------------------------2.2 ALS模式Envoy Access Log ServiceALSAccess Log Service是Envoy的原生功能。Envoy将每次请求的访问日志通过gRPC流直接发送给配置的ALS服务端。------------------------------------------------------------------ ALS模式的数据流 ------------------------------------------------------------------ | | | Envoy Sidecar | | ┌────────────────────────────────────────────┐ | | │ │ | | │ 请求处理 │ | | │ ↓ │ | | │ 构造Access Log │ | | │ ┌──────────────────────────────────────┐ │ | | │ │ { │ │ | | │ │ timestamp: 2026-07-02T10:...,│ │ | | │ │ method: GET, │ │ | | │ │ path: /api/user, │ │ | | │ │ response_code: 200, │ │ | | │ │ upstream_host: order-svc:8080,│ │ | | │ │ duration: 45, // ms │ │ | | │ │ request_id: xxx, │ │ | | │ │ x-request-id: ..., │ │ | | │ │ ... │ │ | | │ │ } │ │ | | │ └──────────────────┬───────────────────┘ │ | | │ │ │ | | │ ↓ │ | | │ ┌──────────────────────────────────────┐ │ | | │ │ ALS gRPC Client (内置) │ │ | | │ │ 通过gRPC流发送到 OAP Server │ │ | | │ └──────────────────────────────────────┘ │ | | └──────────────────────┬─────────────────────┘ | | │ | | ┌──────────▼──────────┐ | | │ OAP Server │ | | │ ┌────────────────┐ │ | | │ │ ALS Receiver │ │ ← 端口 11800 (复用gRPC) │ | │ └───────┬────────┘ │ | | │ │ │ | | │ ↓ │ | | │ ┌────────────────┐ │ | | │ │ ALS Analyzer │ │ ← 解析AccessLog │ | │ │ → 构造Metrics │ │ → 生成拓扑 │ | │ │ → 构造Trace │ │ | | │ └────────────────┘ │ | | └──────────────────────┘ | | | ------------------------------------------------------------------三、Mixer vs ALS 的监控差异3.1 差异对比表------------------------------------------------------------------ Mixer vs ALS 监控指标对比 ------------------------------------------------------------------ | | | 指标维度 Mixer模式 ALS模式 | | ─────────────────────────────────────────────────────────────── │ | 数据完整性 取决于Mixer规则配置 默认完整所有请求 | | 延迟影响 每次请求额外调用Mixer 异步发送几乎无影响 | | CPU开销 OAPMixer双进程 仅OAP | | 内存开销 中等 中等 | | | | 可监控维度 较丰富(Attribute多) 受限(仅AccessLog字段) | | 配置复杂度 高(需Adapter规则) 低(仅Envoy配置) | | 数据丢失风险 高(Mixer过载时丢失) 中(gRPC流溢出时) | | | | 排查难度 Mixer→Envoy间链路复杂 单一链路简单 | | 版本兼容性 Istio 1.4- Istio 1.5 | | | ------------------------------------------------------------------3.2 ALS数据丢失的常见原因# ALS数据丢失排查清单 # 1. 检查Envoy配置是否正确kubectl get configmap-nistio-system istio-oyaml|grepaccessLog# 预期输出应包含:# accessLogFile: /dev/stdout# 或# accessLogService:# address: skywalking-oap.istio-system:11800# 2. 检查Envoy Sidecar是否正常运行kubectlexec-itpod-cistio-proxy -- pilot-agent request GET stats# 3. 查看Envoy的ALS连接状态kubectlexec-itpod-cistio-proxy --\curl-shttp://localhost:15000/clusters|grepals# 4. 检查OAP的ALS接收端口netstat-tlnp|grep11800# 5. 检查OAP日志# 搜索 ALS 或 AccessLog 相关日志grep-iaccess.log\|alsoap-server/logs/skywalking-oap-server.log四、大规模Service Mesh的OAP容量规划4.1 数据量估算公式------------------------------------------------------------------ Service Mesh数据量估算 ------------------------------------------------------------------ | | | 输入参数: | | ┌───────────────────────────────────────────┐ │ | │ P Pod数量 │ │ | │ R 每个Pod的请求速率 (requests/sec) │ │ | │ S 每个AccessLog的大小 (约300-500 bytes) │ │ | │ D 数据保留天数 │ │ | │ C 压缩比 (约0.3, Protobuf压缩) │ │ | └───────────────────────────────────────────┘ │ | | | 计算: | | ┌───────────────────────────────────────────┐ │ | │ 每秒数据量 P × R × S × C │ │ | │ 每天数据量 每秒数据量 × 86400 │ │ | │ 总存储量 每天数据量 × D (假设无副本) │ │ | │ OAP实例数 CEIL(每秒数据量 / 5000) │ │ | │ (假设单OAP处理5000条/秒) │ │ | └───────────────────────────────────────────┘ │ | | | 示例: | | P100个Pod, R100 req/s, S400 bytes | | 每秒数据量 100 × 100 × 400 × 0.3 1,200,000 bytes ≈ 1.2 MB/s| | 每天数据量 ≈ 100 GB | | 30天保留 ≈ 3 TB | | 推荐OAP实例数 CEIL(10000/5000) 2 | | 推荐ES节点数 3 (1主2数据) | | | ------------------------------------------------------------------4.2 参数调优参考# 不同规模下的OAP JVM参数建议# 小型 ( 50 Pods)JAVA_OPTS:-Xms2g -Xmx2g -XX:UseG1GC# 中型 (50-200 Pods)JAVA_OPTS:-Xms4g -Xmx4g -XX:UseG1GC -XX:MaxGCPauseMillis200# 大型 (200-500 Pods)JAVA_OPTS:-Xms8g-Xmx8g-XX:UseG1GC-XX:MaxGCPauseMillis200-XX:G1HeapRegionSize8m-XX:ParallelGCThreads8# 超大型 (500 Pods)JAVA_OPTS:-Xms16g -Xmx16g ...# 建议水平扩展OAP而非继续增加单机堆大小五、Agent与Service Mesh混合部署的监控在实际生产中混合架构非常常见——有些服务用Java Agent有些用Service Mesh。------------------------------------------------------------------ 混合部署的统一监控 ------------------------------------------------------------------ | | | ┌──────────────────────────────┐ ┌──────────────────────────────┐ | │ Java Service (有Agent) │ │ Go Service (无Agent) │ | │ ┌────────────────────────┐ │ │ ┌────────────────────────┐ │ | │ │ App │ │ │ │ App │ │ | │ │ SkyWalking Agent │ │ │ │ (无Agent) │ │ | │ └────────┬───────────────┘ │ │ └────────┬───────────────┘ │ | │ │ │ │ │ │ | │ 完整Trace: │ │ 仅有网络层: │ | │ 方法级DB缓存... │ │ 请求/响应/延迟 │ | │ │ │ │ │ │ | └───────────┼──────────────────┘ └───────────┼──────────────────┘ | │ │ │ | └────────────┬───────────────────┘ │ | │ │ | ↓ │ | ┌──────────────┐ │ | │ OAP Server │ │ | │ │ │ | │ 统一拓扑图中: │ │ | │ Agent节点:深度追踪 │ │ | │ Mesh节点:网络层数据 │ │ | └──────────────┘ │ | | | 混合监控的挑战: | | 1. Agent提供的数据比Mesh更丰富 → 拓扑图中信息不对称 | | 2. 一个请求穿越Agent和Mesh → 需要正确串联 | | 3. 需要sw8头部在Mesh层被保留Envoy默认保留所有Header | | | ------------------------------------------------------------------六、排查实例实例1ALS数据不上报# 症状SkyWalking UI中看不到Service Mesh的服务节点# 步骤1确认Envoy配置kubectlexec-itpod-cistio-proxy --\curl-shttp://localhost:15000/config_dump|\grep-A10access_log# 步骤2检查Envoy到OAP的网络连通性kubectlexec-itpod-cistio-proxy --\curl-stelnet://oap-service.istio-system:11800# 步骤3查看Envoy日志kubectl logspod-cistio-proxy|grep-ials\|access# 步骤4确认OAP中ALS Receiver已启用# 检查 application.yml 中 envoy-mesh 相关配置实例2数据量与预期不符# 症状Service Mesh的QPS远低于实际QPS# 可能原因# 1. Envoy只采样部分日志检查sampling配置# 2. DNS解析导致的重复请求未被正确合并# 3. 健康检查请求被错误计入# 4. OAP处理能力不足部分数据被丢弃# 排查# 1. 统计Envoy的实际请求数kubectlexec-itpod-cistio-proxy --\curl-shttp://localhost:15000/stats|grephttp.ingress# 2. 统计OAP接收到的AccessLog数量# 查看OAP的metrics端点curlhttp://oap:1234/metrics|grepenvoy_als# 3. 对比两者差异定位数据丢失环节七、总结Service Mesh的监控有其独特之处非侵入式无需修改应用代码Envoy Sidecar负责所有数据采集粒度有限只有网络层数据请求/响应/延迟不像Agent能深入方法级别ALS优于Mixer性能好、配置简单、Istio原生支持混合部署AgentMesh混合是很常见的架构需要关注拓扑图中信息层次的统一–下一篇我们将深入讲解SkyWalking如何具体观测Service Mesh。下一篇【第64篇】Trace数据的采集与指标监控——OAL计算、批量操作与数据积压全面监控上一篇【第66篇】SkyWalking观测Service Mesh——挑战、混合部署与统一拓扑图

相关新闻

【SkyWalking从入门到精通】第63篇:监控SkyWalking本身——别让你的APM成为盲点

【SkyWalking从入门到精通】第63篇:监控SkyWalking本身——别让你的APM成为盲点

下一篇【第62篇】通信扩展最佳实践——gRPC/HTTP/Kafka全景对比与选型决策 上一篇【第64篇】Trace数据的采集与指标监控——OAL计算、批量操作与数据积压全面监控 一、"医者不自医"的困境 每个运维人员都遇到过这种噩梦: 凌晨3点,手机响了&a…

2026/7/22 12:17:58阅读更多 →
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阅读更多 →
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阅读更多 →