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

导读

深信服科技股份有限公司

简称「深信服」( 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.mzph.cn/news/788108.shtml

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

相关文章

OpenHarmony实战:轻量系统芯片移植准备

由于OpenHarmony工程需要在Linux环境下进行编译,此章节将指导厂商搭建OpenHarmony的编译环境、获取OpenHarmony源码,并且创建厂商工作目录完成厂商芯片的编译框架适配。 搭建编译环境 开展移植前请参考开发环境准备完成环境搭建工作。 获取源码 获取…

【Redis】Redis的类型及相关操作

一、常用的key操作命令 keys * 查看当前数据库的键值 ttl key 查看还有多少秒过期,-1表示永不过期,-2表示过期 del / unlink key 同样是删除,unlink是非阻塞删除,del则有可能导致阻塞 select dbindex 切换数据库 flushdb 清空…

群晖配置FTP服务结合内网穿透实现公网访问本地NAS中储存文件

文章目录 1. 群晖安装Cpolar2. 创建FTP公网地址3. 开启群晖FTP服务4. 群晖FTP远程连接5. 固定FTP公网地址6. 固定FTP地址连接 本文主要介绍如何在群晖NAS中开启FTP服务并结合cpolar内网穿透工具,实现使用固定公网地址远程访问群晖FTP服务实现文件上传下载。 Cpolar内…

文章分享:《呼吸道传染病标本采集及检测专家共识》

【摘要】呼吸道传染病临床特点多表现为发热和(或)呼吸道症状,病原学组成复杂,标本类型选择多样,如何从发热伴呼吸道症候群患者中早期正确识别出潜在呼吸道传染病患者是防控的关键环节。增强医务人员对呼吸道传染病临床…

unity学习(78)--unity调试--长痛不如短痛

1.在vs2022中,工具--获取工具与功能。 2. 安装图中工具,原来我早就安装了。 3 f9下断 同时点击图中按钮 vs此时变为如下状态 unity中出现如下提示: 4 在unity中运行游戏,vs这边确实成功断住了!

第四百三十七回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 们在上一章回中介绍了"不同平台上换行的问题"相关的内容,本章回中将介绍如何在页面上显示蒙板层.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们…

【已解决】java: 无效的目标发行版: 19

问题描述 现在从Spring Boot官网下载的Spring boot文件的诸多配置的版本,无法直接选择和电脑已有配置相匹配的。所以直接下载安装包,并用IDEA打开后无法直接运行。 我在网站上下载的配置如下图: 我遇到的问题是运行时报错java: 无效的目标发…

Go项目结构整洁实现|GitHub 3.5k

一、前言 hi,大家好,这里是白泽。今天给大家分享一个GitHub 🌟 3.5k 的 Go项目:go-backend-clean-arch https://github.com/amitshekhariitbhu/go-backend-clean-architecture 这个项目是一位老外写的,通过一个 HTT…

【QT学习】4.浮动窗口

结果&#xff1a; 代码&#xff1a; //制作核心控件&#xff1a;文本编辑框QTextEdit* pTextEditnew QTextEdit;//制作浮动控件connect(pMenu1,&QMenu::triggered,[](QAction* pAction){qDebug()<<pAction->text()<<endl;if(pAction->text()"浮动…

WebGIS 之 Openlayer

1.导入第三方依赖 <link rel"stylesheet" href"https://lib.baomitu.com/ol3/4.6.5/ol.css"> <script src"https://lib.baomitu.com/ol3/4.6.5/ol.js"></script>2.初始化地图 初始化地图new ol.Map({}) 参数target:制定初始化…

国资委确定首批起航企业,重点布局人工智能、量子信息等新兴领域

国务院国资委近日按照“四新”&#xff08;新赛道、新技术、新平台、新机制&#xff09;标准&#xff0c;遴选确定了首批启航企业&#xff0c;加快新领域新赛道布局、培育发展新质生产力。 据了解&#xff0c;去年以来&#xff0c;国务院国资委围绕加快培育创新型国有企业&…

汉语语音基本特性

发音的生理基础和过程 人的发音生理机构如图 2.3.1所示,发音时由肺部收缩送出一股直流空气,经气管流至喉头声门处(声门即声带开口处),在发声之初,声门处的声带肌肉收缩,声带并拢间隙小于 1mm,这股直流空气冲过很小的缝隙,使声带得到横向和纵向的速度,此时,声带向两边运动,缝隙…

事件队列事件循环(EventLoop) 宏任务 微任务详解 面试题

事件队列 事件循环 EventLoop 宏任务 微任务详解 一、概念二、宏任务&#xff08;多个&#xff09;、微任务&#xff08;1个&#xff09;三、Promise 的构造函数四、process.nextTick在事件循环中的处理五、vue nextTick原理 一、概念 event: 事件 loop: 循环&#xff0c;循环…

数据结构:链表的双指针技巧

文章目录 一、链表相交问题二、单链表判环问题三、回文链表四、重排链表结点 初学双指针的同学&#xff0c;请先弄懂删除链表的倒数第 N 个结点。 并且在学习这一节时&#xff0c;不要将思维固化&#xff0c;认为只能这样做&#xff0c;这里的做法只是技巧。 一、链表相交问题 …

[Linux]基础IO(中)---理解重定向与系统调用dup2的使用、缓冲区的意义

重定向理解 在Linux下&#xff0c;当打开一个文件时&#xff0c;进程会遍历文件描述符表&#xff0c;找到当前没有被使用的 最小的一个下标&#xff0c;作为新的文件描述符。 代码验证&#xff1a; ①&#xff1a;先关闭下标为0的文件&#xff0c;在打开一个文件&#xff0c;…

图神经网络GNN

图神经网络GNN B、C、D的特征在某种程度上可以代表A的特征 上面就是一次GCN的操作

整型之韵,数之舞:大小端与浮点数的内存之旅

✨✨欢迎&#x1f44d;&#x1f44d;点赞☕️☕️收藏✍✍评论 个人主页&#xff1a;秋邱’博客 所属栏目&#xff1a;人工智能 &#xff08;感谢您的光临&#xff0c;您的光临蓬荜生辉&#xff09; 1.0 整形提升 我们先来看看代码。 int main() {char a 3;char b 127;char …

浅谈iOS开发中的自动引用计数ARC

1.ARC是什么 我们知道&#xff0c;在C语言中&#xff0c;创建对象时必须手动分配和释放适量的内存。然而&#xff0c;在 Swift 中&#xff0c;当不再需要类实例时&#xff0c;ARC 会自动释放这些实例的内存。 Swift 使用 ARC 来跟踪和管理应用程序的内存&#xff0c;其主要是由…

[从0开始AIGC][Transformer相关]:Transformer中的激活函数:Relu、GELU、GLU、Swish

[从0开始AIGC][Transformer相关]&#xff1a;Transformer中的激活函数 文章目录 [从0开始AIGC][Transformer相关]&#xff1a;Transformer中的激活函数1. FFN 块 计算公式&#xff1f;2. GeLU 计算公式&#xff1f;3. Swish 计算公式&#xff1f;4. 使用 GLU 线性门控单元的 FF…

[Rust开发]用可视化案例讲Rust编程6.动态分发与最终封装

全系列合集 [Rust开发]用可视化案例讲Rust编程1.用Rust画个百度地图 [Rust开发]用可视化案例讲Rust编程2. 编码的核心组成&#xff1a;函数 [Rust开发]用可视化案例讲Rust编程3.函数分解与参数传递 [Rust开发]用可视化案例讲Rust编程4.用泛型和特性实现自适配shapefile的读取 […