再次升级-Kubernetes Ingress监控进入智能时代

简介:Ingress日志记录了Kubernetes集群所有的外部请求信息,是进行集群服务质量监控的最佳方式。目前Ingress日志分析与监控的方案已经发布2年左右,已经有上万的实例使用了该方案。为了适应新时代的DevOps节奏,我们对方案进行整体的升级,提供更加简单、更快速、更普惠、更智能的Ingress日志监控方案

Kube: O f ) N p jrnetes的门户-Ingress

目前Kubernetes(K8s)已经真正地占领了容器编排市场,是默认的云无关计算抽象,越来越多的企业开始将服务构建在K8s集群上。在K8s中,组件通过Service对外暴露服务,常见的V r #包括NodePort、LoadBalancer、Ingress等。其中Ingress0 c b f q H w R主要提供HTTP层(7层)路由功能,相比TCP(4层)的负载均衡具备非常多的优势(路由规则更加灵活、支持金丝雀、蓝绿、A/B Test发布模式、SSL支持、日志、监控、支持自定义扩展等),是目前K8a 2 @ , U E gs中HTTP/HTTPS服务的主流暴露方式。

Ingress提供的7层a G B C | { s负载均衡具有非常强大的能力,例如:

  • 会话保持:{ u G 0 ? J让相同的session ID路由到同一台后端机器,保证每个用户的会话9 # P g s只在一台机器上处理。
  • 基于内容的转发:能够根3 # l m Y j * E $据HTTP协议内容进行转发,例如Host、URL甚至是PostBody等。
  • 重写请求:能够对用户的请求进行动态修改,非常适用于新老系统的兼容性改造。
  • 加密:在负载均衡上配置SSL,提供统一的证书管理,每个服务器无需单独维护证书。
  • 健康检查增强:可基于业务规则进行健康检查,而不仅仅是判断端口连通性,使健康检查更加精确。
  • 日志监控:全量7层访问日志,能够获取每个请求的结果、耗时、请求大小等信! : Y w 7 g 7息,能够基于访问日志监控到每个服务的G F U O 5 (质量。

Ingress日志分析与监控

原始的访问日志记录了网站的每个访问请求,每个请求包括用户地址、Host、URL、状态码、耗时、请求大小等多个维度的信息,基于访问日志可以统计出不同维度下的访问qps、成功i % l } ,率、延迟等黄金指标,以此q % 8 z A T实现可以针对各种维4 % F b度的网站质量监控。但构建一套完整的访问日志分析系统还是非常困难,这其中包括了很多过程和工作:采集、存储、分析、可视化、告警等。在实施过程中最为复杂的点在于:

  • 采集问题:如何保证日志采集的可靠性、性能消耗、延时问题;
  • 分析:在保证分析u t $ 2灵活性的同时能够保持快速的分析、查询速度以及较低的实施成本;
  • 自动化:尤其在业务规模比较大的情况下,如何智能的监控和分析各个服务的状态是一个迫切需要的功能。

再次升级-Kubernetes Ingress监控进入智能时代

为简化广大用户对于Ingres: R ms日志分析与监控的门槛,阿里云容器服务和日志服务将Iv 3 T u ` L j P cngress日志打通(官方文档),只需要应用一个yaml资源即可完成日志采集、分析、可视化等一整套Ingress日志方案的部署。 这套系统主要包括:

  1. 日志实时采集X % t方式:通过Logtail实时采集Ingress产生的输出日志,并F . 进行格式转换
  2. 存储6 5 ?:SLS提供负载均衡的实时队列t $ ~ . ; ;用于日志的存储,并提供按照TTL的存储方式,可任意设置保存的日志天数。
  3. 查询/分析:基于SLS提供的SQL92语法可实现对Ingress日志各个维度的交互式分析与计算,例如统计UV变化,访问请求分布,TOP延迟等。
  4. 可视化大盘:将常见的监控、分析场景需求以图表的形式固化成t h K y [ v大盘,用户绝大部分时间只需要查看大盘即可了解整个系统的状态。

再次升级-从1.0到2.0

再次升级-Kubernetes Ingress监控进入智能时代

Ingress日志分析与监控的方案已经发布2年左右D [ W / l !,目前已经有上万的实例使用了该方案。在长期% 4 F的使用中,我们也发现q - Q } d A了这套方案的一些限制,为了适应新时代的DevOps节奏,我们需要对方案进行整体的升级,提供更加简单、更快速、更普惠、更智能的Ingress日志监控方案。

  1. 更简单:整个方案用户的使用更加简单,不需要去关注SLSs 5 {的相关的资源,可以直接以单独Ingr= T H y 1 x ~ Hess监控APP的方式使用;
  2. 更快速:1.0的方案基于原始访问日志4 j k G H实时计算,在时间跨度较大或日志量较大的情况下查询速度较慢,使用体验较差;- % { k D ~ {
  3. 更普惠:由于计算依赖原始日志,所以必须将日志长期保存,原始日志的存储量较高,会产生较高的费用;
  4. 更智能:随着K8s集群中运行r [ j w m ,服务数量的增加,传统的监控方式越来越吃力,依赖静态指 = , c C M { J标的告警规d r w g 4则很难监控所有的( n (异常,因此急需更加智能的AIOps能力来解放生产力。

方案架构

再次升级-Kubernetes Ingress监控进入智能时代

为了达到高性能、低成本、] G @快速、智能等要求,SLS和阿里a ] = t 8云容器服务团队联合对Ingress日志监控方案进行了一次架构升级,正式发布了2.0版本的Ingress日志中心,日志中心包括以下几个部分:

  1. 原始访问日志存储:当Ingress Controller产生访问请求后,会实时将请求的访问日志推送到用户自身的Logi ( & K 6store中,整个过程的延迟一般在3-5秒即+ t @ { `可完成,SLS的5 7 | a CLogst: 0 F Core具备高可靠、实时索引、自动扩容等功能,保证日志的可靠性和可扩展性。
  2. 预聚和n D U m 1 j , # _:由于原始访问日志量巨大,基于原始日志计算指标性能开销较大,因此SLS专门推出了基于访问日志的指标预聚和能力,能够将上百万甚至上亿的访问日志实时聚合成指标类型的时序数据,数据量会降| I j $低1-2个数% # ` Y量级,后续的分析与监控可直接基于时序数据进行,大大提高效率。
  3. 智能巡检:对于预聚和后的Metrics(指标数据),SLS提供了机器学习的自, * 9 p动巡检功能,帮助用户自动去检测各个Ingress的各个维度的9 d $ W + 6指标异常,将异常信息实时展现在时序的图表中,结合实时告警能力进行自动的G G b告警配置。此外后续还会支持异常打标,基于用户反馈的信息进行更加精确的检测。

通过以上3层数据链路,实现了从原始访问日志到预聚c 2 &和的指标最N A V 1 , x u @ S后再到G j * L j E ! C机器学习的异常事件整个数据的流转,对于用户来说,告警和监控只需要基于指标和智能巡检的结果进行,而涉及到具体服务的问题分析可以再回到原始的访问日志并基于SLS提供的各种SQL统计方式进行自7 / s C | @定义的排Q : # r查和分析。

实时预聚O 3 % `4 0 [ P 6 V

再次升级-Kubernetes Ingress监控进入智能时代

Ingress的访问日志数量和用户访k A T ] # f v问成正比,在原始访问日志上实时计算指标的开销较大,一般不适合长时间的指标分析,并且原始日志存储的成本较高,一般不会将日志存储较长时间,但我们还是希@ p p 4 u望指标数据能够尽可能长的存储,这样可以在分析的时候查看更长时间的数据。为此SLS专门为Ingress访问日志定制了一套全托管指标实时预聚v t ~ ! z / ~合的功能,能够实时G U G Q ;将Ingress的访问日志聚合成指标并存储在SLS的时: 0 B b ` p d w u序库中,这样所有的监控数据查询工作都可以基于聚合后的时序数据进行,大大提升监控数据的查询效率。

丰富可视化

Ingress访问日志分析的一个重要工作是可视化系统u Q N d s - v的搭建,我们需要针对不同场景创建不同的报表以便C | 8 V & 4 u ( %满足各个方面的需求,例如:

  1. 整体大盘:包& ^ , ? E # h k括网站当前的访问UV/PV、整体延迟、成功率等,这个是老板们和SRE需要_ i H看的数据,需要保证数据时效性和刷新的速度
  2. 监控大盘:- : ~ ( f :能够把监控需要关注的各种数据(延迟(平均、P9U t J _ @ 8 ,9/P9999等)、流量、成功率、错误码、TOP类统计)等显示在一张报表上,并且能够支持各种维度的过滤,方便定G p o v ~ T w位到问题的实例。
  3. 访问大盘:显示和用户相关的访问信息,例如PVv J - P & k x K ^/UV、访问的地域分布、设备分布等,一般情况技术Leader会关注,另外部分的运营同学可能也会需要这部分数据。
  4. 异常大盘:显示异常巡检的指标信息,能够把异常的指标显示在报表上,方便查看。
  5. 后端流量分析:快速分析后端的流量、QPS、延迟、错误率等分布信息,能够快速查找到“调皮C z T u”的机器。

再次升级-Kubernetes Ingress监控进入智能时代

智能巡检

在时序监控场景中,用户往往先E b $ ` * C确定监控对象,并通过其历史数据,结合业务经验,得到不同组的阈值参数,通过各种手段(同比、环比、连续触发几次等)进行监控,往往一个监控对象要设计4~5条@ o T #监控规J S 5则,并配置不同的参数。还有更大的问题,各个参数阈值无法快速的复用到不同的类似观测对象中,当观测对象的规模达到数千,甚至上万后,传统的配置效率底下,无法满足在大规则时序指标. * 3数据下的监控需求。流式算法具有天E S T d L 9 q Q I然的优势D ^ q , - e t L可以解决上7 Y d d K ` V m i面的问题,用户只需要发起一个机器学习服务,模型自动拉取数据,实时训练,实时反馈(: R ? M Y q h _ k通俗地说:“来一个点,学习m s @一个点,检测一个点”),在极大的降低成本的同时,实现对每一条线的} Z +单独建模,单独分析,单独模型参数保存,实现时序异常检测的“千线千面”。

再次升级-Kubernetes Ingress监控进入智能时代

智能HPA

再次升级-Kubernetes Ingress监控进入智能时代

基于业务访问量的HPA

HPA(Horizontal Pod Autoscaler)是Kuberne} W c @ ~ Wtes提供的一个标准组件,用于POD的横向自动扩缩容,例如 P g:当Pod CPU、内存等指标上升到一定程度时会自动扩容,当这些指标下去后会自动缩容。这样能够保证在用户体验不变的情况n o n ; } b l下集群整体的资源使用都能处于一个较低的位置。 默认的HPA只能针对集群的一些标准指标(CPU、内存、网络等)进行扩容,这种扩容方式相对静态,而且反应不出业务的情况。因此我们* O ] c M ) 4 ]对HPA进行了一些扩展,支持按照Ingress访问QPS进行扩容。即可以设置某个Service下的Pod限定能够处理的QPS,当QPS上升到一定高度时会自动扩容一些Pod/节点,当QPS下降时会自动缩容一些Pod/节点。

