深信服:借助观测云实现全链路可观测性-程序员宅基地

技术标签: 链路  性能优化  

导读

深信服科技股份有限公司

简称「深信服」( 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 的可观测性。

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

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

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

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/DataFlux/article/details/137278109

智能推荐

什么是内部类?成员内部类、静态内部类、局部内部类和匿名内部类的区别及作用?_成员内部类和局部内部类的区别-程序员宅基地

文章浏览阅读3.4k次,点赞8次,收藏42次。一、什么是内部类?or 内部类的概念内部类是定义在另一个类中的类;下面类TestB是类TestA的内部类。即内部类对象引用了实例化该内部对象的外围类对象。public class TestA{ class TestB {}}二、 为什么需要内部类?or 内部类有什么作用?1、 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。2、内部类可以对同一个包中的其他类隐藏起来。3、 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。三、 内部类的分类成员内部_成员内部类和局部内部类的区别

分布式系统_分布式系统运维工具-程序员宅基地

文章浏览阅读118次。分布式系统要求拆分分布式思想的实质搭配要求分布式系统要求按照某些特定的规则将项目进行拆分。如果将一个项目的所有模板功能都写到一起,当某个模块出现问题时将直接导致整个服务器出现问题。拆分按照业务拆分为不同的服务器,有效的降低系统架构的耦合性在业务拆分的基础上可按照代码层级进行拆分(view、controller、service、pojo)分布式思想的实质分布式思想的实质是为了系统的..._分布式系统运维工具

用Exce分析l数据极简入门_exce l趋势分析数据量-程序员宅基地

文章浏览阅读174次。1.数据源准备2.数据处理step1:数据表处理应用函数:①VLOOKUP函数; ② CONCATENATE函数终表:step2:数据透视表统计分析(1) 透视表汇总不同渠道用户数, 金额(2)透视表汇总不同日期购买用户数,金额(3)透视表汇总不同用户购买订单数,金额step3:讲第二步结果可视化, 比如, 柱形图(1)不同渠道用户数, 金额(2)不同日期..._exce l趋势分析数据量

宁盾堡垒机双因素认证方案_horizon宁盾双因素配置-程序员宅基地

文章浏览阅读3.3k次。堡垒机可以为企业实现服务器、网络设备、数据库、安全设备等的集中管控和安全可靠运行,帮助IT运维人员提高工作效率。通俗来说,就是用来控制哪些人可以登录哪些资产(事先防范和事中控制),以及录像记录登录资产后做了什么事情(事后溯源)。由于堡垒机内部保存着企业所有的设备资产和权限关系,是企业内部信息安全的重要一环。但目前出现的以下问题产生了很大安全隐患:密码设置过于简单,容易被暴力破解;为方便记忆,设置统一的密码,一旦单点被破,极易引发全面危机。在单一的静态密码验证机制下,登录密码是堡垒机安全的唯一_horizon宁盾双因素配置

谷歌浏览器安装(Win、Linux、离线安装)_chrome linux debian离线安装依赖-程序员宅基地

文章浏览阅读7.7k次,点赞4次,收藏16次。Chrome作为一款挺不错的浏览器,其有着诸多的优良特性,并且支持跨平台。其支持(Windows、Linux、Mac OS X、BSD、Android),在绝大多数情况下,其的安装都很简单,但有时会由于网络原因,无法安装,所以在这里总结下Chrome的安装。Windows下的安装:在线安装:离线安装:Linux下的安装:在线安装:离线安装:..._chrome linux debian离线安装依赖

烤仔TVの尚书房 | 逃离北上广?不如押宝越南“北上广”-程序员宅基地

文章浏览阅读153次。中国发达城市榜单每天都在刷新,但无非是北上广轮流坐庄。北京拥有最顶尖的文化资源,上海是“摩登”的国际化大都市,广州是活力四射的千年商都。GDP和发展潜力是衡量城市的数字指...

随便推点

java spark的使用和配置_使用java调用spark注册进去的程序-程序员宅基地

文章浏览阅读3.3k次。前言spark在java使用比较少,多是scala的用法,我这里介绍一下我在项目中使用的代码配置详细算法的使用请点击我主页列表查看版本jar版本说明spark3.0.1scala2.12这个版本注意和spark版本对应,只是为了引jar包springboot版本2.3.2.RELEASEmaven<!-- spark --> <dependency> <gro_使用java调用spark注册进去的程序

汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用_uds协议栈 源代码-程序员宅基地

文章浏览阅读4.8k次。汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用,代码精简高效,大厂出品有量产保证。:139800617636213023darcy169_uds协议栈 源代码

AUTOSAR基础篇之OS(下)_autosar 定义了 5 种多核支持类型-程序员宅基地

文章浏览阅读4.6k次,点赞20次,收藏148次。AUTOSAR基础篇之OS(下)前言首先,请问大家几个小小的问题,你清楚:你知道多核OS在什么场景下使用吗?多核系统OS又是如何协同启动或者关闭的呢?AUTOSAR OS存在哪些功能安全等方面的要求呢?多核OS之间的启动关闭与单核相比又存在哪些异同呢?。。。。。。今天,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的主题大纲:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JCXrdI0k-1636287756923)(https://gite_autosar 定义了 5 种多核支持类型

VS报错无法打开自己写的头文件_vs2013打不开自己定义的头文件-程序员宅基地

文章浏览阅读2.2k次,点赞6次,收藏14次。原因:自己写的头文件没有被加入到方案的包含目录中去,无法被检索到,也就无法打开。将自己写的头文件都放入header files。然后在VS界面上,右键方案名,点击属性。将自己头文件夹的目录添加进去。_vs2013打不开自己定义的头文件

【Redis】Redis基础命令集详解_redis命令-程序员宅基地

文章浏览阅读3.3w次,点赞80次,收藏342次。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。当数据量很大时,count 的数量的指定可能会不起作用,Redis 会自动调整每次的遍历数目。_redis命令

URP渲染管线简介-程序员宅基地

文章浏览阅读449次,点赞3次,收藏3次。URP的设计目标是在保持高性能的同时,提供更多的渲染功能和自定义选项。与普通项目相比,会多出Presets文件夹,里面包含着一些设置,包括本色,声音,法线,贴图等设置。全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,主光源和附加光源在一次Pass中可以一起着色。URP:全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,一次Pass可以计算多个光源。可编程渲染管线:渲染策略是可以供程序员定制的,可以定制的有:光照计算和光源,深度测试,摄像机光照烘焙,后期处理策略等等。_urp渲染管线