开放分布式追踪(OpenTracing)入门与 Jaeger 实现
分布式系统的运维挑战
容器、Serverless 编程方式的诞生极大提升了软件交付与部署的效率。在架构的演化过程中,可以看到两个变化:
应用架构开始从单体系统逐步转变为微服务,其中的业务逻辑随之而来就会变成微服务之间的调用与请求。
资源角度来看,传统服务器这个物理单位也逐渐淡化,变成了看不见摸不到的虚拟资源模式。
从以上两个变化可以看到这种弹性、标准化的架构背后,原先运维与诊断的需求也变得越来越复杂。为了应对这种变化趋势,诞生一系列面向 DevOps 的诊断与分析系统,包括集中式日志系统(Logging),集中式度量系统(Metrics)和分布式追踪系统(Tracing)。
Logging,Metrics 和 Tracing
Logging,Metrics 和 Tracing 有各自专注的部分。
Logging - 用于记录离散的事件。例如,应用程序的调试信息或错误信息。它是我们诊断问题的依据。
Metrics - 用于记录可聚合的数据。例如,队列的当前深度可被定义为一个度量值,在元素入队或出队时被更新;HTTP 请求个数可被定义为一个计数器,新请求到来时进行累加。
Tracing - 用于记录请求范围内的信息。例如,一次远程方法调用的执行过程和耗时。它是我们排查系统性能问题的利器。
这三者也有相互重叠的部分,如下图所示。
通过上述信息,我们可以对已有系统进行分类。例如,Zipkin 专注于 tracing 领域;Prometheus 开始专注于 metrics,随着时间推移可能会集成更多的 tracing 功能,但不太可能深入 logging 领域; ELK,阿里云日志服务这样的系统开始专注于 logging 领域,但同时也不断地集成其他领域的特性到系统中来,正向上图中的圆心靠近。
关于三者关系的更详细信息可参考 Metrics, tracing, and logging。下面我们重点介绍下 tracing。
Tracing 的诞生
Tracing 是在90年代就已出现的技术。但真正让该领域流行起来的还是源于 Google 的一篇论文"Dapper, a Large-Scale Distributed Systems Tracing Infrastructure",而另一篇论文"Uncertainty in Aggregate Estimates from Sampled Distributed Traces"中则包含关于采样的更详细分析。论文发表后一批优秀的 Tracing 软件孕育而生,比较流行的有:
Dapper(Google) : 各 tracer 的基础
StackDriver Trace (Google)
Zipkin(twitter)
Appdash(golang)
鹰眼(taobao)
谛听(盘古,阿里云云产品使用的Trace系统)
云图(蚂蚁Trace系统)
sTrace(神马)
X-ray(aws)
分布式追踪系统发展很快,种类繁多,但核心步骤一般有三个:代码埋点,数据存储、查询展示。
下图是一个分布式调用的例子,客户端发起请求,请求首先到达负载均衡器,接着经过认证服务,计费服务,然后请求资源,最后返回结果。
数据被采集存储后,分布式追踪系统一般会选择使用包含时间轴的时序图来呈现这个 Trace。
但在数据采集过程中,由于需要侵入用户代码,并且不同系统的 API 并不兼容,这就导致了如果您希望切换追踪系统,往往会带来较大改动。
OpenTracing
为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。
OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。
OpenTracing 的优势
OpenTracing 已进入 CNCF,正在为全球的分布式追踪,提供统一的概念和数据标准。
OpenTracing 通过提供平台无关、厂商无关的 API,使得开发人员能够方便的添加(或更换)追踪系统的实现。
OpenTracing 数据模型
OpenTracing 中的 Trace(调用链)通过归属于此调用链的 Span 来隐性的定义。
特别说明,一条 Trace(调用链)可以被认为是一个由多个 Span 组成的有向无环图(DAG图),Span 与 Span 的关系被命名为 References。
例如:下面的示例 Trace 就是由8个 Span 组成:
单个 Trace 中,span 间的因果关系 [Span A] ←←←(the root span) | +------+------+ | | [Span B] [Span C] ←←←(Span C 是 Span A 的孩子节点, ChildOf) | | [Span D] +---+-------+ | | [Span E] [Span F] >>> [Span G] >>> [Span H] ↑ ↑ ↑ (Span G 在 Span F 后被调用, FollowsFrom)
有些时候,使用下面这种,基于时间轴的时序图可以更好的展现 Trace(调用链):
单个 Trace 中,span 间的时间关系 ––|–––––––|–––––––|–––––––|–––––––|–––––––|–––––––|–––––––|–> time [Span A···················································] [Span B··············································] [Span D··········································] [Span C········································] [Span E·······] [Span F··] [Span G··] [Span H··]
每个 Span 包含以下的状态:(译者注:由于这些状态会反映在 OpenTracing API 中,所以会保留部分英文说明)
An operation name,操作名称
A start timestamp,起始时间
A finish timestamp,结束时间
Span Tag,一组键值对构成的 Span 标签集合。键值对中,键必须为 string,值可以是字符串,布尔,或者数字类型。
Span Log,一组 span 的日志集合。
每次 log 操作包含一个键值对,以及一个时间戳。
键值对中,键必须为 string,值可以是任意类型。
但是需要注意,不是所有的支持 OpenTracing 的 Tracer,都需要支持所有的值类型。
SpanContext,Span 上下文对象 (下面会详细说明)
References(Span间关系),相关的零个或者多个 Span(Span 间通过 SpanContext 建立这种关系)
每一个 SpanContext 包含以下状态:
任何一个 OpenTracing 的实现,都需要将当前调用链的状态(例如:trace 和 span 的 id),依赖一个独特的 Span 去跨进程边界传输
Baggage Items,Trace 的随行数据,是一个键值对集合,它存在于 trace 中,也需要跨进程边界传输
更多关于 OpenTracing 数据模型的知识,请参考 OpenTracing语义标准。
OpenTracing 实现
这篇文档列出了所有 OpenTracing 实现。在这些实现中,比较流行的为 Jaeger 和 Zipkin。
Jaeger
Jaeger 是 Uber 推出的一款开源分布式追踪系统,兼容 OpenTracing API。
Jaeger 架构
如上图所示,Jaeger 主要由以下几部分组成。
Jaeger Client - 为不同语言实现了符合 OpenTracing 标准的 SDK。应用程序通过 API 写入数据,client library 把 trace 信息按照应用程序指定的采样策略传递给 jaeger-agent。
Agent - 它是一个监听在 UDP 端口上接收 span 数据的网络守护进程,它会将数据批量发送给 collector。它被设计成一个基础组件,部署到所有的宿主机上。Agent 将 client library 和 collector 解耦,为 client library 屏蔽了路由和发现 collector 的细节。
Collector - 接收 jaeger-agent 发送来的数据,然后将数据写入后端存储。Collector 被设计成无状态的组件,因此您可以同时运行任意数量的 jaeger-collector。
Data Store - 后端存储被设计成一个可插拔的组件,支持将数据写入 cassandra、elastic search。
Query - 接收查询请求,然后从后端存储系统中检索 trace 并通过 UI 进行展示。Query 是无状态的,您可以启动多个实例,把它们部署在 nginx 这样的负载均衡器后面。
Jaeger 存在的问题
需要架设并维护存储。
UI比较薄弱,有一些个性化的分析需求无法快速满足(例如对比,统计延迟分布等)。
Jaeger on Aliyun Log Service
Jaeger on Aliyun Log Service 是基于 Jeager 开发的分布式追踪系统,支持将采集到的追踪数据持久化到日志服务中,并通过 Jaeger 的原生接口进行查询和展示。
优势
原生 Jaeger 仅支持将数据持久化到 cassandra 和 elasticsearch 中,用户需要自行维护后端存储系统的稳定性,调节存储容量。Jaeger on Aliyun Log Service 借助阿里云日志服务的海量数据处理能力,让您享受 Jaeger 在分布式追踪领域给您带来便捷的同时无需过多关注后端存储系统的问题。
Jaeger UI 部分仅提供查询、展示 trace 的功能,对分析问题、排查问题支持不足。使用 Jaeger on Aliyun Log Service,您可以借助日志服务强大的查询分析能力,助您更快分析出系统中存在的问题。
相对于 Jaeger 使用 elasticsearch 作为后端存储,使用日志服务的好处是支持按量付费,成本仅为 elasticsearch 的13%。参阅自建ELK vs 日志服务(SLS)全方位对比
配置步骤
参阅:https://github.com/aliyun/jaeger/blob/master/README_CN.md
使用实例
HotROD 是由多个微服务组成的应用程序,它使用了 OpenTracing API 记录 trace 信息。
下面通过一段视频向您展示如何使用 Jaeger on Aliyun Log Service 诊断 HotROD 出现的问题。视频包含以下内容:
如何配置日志服务
如何通过 docker-compose 运行 Jaeger
如何运行 HotROD
通过 Jaeger UI 如何检索特定的 trace
通过 Jaeger UI 如何查看 trace 的详细信息
通过 Jaeger UI 如何定位应用的性能瓶颈
通过日志服务管理控制台,如何定位应用的性能瓶颈
应用程序如何使用 OpenTracing API
视频中用到的查询分析样例
1. 以分钟为单位统计 frontend服务的 HTTP GET /dispatch
操作的平均延迟以及请求个数。
2. 比较两条 trace 各个操作的耗时
3. 统计延迟大于 1.5s 的 trace 的 IP 情况
process.serviceName: "frontend" and operationName: "HTTP GET /dispatch" and duration > 1500000000 |select "process.tags.ip" as IP, truncate(avg(duration)/1000/1000) as avg_duration_ms, count(1) as countgroup by "process.tags.ip"
参考资料
Jaeger on Aliyun Log Service - https://github.com/aliyun/jaeger
OpenTracing 中文文档 - https://wu-sheng.gitbooks.io/opentracing-io/content/
Jaeger - http://jaeger.readthedocs.io/en/latest/getting_started/
OpenTracing tutorial - https://github.com/yurishkuro/opentracing-tutorial
http://peter.bourgon.org/blog/2017/02/21/metrics-tracing-and-logging.html
特别感谢
Jaeger on Aliyun Log Service 是基于阿里云MVP @WPH95 在业余时间工作整理而成,感谢 MVP
的杰出贡献!
解锁网络自由之门:小猫猫Clash全方位使用指南与高阶配置技巧
在当今数字化时代,网络访问限制成为许多用户面临的共同挑战。无论是学术研究、商务沟通还是娱乐消遣,一个稳定高效的网络代理工具都显得尤为重要。小猫猫Clash作为Clash客户端的改良版本,凭借其出色的性能和友好的用户体验,迅速成为众多科技爱好者和普通用户的首选解决方案。本文将带您深入探索这款工具的方方面面,从基础安装到高级配置,助您轻松驾驭网络代理的艺术。
一、认识网络代理利器:小猫猫Clash
小猫猫Clash并非简单的网络工具,而是一个功能强大的代理平台。它在传统Clash客户端的基础上进行了多项优化改进,使其在保持核心功能的同时,大幅提升了易用性和稳定性。与同类产品相比,小猫猫Clash最显著的特点在于其高度模块化的设计理念,用户可以根据自身需求灵活组合各种功能模块,打造个性化的代理体验。
这款工具支持包括HTTP、HTTPS、SOCKS5在内的多种代理协议,能够适应不同网络环境的需求。其内置的智能路由系统可以自动识别流量类型,并根据预设规则将不同类型的网络请求分流到最合适的代理通道,既保证了访问速度,又确保了隐私安全。
二、详细安装指南:跨平台部署全攻略
1. 准备工作与环境检查
在开始安装前,建议用户先确认系统版本和硬件配置是否符合要求。小猫猫Clash对系统资源的占用相对较低,即使是配置较旧的设备也能流畅运行。同时,确保您已拥有稳定的网络连接,以便顺利完成下载和后续的配置更新。
2. 分平台安装步骤详解
Windows平台安装:
访问官方网站下载最新版本的安装包(通常为.exe格式)。运行安装程序时,建议勾选"创建桌面快捷方式"选项以便快速启动。安装完成后,系统可能会提示您安装必要的网络组件,请按照指引完成这些依赖项的安装。
macOS平台部署:
下载.dmg格式的安装镜像后,将其挂载并拖拽应用程序图标至Applications文件夹。首次运行时可能会遇到安全警告,此时需进入系统设置中的"安全性与隐私"界面手动授权。
Linux系统配置:
对于基于Debian的发行版,可通过添加官方PPA源后使用apt-get命令安装;而Arch用户则可以通过AUR仓库获取最新版本。命令行爱好者还可以选择直接下载预编译的二进制文件进行部署。
移动端适配:
Android用户需要下载APK文件并在安装前启用"允许未知来源"选项;iOS用户则可通过TestFlight或企业证书渠道获取安装包,由于苹果商店政策限制,可能需要定期重新签名安装。
三、核心功能深度解析
1. 多协议支持与智能切换
小猫猫Clash的协议支持堪称全面,从基础的HTTP代理到加密的Shadowsocks、VMess等新兴协议都能完美兼容。其独特的协议自动切换功能可以根据网络质量实时选择最优连接方式,确保视频流畅播放、文件高速下载等不同场景下的最佳体验。
2. 规则引擎与流量管控
工具内置的规则系统是其最强大的功能之一。用户不仅可以导入现成的规则集,还能基于域名、IP段、关键词等多种条件创建自定义规则。例如,可以设置国内网站直连、学术资源走特定代理、广告域名直接屏蔽等精细化的流量管控策略。
3. 节点管理与负载均衡
支持同时配置多个代理节点,并能根据延迟、丢包率等指标自动选择最优线路。高级用户还可以设置自定义的负载均衡策略,将流量智能分配到不同节点,既提高了整体速度,又避免了单节点过载的情况。
四、进阶配置技巧与优化建议
1. 配置文件深度定制
小猫猫Clash使用YAML格式的配置文件,虽然看似复杂,但掌握基本语法后就能实现高度个性化的设置。建议从修改以下几个关键参数开始:
- proxies部分:添加或删除代理服务器信息
- proxy-groups:创建节点选择策略组
- rules:定制流量分流规则
2. 性能调优实战
通过调整并发连接数、缓存大小等参数可以显著提升工具性能。例如,在高速网络环境下适当增加并发数,而在移动网络下则应该优化重试机制以减少流量消耗。定期更新GEOIP数据库也能提高地域识别的准确性。
3. 安全防护配置
启用TLS加密、配置流量混淆等高级功能可以有效防止代理特征被识别和封锁。同时,建议开启DNS防泄漏功能,并定期检查IP地址是否暴露真实位置。
五、疑难问题排查与使用技巧
1. 常见问题快速解决
- 连接不稳定:尝试切换协议类型或启用TCP快速打开功能
- 速度缓慢:检查节点负载情况,或尝试启用压缩传输选项
- 部分网站无法访问:更新规则库或检查是否被错误拦截
2. 移动端特殊优化
针对智能手机用户,可以配置按WiFi/移动数据自动切换不同的代理模式,既节省流量又确保必要时的访问自由。iOS用户特别需要注意后台刷新权限的设置,以避免代理意外断开。
六、未来发展与生态展望
小猫猫Clash开发团队持续迭代更新,近期版本已加入了对IPv6和WireGuard协议的支持。社区生态也日益繁荣,涌现出各种可视化配置工具、规则生成器等周边产品。随着Web3.0时代的到来,这类网络工具的重要性将进一步提升。
精彩点评:
小猫猫Clash代表了现代网络工具的发展方向 - 在强大功能与易用性之间找到完美平衡点。它既不像某些商业产品那样功能受限,也不似传统开源工具那般晦涩难懂。通过本文的系统性介绍,即使是技术基础薄弱的用户也能感受到网络代理技术不再是高墙之内的神秘领域,而是触手可及的数字生活助手。在信息自由日益珍贵的今天,掌握这样一款工具的使用技巧,无异于获得了一把开启数字世界大门的万能钥匙。
需要特别强调的是,技术本身并无善恶,关键在于使用者的目的和方式。希望每位用户都能在遵守法律法规和网络道德的前提下,合理利用这类工具获取知识、拓展视野,让科技真正服务于人类文明的进步。
版权声明:
作者: FreeClashNode
链接: https://www.freeclashnode.com/news/article-2476.htm
来源: www.freeclashnode.com
文章版权归作者所有,未经允许请勿转载。
热门文章
- 8月27日免费节点分享|22.6M/S,Shadowrocket节点/Clash节点/Singbox节点/V2ray节点|免费上网梯子每天更新
- 8月29日免费节点分享|18.5M/S,Singbox节点/Clash节点/V2ray节点/SSR节点|免费上网梯子每天更新
- 9月3日免费节点分享|20.7M/S,Singbox节点/V2ray节点/SSR节点/Clash节点|免费上网梯子每天更新
- 8月30日免费节点分享|20.8M/S,Shadowrocket节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 9月2日免费节点分享|19.4M/S,Shadowrocket节点/Clash节点/V2ray节点/Singbox节点|免费上网梯子每天更新
- 8月18日免费节点分享|18.7M/S,V2ray节点/Singbox节点/Clash节点/SSR节点|免费上网梯子每天更新
- 8月20日免费节点分享|18.2M/S,V2ray节点/Clash节点/Singbox节点/Shadowrocket节点|免费上网梯子每天更新
- 8月17日免费节点分享|23M/S,Shadowrocket节点/Clash节点/V2ray节点/Singbox节点|免费上网梯子每天更新
- 8月21日免费节点分享|19.2M/S,SSR节点/V2ray节点/Clash节点/Singbox节点|免费上网梯子每天更新
- 8月24日免费节点分享|22.5M/S,Singbox节点/Clash节点/SSR节点/V2ray节点|免费上网梯子每天更新
最新文章
- 全面解析Quantumult X兑换码:获取途径、使用技巧与常见问题指南
- 9月15日免费节点分享|19.6M/S,V2ray节点/SSR节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 跨越边界的声音:一份用 Clash 解锁网易云音乐的深度指南与思考
- 9月14日免费节点分享|20.5M/S,SSR节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 智能电视上的网络利器:电视端Clash全方位使用指南
- 9月13日免费节点分享|21.6M/S,V2ray节点/Shadowrocket节点/Clash节点/Singbox节点|免费上网梯子每天更新
- 全面解析PAC科学上网:原理、优势与实战配置指南
- 9月12日免费节点分享|22.6M/S,Singbox节点/V2ray节点/Clash节点/Shadowrocket节点|免费上网梯子每天更新
- 告别卡顿与封锁:流量大的Clash机场深度测评与终极使用指南
- 9月11日免费节点分享|22M/S,Singbox节点/Clash节点/Shadowrocket节点/V2ray节点|免费上网梯子每天更新
- 解锁短视频新世界:Clash代理工具与TikTok跨境访问的终极实操手册
- 9月10日免费节点分享|21.4M/S,Shadowrocket节点/Clash节点/V2ray节点/Singbox节点|免费上网梯子每天更新
- 掌控网络流量:Clash规则外路由的深度解析与实战配置指南
- 9月9日免费节点分享|20M/S,Clash节点/V2ray节点/Shadowrocket节点/Singbox节点|免费上网梯子每天更新
- 从入门到精通:美国网件路由器科学上网终极配置指南
- 9月8日免费节点分享|22.6M/S,Singbox节点/Clash节点/Shadowrocket节点/V2ray节点|免费上网梯子每天更新
- 9月7日免费节点分享|21M/S,V2ray节点/Singbox节点/SSR节点/Clash节点|免费上网梯子每天更新
- Clash Mini技能全攻略:从入门到精通的战术指南
- 9月6日免费节点分享|19.2M/S,Singbox节点/Shadowrocket节点/Clash节点/V2ray节点|免费上网梯子每天更新
- 全面掌握 v2rayng 机场地址:从原理到实战的完整指南
- 9月5日免费节点分享|20.7M/S,SSR节点/Clash节点/V2ray节点/Singbox节点|免费上网梯子每天更新
- 突破网络枷锁:V2ray全方位安装配置指南与深度解析
- 9月4日免费节点分享|18.2M/S,Singbox节点/SSR节点/V2ray节点/Clash节点|免费上网梯子每天更新
- 9月3日免费节点分享|20.7M/S,Singbox节点/V2ray节点/SSR节点/Clash节点|免费上网梯子每天更新
- 同一服务器上共存V2Ray与宝塔面板:实用指南与全方位解析
- 9月2日免费节点分享|19.4M/S,Shadowrocket节点/Clash节点/V2ray节点/Singbox节点|免费上网梯子每天更新
- 数字边界突围战:手机科学上网方案全解析与深度抉择
- 9月1日免费节点分享|22.1M/S,Shadowrocket节点/Clash节点/Singbox节点/V2ray节点|免费上网梯子每天更新
- 用小米路由器Mini打造家庭科学上网环境:详解配置方法与实践指南
- 8月31日免费节点分享|19.6M/S,Shadowrocket节点/Clash节点/V2ray节点/Singbox节点|免费上网梯子每天更新
- 深度解析:SSR与V2Ray的速度鸿沟与性能优化之道
- 8月30日免费节点分享|20.8M/S,Shadowrocket节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 深入解析 v2ray URL地址:从原理到实践的全方位指南
- 8月29日免费节点分享|18.5M/S,Singbox节点/Clash节点/V2ray节点/SSR节点|免费上网梯子每天更新
- 解锁网络边界:全面掌握v2ray免费订阅节点的获取与使用之道
- 8月28日免费节点分享|22.1M/S,Singbox节点/SSR节点/Clash节点/V2ray节点|免费上网梯子每天更新
- 从萌新到高手:Clash Mini 苹果版全维度体验指南与胜负心法
- 8月27日免费节点分享|22.6M/S,Shadowrocket节点/Clash节点/Singbox节点/V2ray节点|免费上网梯子每天更新
- 8月27日免费节点分享|19.5M/S,Shadowrocket节点/Singbox节点/V2ray节点/Clash节点|免费上网梯子每天更新
- 解锁全球影视盛宴:Shadowrocket观看美剧的终极指南
- 8月26日免费节点分享|22.6M/S,Singbox节点/Clash节点/Shadowrocket节点/V2ray节点|免费上网梯子每天更新
- 全面掌握Vmess:从下载到配置的完整指南
- 8月25日免费节点分享|22.1M/S,V2ray节点/SSR节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 极速与隐私的完美结合:AC68U路由器深度整合V2Ray实战指南
- 8月24日免费节点分享|22.5M/S,Singbox节点/Clash节点/SSR节点/V2ray节点|免费上网梯子每天更新
- 冲突的艺术:深度解析《Clash of Clans》三大核心模式与战略抉择
- 8月23日免费节点分享|20.9M/S,V2ray节点/SSR节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 翻墙新纪元:掌握科学上网的安全之道与实用指南
- 8月22日免费节点分享|20.3M/S,V2ray节点/Singbox节点/SSR节点/Clash节点|免费上网梯子每天更新
- Clash付费全攻略:从购买到续订的完整指南与实用技巧
归档
- 2026-09 28
- 2026-08 63
- 2026-07 61
- 2026-06 55
- 2026-05 56
- 2026-04 51
- 2026-03 60
- 2026-02 52
- 2026-01 56
- 2025-12 59
- 2025-11 55
- 2025-10 56
- 2025-09 55
- 2025-08 49
- 2025-07 31
- 2025-06 30
- 2025-05 31
- 2025-04 30
- 2025-03 388
- 2025-02 360
- 2025-01 403
- 2024-12 403
- 2024-11 390
- 2024-10 403
- 2024-09 388
- 2024-08 402
- 2024-07 427
- 2024-06 442
- 2024-05 181
- 2024-04 33
- 2024-03 31
- 2024-02 29
- 2024-01 51
- 2023-12 52
- 2023-11 32
- 2023-10 32
- 2023-09 3