深信服:借助观测云实现全链路可观测性

导读

深信服科技股份有限公司

简称「深信服」( Sangfor Technologies Inc. ),是一家领先的网络安全和云计算解决方案提供商,致力于为全球客户提供高效、智能、安全的网络和云服务。随着公司业务的不断扩展,也面临着监控和故障定位方面的挑战。本文将介绍深信服如何借助观测云实现全链路可观测性,提高运维效率和安全性。

案例亮点

  • 大型门户网站可观测最佳实践
  • 借助观测云实现 APM、RUM、基础设施、日志、拨测等全功能一体化全链路可观测体验
  • 优化网页卡顿问题,大幅提升用户体验

简单介绍一下贵公司

深信服科技股份有限公司是一家专注于企业级网络安全、云计算、IT基础设施与物联网的产品和服务供应商,在全球设有 50 余个分支机构,公司先后被评为国家级高新技术企业、中国软件和信息技术服务综合竞争力百强企业、下一代互联网信息安全技术国家地方联合工程实验室、广东省智能云计算工程技术研究中心等。 一直以来,深信服十分重视研发和创新,并坚持以“持续创新”的理念,全情投入为用户打造省心便捷的产品,获得了市场的广泛认可。目前,超过 10 万家企业级用户正在使用深信服的产品。

当前面临的挑战

深信服的核心业务涵盖了网络安全、云计算、云服务和 IT 基础设施等多个领域。使用的监控工具有:云平台上的自有云监控和 Zibbix、Prometheus、Grafana 等开源自建的监控体系。随着客户数量的增加和业务复杂性的提高,他们面临以下挑战:

  • 监控复杂性:公司的业务涉及多个层面,包括网络、云服务、应用程序等,需要一个全面的监控系统来实时追踪各个层面的性能和状态。
  • 性能问题难定位:当出现性能问题或故障时,需要能够快速准确地定位问题的根本原因,以便及时采取措施解决问题。
  • 团队生产力:每次出现故障时需要拉起开发、运维、测试协作排查,偶现的故障很难复现,团队生产协作效率低下。

为什么选择观测云

在与市面上的可观测性产品对比以及和观测云团队深入交流之后,决定选择观测云 POC 测试。在 POC 测试期间,观测云产品表现出色。我们能够更好地了解系统的状态,快速定位问题,并采取措施解决。观测云的综合性能监控和安全监控功能为我们的运维团队提供了强大的工具,帮助我们确保系统的稳定性和安全性。我们期待将观测云集成到我们更多的系统和环境中,以持续提高我们的监控和安全性能。

观测云使用现状

截止目前,已经接入了 3 大 Kubernetes 集群,涉及 7 个 S 级项目和应用。主要接入的语言和框架有 Java、PHP、.NET、Python、Nuxt.js、Vue.js 等,同时还涵盖了 API 网关、数据库、消息队列等中间件产品。覆盖了平台的 APM、RUM、日志、监控、拨测、仪表盘、DataFlux Function 等绝大部分功能。基于目前良好的使用体验,未来还会逐步增加其他应用数据接入。

成功案例

借助观测云实现真正意义上的全链路可观测

在一个相对复杂的系统中,一个前端的接口请求会经过很多的服务和中间件,比如我们其中的一个系统,由前端发起的 HTTPS 请求,经过 Nginx 路由到网关服务,网关服务到后端服务 A 再调用服务 B,期间还会调用 Redis、Kafka、MySQL 等中间件。整个调用的链路较为复杂,所以我们的基本诉求就是能够实现完整的全链路可观测性,其次出现故障的时候,能够有足够的上下文信息来定位故障。

观测云提供全链路可观测的能力,可以将前端、网关、Nginx、后端服务、中间件等整条链路的信息通过一个 trace_id 全部串起来,这样做的好处是不管哪里出现故障可以快速定位到具体的服务或中间件。下图为服务链路拓扑图,可以查看整个链路的调用情况,点击任一服务的图标可以进入该服务的链路调用详情列表,从而实现快速排障。

同时也可以在日志上注入 trace_id、span_id 等信息,这样可以实现调用链和日志关联,在出现故障的服务链路中可以快速跳转至相关联的日志,查询日志的上下文,从而实现 RUM-APM-LOG 全链路监测与联动分析。