基于业务量预O , 2 M测的HPA

HPA的预测原理是判( # L ( M断某些指标的值进C V . c + 8 # r扩缩容,而a t p r U n /指标的值相对来说都有10-30秒左右的延迟,并且还有几次的double check时间,因此从压力上升到扩容的时间基本上在2-3分钟左右,如果Pod启动还需要预热的话可能要更久,这段期间用户的访问请求很可能会出现高延迟或错误的情` @ x $ ( 7 $ g况。8 / i c 因此最好的方式是我们能够提前知道未来几分钟的访问请求量,当我们发现未来访问请求会很高的时候,提前把W C ~ k A R J T [Pod扩容出% ) p ?来并进行预热,这样可以在请求6 E @ 3 u真正提升时Pod的资源已经提前分配好。为此我们结合SLS与阿里云达摩院联合研发的V ^ T i O I # M S多模型预测算法,实时预测Ingress上每个服务的访问请求,并把这些预测的指标提供给HPA做动态扩容,能够在请求量即将超过阈值的时候提前扩出Pod/节点,保证用户访问一直流畅。

总结

Ingress访问日志中心提供了访问日志分析、秒级监控w n 5 _ Q u指标分析、实时告警等功能,并提供基于AIOps的自动异常巡检功能。基于这些功能我们可以快速构建出一B S J P } u ! % p套企业级的监控系统,能够以非常小的工作量实7 d = e现公司所有访问入口的统一监] X e b q & S ~控。

作者:元乙6 T I 2

本文z B b为阿里云原f 4 2 t _ a T s创内容,未经允许不得转载