目前Kubernetes(K8s)已经真正地占领了容器编排市场,是默认的云无关计算抽象,愈来愈多的企业开始将服务构建在K8s集群上。在K8s中,组件经过Service对外暴露服务,常见的包括NodePort、LoadBalancer、Ingress等。其中Ingress主要提供HTTP层(7层)路由功能,相比TCP(4层)的负载均衡具有很是多的优点(路由规则更加灵活、支持金丝雀、蓝绿、A/B Test发布模式、SSL支持、日志、监控、支持自定义扩展等),是目前K8s中HTTP/HTTPS服务的主流暴露方式。html
Ingress提供的7层负载均衡具备很是强大的能力,例如:算法
原始的访问日志记录了网站的每一个访问请求,每一个请求包括用户地址、Host、URL、状态码、耗时、请求大小等多个维度的信息,基于访问日志能够统计出不一样维度下的访问qps、成功率、延迟等黄金指标,以此实现能够针对各类维度的网站质量监控。但构建一套完整的访问日志分析系统仍是很是困难,这其中包括了不少过程和工做:采集、存储、分析、可视化、告警等。在实施过程当中最为复杂的点在于:后端
为简化广大用户对于Ingress日志分析与监控的门槛,阿里云容器服务和日志服务将Ingress日志打通(官方文档),只须要应用一个yaml资源便可完成日志采集、分析、可视化等一整套Ingress日志方案的部署。
这套系统主要包括:服务器
Ingress日志分析与监控的方案已经发布2年左右,目前已经有上万的实例使用了该方案。在长期的使用中,咱们也发现了这套方案的一些限制,为了适应新时代的DevOps节奏,咱们须要对方案进行总体的升级,提供更加简单、更快速、更普惠、更智能的Ingress日志监控方案。网络
为了达到高性能、低成本、快速、智能等要求,SLS和阿里云容器服务团队联合对Ingress日志监控方案进行了一次架构升级,正式发布了2.0版本的Ingress日志中心,日志中心包括如下几个部分:session
经过以上3层数据链路,实现了从原始访问日志到预聚和的指标最后再到机器学习的异常事件整个数据的流转,对于用户来讲,告警和监控只须要基于指标和智能巡检的结果进行,而涉及到具体服务的问题分析能够再回到原始的访问日志并基于SLS提供的各类SQL统计方式进行自定义的排查和分析。架构
Ingress的访问日志数量和用户访问成正比,在原始访问日志上实时计算指标的开销较大,通常不适合长时间的指标分析,而且原始日志存储的成本较高,通常不会将日志存储较长时间,但咱们仍是但愿指标数据可以尽量长的存储,这样能够在分析的时候查看更长时间的数据。为此SLS专门为Ingress访问日志定制了一套全托管指标实时预聚合的功能,可以实时将Ingress的访问日志聚合成指标并存储在SLS的时序库中,这样全部的监控数据查询工做均可以基于聚合后的时序数据进行,大大提高监控数据的查询效率。负载均衡
Ingress访问日志分析的一个重要工做是可视化系统的搭建,咱们须要针对不一样场景建立不一样的报表以便知足各个方面的需求,例如:机器学习
在时序监控场景中,用户每每先肯定监控对象,并经过其历史数据,结合业务经验,获得不一样组的阈值参数,经过各类手段(同比、环比、连续触发几回等)进行监控,每每一个监控对象要设计4~5条监控规则,并配置不一样的参数。还有更大的问题,各个参数阈值没法快速的复用到不一样的相似观测对象中,当观测对象的规模达到数千,甚至上万后,传统的配置效率底下,没法知足在大规则时序指标数据下的监控需求。流式算法具备自然的优点能够解决上面的问题,用户只须要发起一个机器学习服务,模型自动拉取数据,实时训练,实时反馈(通俗地说:“来一个点,学习一个点,检测一个点”),在极大的下降成本的同时,实现对每一条线的单独建模,单独分析,单独模型参数保存,实现时序异常检测的“千线千面”。性能
HPA(Horizontal Pod Autoscaler)是Kubernetes提供的一个标准组件,用于POD的横向自动扩缩容,例如:当Pod CPU、内存等指标上升到必定程度时会自动扩容,当这些指标下去后会自动缩容。这样可以保证在用户体验不变的状况下集群总体的资源使用都能处于一个较低的位置。
默认的HPA只能针对集群的一些标准指标(CPU、内存、网络等)进行扩容,这种扩容方式相对静态,并且反应不出业务的状况。所以咱们对HPA进行了一些扩展,支持按照Ingress访问QPS进行扩容。便可以设置某个Service下的Pod限定可以处理的QPS,当QPS上升到必定高度时会自动扩容一些Pod/节点,当QPS降低时会自动缩容一些Pod/节点。
HPA的预测原理是判断某些指标的值进行扩缩容,而指标的值相对来讲都有10-30秒左右的延迟,而且还有几回的double check时间,所以从压力上升到扩容的时间基本上在2-3分钟左右,若是Pod启动还须要预热的话可能要更久,这段期间用户的访问请求极可能会出现高延迟或错误的状况。
所以最好的方式是咱们可以提早知道将来几分钟的访问请求量,当咱们发现将来访问请求会很高的时候,提早把Pod扩容出来并进行预热,这样能够在请求真正提高时Pod的资源已经提早分配好。为此咱们结合SLS与阿里云达摩院联合研发的多模型预测算法,实时预测Ingress上每一个服务的访问请求,并把这些预测的指标提供给HPA作动态扩容,可以在请求量即将超过阈值的时候提早扩出Pod/节点,保证用户访问一直流畅。
Ingress访问日志中心提供了访问日志分析、秒级监控指标分析、实时告警等功能,并提供基于AIOps的自动异常巡检功能。基于这些功能咱们能够快速构建出一套企业级的监控系统,可以以很是小的工做量实现公司全部访问入口的统一监控。
原文连接本文为阿里云原创内容,未经容许不得转载。