传统的 APM 监测工具都无法保留接口调用的参数,在排查故障的时候,研发和运维往往需要当时接口故障时请求的实际参数来推测复现故障过程,这类上下文信息对我们推广全链路可观测性平台非常重要。但是如果把所有请求接口的参数都进行保留,产生的数据量又非常大,而且一般我们只关注非 200 状态的接口信息。观测云提供的 Pipeline 能力,可以很好的对日志进行解析并过滤掉不需要的日志,我们将接口的 payload 信息打印至 Nginx 日志,并且通过 Pipeline 进行判断只采集非 200 状态的 payload,从而很好的支撑我们故障排查时的诉求。

官网借助观测云能力优化页面卡顿问题

在没有接入观测云之前,官网存在较为严重的卡顿现象,严重影响用户体验。但是没有具体可量化的数据,不知道哪里慢了,也就无从下手去优化。我们将官网前后端接入观测云 RUM 和 APM 之后,可以通过观测云查看当前性能情,就可以很直观的查看出是哪些接口耗时长,哪些页面加载慢。

发现了问题是第一步,接下来该怎样解决问题。为了解决性能问题,从如下几个方面着手:

1、每天在平台上抓取一部分慢接口让开发团队优化,可以查看具体的链路,根据这条 trace 信息可以定位到是哪些 span 耗时长。可能是 SQL 语句、也可能是自身业务代码逻辑等等,根据定位到的信息再去优化。
2、在平台用户行为分析查看 LCP 指标,针对 LCP 加载时间长的页面进行着重优化。
3、创建自定义拨测任务,全面监测不同地区到官网地址的网络性能、网络质量、网络数据传输稳定性等状况。

在优化了一段时间之后,发现到达一个瓶颈期。大部分接口耗时下去了,但是前端耗时还是较为严重,有很多的 longtask 和 error 数据。后来邀请了观测云的前端技术专家专门做了一期 RUM 知识培训和官网系统诊断,于是又找到了前端的优化方向,具体的优化点有:

1、通过观测云,先看阻塞了页面渲染的文件,试用以下条件搜索,查找出阻塞页面渲染的文件

如果对业务非常重要的资源,改为内联的方式,而非外部脚本;如果对业务不敏感的资源,可以选择 defer 加载或者延迟加载,即脚本放在 body 的后面,加属性 defer 或者 async,防止阻塞页面渲染。

2、网站资源加载的瀑布图

从图中可以得知,首页资源加载多,加载存在延迟,占比约 50% ,累计导致体感慢,弱网环境尤为明显。

具体优化思路为:先整体优化资源加载;优化资源加载中的瓶颈;减少资源体积或者压缩代码;减少资源重复加载等等。

总之,性能优化从来不是一蹴而就的事情,是一个循序渐进的过程。在优化的过程中,我们也借助观测云 RUM 监控发现了很多开发和测试过程中的问题,这样也能提高整个团队的认知和对代码的严谨度,受益颇多。

通过 APISIX 可观测性实现快速排障

APISIX 作为南北向流量 API 网关,承载着从客户端到服务端的全部流量。如果可以实现针对 APISIX 可观测性,那么可以实现很快速的定位到故障。观测云支持 APISIX 的数据接入,APISIX 的 Trace、Logging、Metric 数据可以通过插件的方式上报至 DataKit 及观测云平台,从而实现 APISIX 的可观测性。

种类接入方式(插件)
Traceopentelemetry 插件,可用于根据 OpenTelemetry specification 协议规范上报 Tracing 数据。
Loggingfile-logger 插件,可用于将日志数据存储到指定位置。console 输出方式,修改访问日志格式 access_logger_format
Metricprometheus 插件,以规定的格式上报指标到 Prometheus 中。

在集成 APISIX 的 Trace、Logging、Metric 数据上报之后,开发人员和运维团队更好地了解和监控其应用程序的行为,带来的好处有:

1、快速的问题分析和故障排除。
2、根据 Metric 和 Trace 等信息进行有效的性能优化。
3、配置相应的监控告警规则,当有流量异常时可以尽早识别并扩缩容。

作者|深信服运维技术专家 ——何智杰
观测云技术客户经理——杨文伟

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/588704.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线上剧本杀小程序开发,剧本杀行业的发展趋势

