首页 文章 精选 留言 我的

精选列表

搜索[访客追踪],共6516篇文章
优秀的个人博客,低调大师

分布式链路追踪Jaeger + 微服务Pig在Rainbond上的实践分享

随着微服务架构的流行,客户端发起的一次请求可能需要涉及到多个或 N 个服务,致使我们对服务之间的监控和排查变得更加复杂。 举个例子: 某条业务线的某个接口调用服务端时快时慢,这时就需要排查各个服务的日志进行分析,调动各个服务的开发人员联动排查,这种排查费时又费力。对于 ToB 的业务有时候还拿不到日志,难搞哦! 因此,就需要可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题,那就是 APM (Application Performance Monitor)。目前流行的 APM 开源工具有很多,比如:Zipkin,Skywalking,Pinpoint、Jaeger 等等,本文将主要介绍 Jaeger 。 Jaeger 是 Uber 技术团队发布的开源分布式跟踪系统,它用于监控和故障排查基于微服务的分布式系统: 分布式上下文传播、事务监控 根本原因、服务依赖分析 性能/延迟优化 OpenTracing 启发的数据模型 多个存储后端:Cassandra, Elasticsearch, memory. 系统拓扑图 服务性能监控(SPM) 自适应采样 Jaeger 架构 Component Description Jaeger Client Jaeger Client SDK Jaeger Agent 收集 Client 数据 Jaeger Collector 收集 Jaeger Agent 数据,有 pull/push 两种方式 DB Storage Collector 需要存储后端,Collector 拿到的数据将存在 Elasticsearch 或 Cassandra。 Spark jobs 用于生成拓扑图 UI 数据 Jaeger Query Service & UI 负责从 Storage 查询数据并提供 API 和 UI 如何在Rainbond上集成? 1.集成 OpenTelemetry Client: v1.36 版本以前 Jaeger Client 是基于 OpenTracing API 实现的客户端库,Jaeger Client 结合 Jaeger Agent 一起使用,发送 span 到 Jaeger Collector。 v1.36 版本以后被弃用。使用 OpenTelemetry 替代 Jaeger Client and Jaeger Agent,详情见 Jaeger and OpenTelemetry。 OpenTelemetry 是无侵入的,只需在 Java 进程启动时添加 javaagent,例:java -javaagent:path/to/opentelemetry-javaagent.jar -jar myapp.jar 。 那么在 Rainbond 上就可以通过插件将 OpenTelemetry javaagent 下载到组件中并修改启动命令。 2.连接到 Jaeger-Collector: 将所有安装了 OpenTelemetry javaagent 插件的微服务组件都通过依赖连接到 Jaeger Collector。 实践步骤 实践中将使用 Spring Cloud Pig 进行演示,Gitee:https://gitee.com/zhangbigqi/pig Rainbond 部署请参阅文档 快速安装 。 1. Spring Cloud Pig 源码部署 通过源码部署 Spring Cloud Pig 微服务框架就不详细介绍部署了,请参阅: Spring Cloud Pig 部署教程 Spring Cloud Pig 视频教程 2. OpenTelemetry 插件安装 从应用商店安装 opentelemetry-java-agent 初始化插件,该插件的作用是下载 opentelemetry-javaagent.jar 到微服务组件内,可以在 Java 启动项中指定。 团队视图 -> 插件 -> 从应用商店安装插件 -> 搜索 opentelemetry-java-agent 并安装。 3. 部署 Jaeger 在开源应用商店中搜索 Jaeger 并安装到指定应用中。 4. OpenTelemetry Agent 插件配置 1.开通 OpenTelemetry Agent 插件 以 pig-gateway 为例,在组件 -> 插件中开通 opentelemetry-java-agent 插件并更新组件生效,微服务内的其他组件均需要开通插件并更新或重启组件生效。 2.配置环境变量 为所有微服务组件配置环境变量。 变量名 变量值 说明 OTEL_TRACES_EXPORTER jaeger 选择 Jaeger exporter OTEL_EXPORTER_JAEGER_ENDPOINT http://127.0.0.1:14250 Jaeger Collector gRPC endpoint OTEL_EXPORTER_JAEGER_TIMEOUT 10000 超时时间(毫秒) OTEL_METRICS_EXPORTER none Metrics 导出器 JAVA_OPTS -javaagent:/agent/opentelemetry-javaagent.jar Java 启动参数 可使用 应用配置组 统一配置并应用到所有组件中。 3.配置组件服务名称 为所有微服务组件配置环境变量 OTEL_SERVICE_NAME ,配置组件的 Jaeger 服务名称,如:OTEL_SERVICE_NAME=pig-gateway OTEL_SERVICE_NAME=pig-auth 5.建立依赖关系 将所有微服务组件添加依赖连接到 Jaeger Collector 。 因 Jaeger 部署在另外一个应用,需要进入 组件 -> 依赖 -> 添加 Jaeger Collector 依赖,就可以在当前应用的拓扑图看到 Jaeger Collector 组件,剩下的组件都可通过拓扑图编辑模式进行依赖连接。更新或重启所有微服务组件使依赖关系生效。 6. Jaeger 快速使用 访问 Spring Cloud Pig UI 进行登录,使其产生数据。 访问 Jaeger-Query 的 16686 端口,打开对外服务即可访问 Jaeger UI 。 在 Jaeger Search 页面中搜索微服务 Pig-gateway 的 Traces Service:选择微服务的组件 Operation:选择操作类型,例:GET POST、接口、类..... Tags:根据响应头筛选,例:http.status_code=200 error=true Lookback:选择时间 Max Duration:最大持续时间;Min Duration:最小持续时间。 Limit Results:限制返回结果数量。 找到 Pig-gateway HTTP POST 的 Traces 并包含了 pig-auth Span并进入,可看到很清晰的展示了服务之间一层一层的调用以及接口的响应时间,这样我们就可以排查到底是哪个服务调用的慢或者调用有问题。 Jaeger 拓扑图生成 拓扑图默认不会生成,使用 spark-dependencies 组件生成拓扑图数据,这是一个 Spark 作业,它从存储中收集 span,分析服务之间的链接,并将它们存储起来以供以后在 UI 中展示。请参阅 Jaeger Spark dependencies。 spark-dependencies 组件占用资源较大,不使用时可关闭,需要生成拓扑图数据时将其启动即可。 最后 有了 APM 系统后,使我们可以更好的分析业务性能、排查故障等。 结合 Rainbond 作为基座不管是 Spring Cloud还是 Jaeger 或其他 APM 都可以很方便、快捷的部署使用,从繁琐的部署、配置中解放出来,让我们更多的关注于业务层。

