Java应用日志如何与Jaeger的trace关联
原文链接:https://www.cnblogs.com/bolingcavalry/p/15709398.html
本篇概览
在正式开始前,咱们先来看一个具体的问题:
- 一次web请求可能有多条业务日志(log4j或者logback配置的那种),这和您写代码执行log.info的次数有关,假设有10条,那么十次请求就有一百条业务日志;
- 通过jaeger发现这十次请求中有一次耗时特别长,想定位一下具体原因,现在问题来了:一共有100条业务日志,到底哪些是和Jaeger中耗时长的那一次请求有关?
- 您可能会说:有些业务特征如user-id,咱们可以写入span的tag或者log中,这样通过span查到user-id,再去日志中查找含有此user-id的日志即可,这样确实可以,但未必每条日志都有user-id,所以并非最佳方式
- 好在Jaeger官方给出了一种简单有效的方案:基于MDC,Jaeger的SDK在日志中注入trace相关的变量
关于MDC
- 关于sl4j的MDC不是本篇的重点,因此只把本篇用到的特性简单说说即可,经验丰富的您如果对MDC已经了解,请跳过此节
- 在sl4j的配置文件中可以配置日志的格式,例如logback的配置文件如下,可见模板中新增了一段内容[user-id=%X{user-id}]:
<appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> <encoder> <!--%logger{10}表示类名过长时会自动缩写--> <pattern>%d{HH:mm:ss} [%thread] %-5level %logger{10} [user-id=%X{user-id}] %msg%n</pattern> <charset>utf-8</charset> </encoder> </appender> - 再来看一段日志的代码,先调用MDC.put方法将一个键值对写入当前线程的诊断上下文map(diagnostic context map),键名和上面的模板中配置的%X{user-id}一模一样:
@GetMapping("/test") public void test() { MDC.put("user-id", "user-" + System.currentTimeMillis()); log.info("this is test request"); } - 现在把代码运行起来,打印日志看看,如下所示,之前模板中配置的%X{user-id}已被替换成了user-1632122267618,就是代码中MDC.put设置的值:
15:17:47 [http-nio-18081-exec-6] INFO c.b.j.c.c.HelloConsumerController [user-id=user-1632122267618] this is test request - 以上就是MDC的基本功能:对日志模板中的变量进行填充,填充的内容可以用MDC.put方法随意设置;
- 此刻聪明的您应该能猜到jaeger官方的方案是如何实现的了,没错,就是借助MDC将trace信息填充到日志模板中,这样每行日志都有了trace信息,咱们在jaeger web页面中感兴趣的任何一次trace,都能找到对应的日志了
关于Jaeger的官方方案
- Jaeger的官方方案如下图所示,SDK已经把traceId、spanId、sampled写入当前线程的诊断上下文map(diagnostic context map),只要日志模板中配置上述三个变量,就会在所有业务日志中输出它们具体的值:
- 看起来似乎非常简单,那就动手编码试试吧
编码实战
- jaeger与MDC的关联只是个小功能,没必要大张旗鼓的新建项目,基于《Jaeger开发入门(java版)》的代码继续开发即可,也就是说修改两个子工程jaeger-service-consumer和jaeger-service-provider的源码,让它们的业务日志打印出Jaeger的trace信息
- 首先从jaeger-service-provider工程开始,增加一个标准的logback日志配置文件logback.xml,如下所示,日志模板中已添加了traceId、spanId、sampled变量:
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <contextName>logback</contextName> <!--输出到控制台--> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> <encoder> <!--%logger{10}表示类名过长时会自动缩写--> <pattern>%d{HH:mm:ss} [%thread] %-5level %logger{10} [traceId=%X{traceId} spanId=%X{spanId} sampled=%X{sampled}] %msg%n</pattern> <charset>utf-8</charset> </encoder> </appender> <root level="info"> <appender-ref ref="console" /> </root> </configuration> - 再去检查配置类,确认JaegerTracer实例化时用了MDCScopeManager参数,如下所示,咱们在上一章已经这么做了,可以维持不变:
package com.bolingcavalry.jaeger.provider.config; import io.jaegertracing.internal.MDCScopeManager; import io.opentracing.contrib.java.spring.jaeger.starter.TracerBuilderCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class JaegerConfig { @Bean public TracerBuilderCustomizer mdcBuilderCustomizer() { // 1.8新特性,函数式接口 return builder -> builder.withScopeManager(new MDCScopeManager.Builder().build()); } } - 接下来是在业务代码中随意加几行打印日志的代码,如下图红框所示:
- 接下来继续修改jaeger-service-consumer子工程,具体步骤与刚才改造jaeger-service-provider时一模一样,就不多占用篇幅赘述了,记得在业务代码中随意加几行日志,如下图红框:
- 开发完成,开始验证吧
验证
- 像《Jaeger开发入门(java版)》那样操作,将jaeger-service-consumer和jaeger-service-provider编译构建制作成docker镜像
- 用docker-compose将所有服务启动,然后通过浏览器访问jaeger-service-consumer的服务,多访问几次
- 打开jaeger的web页面,可以看到多次请求的trace,咱们随机选择一个,鼠标点击下图红框中的圆点:
- 此时会跳转到该trace的详情页,注意页面的url,如下图红框,里面的2037fe105d73f4a5就是traceid:
- 用2037fe105d73f4a5搜索jaeger-service-provider的日志,由于应用部署在docker中,咱们要用docker log和grep命令组合来过滤,如下所示,咱们代码写的日志都打印出来了,并且红框中就是traceid等关键信息
- 再去查看jaeger-service-consumer的日志,如下图红框,本次请求相关的日志也可以通过traceid搜索到:
- 至此,本篇实战就完成了,Jaeger的web页面上的任何一个trace,现在都能轻易找到与之对应的所有业务日志,这在定位问题时简直是如虎添翼的效果,如果您的系统用了ELK或者EFK来汇总所有分布式服务的日志,那就更高效了
iOS平台免费科学上网神器大盘点:解锁全球网络的终极指南
在当今这个信息爆炸的时代,互联网已成为我们获取知识、沟通交流的重要渠道。然而,由于各种原因,某些地区或国家对特定网站和应用程序实施了访问限制,这无疑给用户的信息自由带来了挑战。幸运的是,科学上网工具应运而生,它们就像一把把钥匙,为我们打开了通往全球互联网的大门。
对于iOS用户而言,选择一款合适的科学上网软件尤为重要。苹果设备的封闭性虽然带来了更高的安全性,但也让寻找优质的科学上网工具变得更具挑战性。本文将为您详细介绍iOS平台上最优秀的免费科学上网软件,并提供详细的使用指南和实用建议,助您轻松突破网络限制,畅游全球互联网。
科学上网:数字时代的通行证
科学上网,简单来说就是通过特定的技术手段绕过网络封锁,访问被限制的网站和服务。这项技术不仅能让您观看国外流媒体、使用被屏蔽的社交平台,还能保护您的网络隐私,避免受到不必要的监控。
在iOS设备上实现科学上网主要有以下几种方式:
1. VPN(虚拟专用网络):通过加密通道连接到远程服务器
2. 代理服务器:中转您的网络请求
3. 智能DNS:绕过地理限制而不改变IP地址
4. Shadowsocks等新型代理协议:更高效、更隐蔽
iOS免费科学上网软件精选
经过大量测试和用户反馈,我们为您精选了以下几款在iOS平台上表现优异的免费科学上网工具:
1. LynxVPN - 简单易用的入门之选
核心优势:
- 完全免费的服务器节点
- 简洁直观的用户界面
- 无需复杂配置,一键连接
- 支持多国语言(包括中文)
使用体验:
LynxVPN就像是科学上网界的"傻瓜相机",即使是技术小白也能轻松上手。App Store直接下载安装后,只需选择服务器位置,点击连接按钮即可。虽然免费服务器数量有限,但连接速度和稳定性都相当不错,足以满足日常浏览和视频观看需求。
适用场景:
- 临时需要访问国外网站
- 不想折腾复杂配置的用户
- 轻度使用(浏览网页、社交媒体)
2. Kitsune - 隐私保护的卫士
核心优势:
- 严格的"无日志"政策
- 自动选择最优服务器
- 智能分流功能(仅代理需要科学上网的流量)
- 精美的日式极简设计
技术亮点:
Kitsune采用了最新的WireGuard协议,在保证安全性的同时提供了更快的连接速度。其独特的"智能路由"功能可以自动识别流量类型,国内网站直连,国外流量走代理,既节省流量又提高速度。
隐私考量:
这款应用由日本团队开发,受严格的隐私保护法规约束。注册时仅需邮箱(甚至可以使用临时邮箱),不收集任何个人身份信息,是注重隐私用户的理想选择。
3. Shadowrocket - 技术爱好者的瑞士军刀
特别说明:
虽然Shadowrocket是付费应用(约3.99美元),但其功能之强大使其成为不得不提的选项。App Store中国区已下架,需切换至外区账号下载。
专业功能:
- 支持SS/SSR/V2Ray/Trojan等多种协议
- 自定义规则系统(可精确控制哪些网站走代理)
- 本地DNS解析防止DNS污染
- 流量统计和连接日志
进阶技巧:
配合订阅链接使用,可以自动更新服务器列表。熟练使用后,您可以打造完全个性化的科学上网方案,甚至实现分应用代理(如仅让Twitter走代理,其他应用直连)。
4. Psiphon - 老牌抗封锁专家
历史背景:
诞生于多伦多大学的开源项目,专门为突破网络审查设计,在全球拥有数百万用户。
技术特点:
- 混合代理技术(结合VPN、SSH和HTTP代理)
- 自动寻找可用连接方式
- 内置速度测试和服务器选择
实测表现:
在对抗深度包检测(DPI)方面表现优异,特别适合网络管控严格的地区。免费版本有广告且速度一般,但连接成功率很高。
5. Thunder VPN - 闪电般的连接速度
速度测试:
在多个地区的测试中,其美国服务器平均延迟仅180ms,YouTube 1080p视频缓冲时间不到2秒。
独特功能:
- 服务器负载实时显示
- 连接速度测试工具
- 自动重连机制
注意事项:
免费版每天有500MB流量限制,适合短期应急使用。观看视频建议选择标清画质以节省流量。
安装与配置完全指南
基础安装步骤
App Store下载
- 打开iOS设备上的App Store
- 搜索应用名称(如"LynxVPN")
- 点击"获取"并安装
权限授予
- 首次打开时会请求VPN配置权限
- 点击"允许"并在弹出窗口中输入设备密码
服务器选择
- 通常会自动推荐最优服务器
- 也可手动选择特定国家/地区的节点
连接测试
- 连接成功后访问google.com测试
- 使用speedtest.net测速
高级配置技巧
对于Shadowrocket等专业工具,您可能需要:
- 手动添加服务器信息(地址、端口、加密方式等)
- 配置分流规则(如国内网站直连)
- 设置自动切换规则(当延迟过高时自动更换节点)
安全与隐私深度解析
风险评估
免费VPN的潜在隐患
- 部分免费应用可能通过出售用户数据盈利
- 恶意软件或广告注入风险
- 连接日志可能被记录
选择建议
- 优先选择开源软件(代码可审计)
- 查看隐私政策是否明确承诺"无日志"
- 选择知名大学或非营利组织开发的项目
增强安全措施
- 结合使用VPN和Tor浏览器获得更高匿名性
- 定期更换使用的VPN服务
- 重要操作(如网银)不使用VPN连接
常见问题权威解答
Q:使用这些工具会被追踪吗?
A:正规VPN会加密您的流量,使ISP无法知道您访问的具体内容。但VPN服务商本身可以看到您的活动,因此选择可信的服务商至关重要。
Q:为什么有时候连接后网速变慢?
A:这通常是由于服务器负载过高或物理距离过远导致。尝试切换至其他服务器,或选择专为视频优化的节点。
Q:免费和付费版主要区别是什么?
A:付费版通常提供:更快的专属服务器、无流量限制、更多国家节点选择、优先客服支持等。
Q:iOS系统更新后VPN不能用怎么办?
A:这通常是因苹果修复了某些漏洞导致。解决方法包括:更新VPN应用到最新版本、更换连接协议(如从L2TP改为IKEv2)、重启设备等。
终极选择建议
根据不同的使用需求,我们给出以下推荐方案:
- 临时轻量使用:LynxVPN或Thunder VPN
- 长期隐私保护:Kitsune
- 技术爱好者:Shadowrocket
- 高审查环境:Psiphon
未来展望
随着网络管控技术的升级,科学上网工具也在不断进化。我们期待看到:
- 更智能的流量混淆技术
- 基于区块链的去中心化VPN
- 硬件级的安全解决方案
结语:自由与责任的平衡
科学上网工具为我们打开了通往信息自由的大门,但同时也提醒我们:
- 尊重不同国家和地区的法律法规
- 不将这些工具用于非法用途
- 保持理性和批判性思维,辨别网络信息的真伪
在这个互联互通的世界里,我们既是信息的消费者,也是传播者。选择一款合适的科学上网工具,不仅是为了突破地理限制,更是为了以更开阔的视野参与全球对话。希望本文能帮助您在iOS平台上找到最适合的科学上网解决方案,安全、自由地探索数字世界的无限可能。
记住:技术本身是中立的,关键在于我们如何使用它。愿您在享受互联网自由的同时,也能成为网络空间负责任的数字公民。
版权声明:
作者: freeclashnode
链接: https://www.freeclashnode.com/news/article-4383.htm
来源: FreeClashNode
文章版权归作者所有,未经允许请勿转载。
热门文章
- 12月6日|19.8M/S,V2ray节点/Clash节点/SSR节点/Singbox节点|免费订阅机场|每天更新免费梯子
- 11月22日|20.2M/S,Shadowrocket节点/V2ray节点/Clash节点/Singbox节点|免费订阅机场|每天更新免费梯子
- 12月5日|23M/S,Singbox节点/V2ray节点/Clash节点/SSR节点|免费订阅机场|每天更新免费梯子
- 12月11日|23M/S,Singbox节点/V2ray节点/Clash节点/Shadowrocket节点|免费订阅机场|每天更新免费梯子
- 11月25日|20.3M/S,Clash节点/V2ray节点/Singbox节点/SSR节点|免费订阅机场|每天更新免费梯子
- 12月9日|20M/S,Singbox节点/V2ray节点/Clash节点/SSR节点|免费订阅机场|每天更新免费梯子
- 12月12日|18.6M/S,Singbox节点/Clash节点/Shadowrocket节点/V2ray节点|免费订阅机场|每天更新免费梯子
- 12月8日|21.6M/S,Singbox节点/SSR节点/V2ray节点/Clash节点|免费订阅机场|每天更新免费梯子
- 11月20日|19.3M/S,Singbox节点/Shadowrocket节点/V2ray节点/Clash节点|免费订阅机场|每天更新免费梯子
- 12月3日|18.2M/S,V2ray节点/Clash节点/Singbox节点/SSR节点|免费订阅机场|每天更新免费梯子
最新文章
- 12月16日|21M/S,SSR节点/Singbox节点/Clash节点/V2ray节点|免费订阅机场|每天更新免费梯子
- 12月15日|20.8M/S,SSR节点/Singbox节点/Clash节点/V2ray节点|免费订阅机场|每天更新免费梯子
- 12月14日|21.5M/S,V2ray节点/Shadowrocket节点/Singbox节点/Clash节点|免费订阅机场|每天更新免费梯子
- 12月13日|18.1M/S,V2ray节点/SSR节点/Clash节点/Singbox节点|免费订阅机场|每天更新免费梯子
- 12月12日|18.6M/S,Singbox节点/Clash节点/Shadowrocket节点/V2ray节点|免费订阅机场|每天更新免费梯子
- 12月11日|23M/S,Singbox节点/V2ray节点/Clash节点/Shadowrocket节点|免费订阅机场|每天更新免费梯子
- 12月10日|19.9M/S,Clash节点/V2ray节点/Singbox节点/SSR节点|免费订阅机场|每天更新免费梯子
- 12月9日|20M/S,Singbox节点/V2ray节点/Clash节点/SSR节点|免费订阅机场|每天更新免费梯子
- 12月8日|21.6M/S,Singbox节点/SSR节点/V2ray节点/Clash节点|免费订阅机场|每天更新免费梯子
- 12月7日|22.8M/S,Shadowrocket节点/Singbox节点/V2ray节点/Clash节点|免费订阅机场|每天更新免费梯子
归档
- 2025-12 28
- 2025-11 55
- 2025-10 56
- 2025-09 55
- 2025-08 49
- 2025-07 31
- 2025-06 30
- 2025-05 31
- 2025-04 31
- 2025-03 383
- 2025-02 360
- 2025-01 403
- 2024-12 403
- 2024-11 390
- 2024-10 403
- 2024-09 388
- 2024-08 402
- 2024-07 424
- 2024-06 446
- 2024-05 184
- 2024-04 33
- 2024-03 32
- 2024-02 29
- 2024-01 50
- 2023-12 53
- 2023-11 32
- 2023-10 32
- 2023-09 3