剧本杀一时火爆全网,剧本杀门店也是迅速占领了大街小巷,成为年轻人热衷的游戏娱乐方式。 不过,线下剧本杀因为价格高、剧本质量不过关等问题,迎来了“寒冬期”,线下剧本杀门店的发展逐渐“降温”。 随着互联网的发展…

CAS的使用以及底层原理详解

什么是 CAS ? CAS 全称 Compare And Swap,翻译为中文是比较并交换,是一种无锁的原子操作,CAS 可以不使用锁来保证多线程修改数据的安全性,虽说是无锁但实际上使用了一种乐观锁的思想,也可以认为 CAS 是乐观…

【Go】十七、进程、线程、协程

文章目录 1、进程、线程2、协程3、主死从随4、启动多个协程5、使用WaitGroup控制协程退出6、多协程操作同一个数据7、互斥锁8、读写锁9、deferrecover优化多协程 1、进程、线程 进程作为资源分配的单位,在内存中会为每个进程分配不同的内存区域 一个进程下面有多个…

QT-自定义参数设计框架软件

QT-自定义参数设计框架软件 前言一、演示效果二、使用步骤1.应用进行参数注册2.数据库操作单例对象3.参数操作单例对象 三、下载链接 前言 常用本地数据参数通常使用的是xml等文本的格式,进行本地的数据参数的存储。这种参数的保存方式有个致命的一点,就…

基于深度学习的机场航拍小目标检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

摘要:在本博客中介绍了基于YOLOv8/v7/v6/v5的机场航拍小目标检测系统。该系统的核心技术是采用YOLOv8,并整合了YOLOv7、YOLOv6、YOLOv5算法,从而进行性能指标的综合对比。我们详细介绍了国内外在机场航拍小目标检测领域的研究现状、数据集处理…

STM32 直接修改寄存器来输出内部时钟的方法

1. 在特殊情况下使能 MCO 功能的方法 在对某些不容易复现的问题进行代码调时,需要观察内部时钟的情况,但往往代码之前并没有使能 MCO 功能,在这种情况下就可以使用寄存器直接配置来输出内部时钟到GPIO 脚位上进行观察和测试。 下面的例子就…

mongodb的简单操作

文章目录 前言数据库的创建和删除集合的创建和删除文档的插入和查询异常处理更新数据局部修改符合条件的批量更新加操作 删除文档删除全部数据删除符合条件的数据 统计count统计有多少条数据统计特定条件有多少条数据 分页查询排序查询正则查询比较查询包含查询条件连接查询索引…

Ollama教程——入门:开启本地大型语言模型开发之旅

Ollama教程——入门:开启本地大型语言模型开发之旅 引言安装ollamamacOSWindows预览版LinuxDocker ollama的库和工具ollama-pythonollama-js 快速开始运行模型访问模型库 自定义模型从GGUF导入模型自定义提示 CLI参考创建模型拉取模型删除模型复制模型多行输入多模态…

Springboot整合Milvus向量库

1. Milvus的Maven依赖&#xff0c; 配置如下 <dependency><groupId>io.milvus</groupId><artifactId>milvus-sdk-java</artifactId><version>2.3.4</version><exclusions><exclusion><artifactId>log4j-slf4j-imp…

Redis的5大常见数据类型的用法

上一篇文章我们讲了Redis的10大应用场景&#xff0c;这一篇文章就针对Redis的常用数据结构进行一个说明&#xff0c;通过示例的形式演示每一种数据结构如何使用。 当涉及Redis的数据操作时&#xff0c;不同数据类型对应的不同数据结构&#xff0c;如下就对5大常用的数据类型进行…

三台电机的顺启逆停

1&#xff0c;开启按钮输入信号是 电机一开始启动&#xff0c;5秒回电机2启动 &#xff0c;在5秒电机三启动 关闭按钮输入时电机3关闭 &#xff0c;5秒后电机2关闭 最后电机一关闭 2&#xff0c;思路开启按钮按下接通电机1 并且接通定时器T0 定时器T0 到时候接通电机2 并且开…

【漏洞复现】WordPress Plugin LearnDash LMS 敏感信息暴漏

漏洞描述 WordPress和WordPress plugin都是WordPress基金会的产品。WordPress是一套使用PHP语言开发的博客平台。该平台支持在PHP和MySQL的服务器上架设个人博客网站。WordPress plugin是一个应用插件。 WordPress Plugin LearnDash LMS 4.10.2及之前版本存在安全漏洞&#x…