优秀的个人博客,低调大师

分布式链路追踪日志框架 minbox-logging 1.0.2 发布,新增 GlobalLogging 概念

MinBoxLogging是一款分布式、零侵入式的链路日志分析框架,支持 SpringCloud微服务架构下配置使用,内部封装了 RestTemplate、 OpenFeign两种方式透传链路信息。 1.0.2.RELEASE 更新内容 升级使用minbox-framework版本为1.0.2.RELEASE 添加GlobalLogging全局业务日志的概念 支持将GlobalLog日志保存到数据库 修改LocalNotice本次日志通知的优先级 修改AdminNotice上报日志到Admin的优先级 添加支持定时上报到Admin功能支持 添加支持debug、info、error等类型的GlobalLog上报 添加GlobalLoggingMemoryStorage用于内存临时存储一次请求的GlobalLog列表 修改日志上报到Admin时的Content-Type 添加logging_global_logs表结构 支持采集error等级的GlobalLog堆栈错误信息 文档 使用文档请访问:https://gitee.com/minbox-projects/minbox-logging/wikis 最佳集成实践源码 minbox-logging与 ApiBoot都是属于 minbox-projects开源组织开源框架, ApiBoot来统一做基础框架的集成,也不例外集成 minbox-logging。 集成实践源码:ApiBoot Logging AutoConfiguration 实践系列文章 ApiBoot对 minbox-logging基于 SpringBoot进行了封装,针对 client、admin分别提供了对应的 Starter,来快速集成。 集成后的实践文章,可以访问作者博客:https://blog.yuqiyu.com/apiboot-all-articles.html 了解详情。 零侵入式 MinBoxLogging无需使用注解配置采集链路日志,只需要添加 依赖后简单配置 MinboxLogginAdmin的相关 地址或 服务名称即可,每次在收到请求时就会把请求对应的链路日志详细信息自动上报到 MinBoxLoggingAdmin进行后续分析、告警通知等。 链路日志分析图 日志客户端 链路日志的采集端,也就是具体的业务服务,只需要添加 minbox-logging-client客户端进行简单的配置就可以实现日志的采集以及日志的异步上报。 日志管理端 对外提供 安全的日志上报功能,通过整合 SpringSecurity来完成 BasicAuth基础认证,管理端接收到采集端上报的日志后会自动将日志存储到数据库,考虑到扩展方便,同样也提供监听 日志上报事件(ReportLogEvent)的方式来自定义存储日志到 消息队列、 logstash、 文件等存储介质。 日志管理界面 MinBoxLoggingAdmin提供了界面管理应用程序,通过 VUE前端框架进行编写界面与管理端的接口通讯,实时展示 链路日志、 日志采集服务列表等信息,可查看每条链路日志的详细信息(包含:请求头、请求参数、响应内容、响应头、状态码、异常堆栈信息等)。 整合Spring Security后的登录界面 可以直接整合 SpringSecurity来完成 Basic安全认证。 上报日志的服务列表 请求日志的采集服务在第一次上报时,会自动创建一条服务记录,服务的唯一性是根据: 服务ID + 服务IP + 服务端Port 来进行定义。 在每次上报日志成功后会修改服务的最后一次上报时间。 链路日志列表 链路日志是我们访问的入口服务生成,比如: bff-user -> user-service,链路日志产生的位置则是 bff-user服务,链路日志是接口 请求的入口也是做出 响应的结束位置,因此我们可以在页面上查看接口的请求 参数详情、 头信息以及 响应的内容,至于链路日志内的 日志单元目前界面还未做展示,可以根据 traceId链路日志编号自行去数据库查询。 链路日志详情 每一个请求的链路日志都会包含上图中的全部字段,从请求开始 -> 响应结束一条链路闭合记录。 安全性 MinBoxLoggingAdminUI内部提供了 login.html登录页面,可以整合 SpringSecurity通过配置 loginPageUrl登录跳转地址来使用内置的登录页面,当然也可以自定义登录页面。 可与 MinBoxLoggingAdmin共同使用 SpringSecurity的相同配置提升安全性。 文档 当前版本的文档,请访问Wikis 快速开始 请访问快速开始的 wikis文档来查看并快速接入 MinBoxLogging,快速接入文档 源码方式构建 MinBoxLogging使用 Maven进行构建项目。 先决条件 源码拉取需使用 Git,具体使用方式详见安装 Git 源码采用 JDK1.8版本进行编写,请注意修改使用项目的 JDK版本,JDK 1.8下载地址 需本地安装 Maven环境,Maven 下载地址 因 logging-admin-ui所需 vue-cli-service命令支持,本地需要安装 vue-cli。 拉取源码到本地 git clone git@gitee.com:minbox-projects/minbox-logging.git 安装到本地Maven仓库 mvn install 编译 & 打包生成jar包 mvn clean package Maven仓库依赖构建 MinBoxLogging内的模块都已经上传到 ApacheMavenCenter中央仓库,添加对应的依赖到 pom.xml会自动下载到本地。 欢迎提交贡献代码 MinBoxLogging欢迎广大开发者创建 PullRequest来贡献代码,代码通过审核后会被合并到 master主分支。 开源许可 MinBoxLogging采用 Apache2开源许可。

优秀的个人博客,低调大师

Tailscale 花费六个月追踪一个 16 年的 SQLite 漏洞

去年年底,Tailscale 的 uptime开始变得不稳定。19 次独立的数据库损坏事件,横跨六个月——每次都是同一个 SQLite bug 在作祟。 Tailscale 控制平面内部用 SQLite 存储每个 tailnet 的配置元数据。每个 shard 由一个 Go 进程独占访问数据库,这是 SQLite 推荐的单写入者架构。他们从 2022 年就开始用这套方案,一直相安无事。 直到 2025 年 8 月,一个读取 S3 备份的数据管道报了错。运行PRAGMA integrity_check后发现数据库确实损坏了。修复了,查了原因,没找到。然后它又发生了。再来一次。再来一次。 “这个 bug 抵御了我们所有的初步排查。” Tailscale 团队检查了所有近来改动——没有相关的。重新审查了所有 SQLite 交互代码——没发现问题。损坏事件之间没有共同因素:不是同一个 shard,不是同一个客户,不是同一个功能,不是同一个时间段,不是同一个负载水平。 无法复现,只能靠被动遥测。有时几小时一次,有时几周一次。最长的一次平静期是六周——然后就又来了。 最终,Tailscale 资助了一个开源的 SQLite VFS shim 来隔离竞态条件。这个工具帮助他们定位到了 SQLite 中一个存在了 16 年的 WAL-reset 数据竞争 bug。更意外的是,在修复过程中还发现了第二个 bug:一个陈旧的表达式索引 bug。 Antithesis(一个确定性模拟测试平台)随后也发表了一篇博客,详细分析了这个 WAL-reset bug 的技术细节,包括如何在确定性环境下复现它。 HN 上的讨论集中在几个点上。有人赞赏 Tailscale 的透明度——“把这种事公开写出来需要勇气。” 有人对 SQLite 有 16 年的 bug 感到惊讶,但更多人指出这恰恰证明了 SQLite 的可靠性:如此罕见的竞态条件,在如此大规模部署下才暴露出来。还有人讨论了 Tailscale 资助开源调试工具的做法——“这是公司资助开源的绝佳范例。” 参考来源: Tailscale: How we tracked down a 16-year-old SQLite bug Antithesis: Breaking the WAL HN 讨论

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册