首页 ACK集群可观测性解决方案

ACK集群可观测性解决方案

更新时间: 2024-04-02 14:23:43

可观测性指如何从外部输出推断及衡量系统内部状态。Kubernetes可观测性体系包含监控、日志等部分,可观测性能力可以帮助开发者查看系统的运行状态,协助问题的排查和诊断。本文介绍阿里云容器服务ACK可观测性解决方案,以帮助客户基于容器服务可观测性生态构建适合企业自身架构和需求的可观测性解决方案。

方案概述

可观测性指依据系统外部输出推断及衡量系统内部状态。Kubernetes可观测性体系包含监控、日志、事件等部分,可观测性能力可以帮助开发者查看系统的运行状态,协助问题排查和诊断。

本方案介绍阿里云容器服务ACK可观测性解决方案,以帮助客户基于容器服务可观测性生态构建适合企业自身架构和需求的可观测性解决方案。

方案优势

构建综合立体的可观测性体系

构建在K8S中的应用需要关注多个维度的监控指标,本方案提供全方位定位K8S问题,对系统实现多维度的深度可观测能力。

使用阿里云丰富的开箱即用的产品能力

相比于通过开源组件自建监控体系,本方案使用阿里云成熟产品提供包括默认大盘、告警等功能,可以快速构建一套成熟的生产环境。

支持跨账号场景的数据聚合和可观测

对于使用多账号的企业客户来说,如何将多个账号内的数据打通实现统一聚合告警非常关键。本方案也提供了一种打通多个账号的数据源,实现综合可观测实践。

客户场景

指标可观测性

场景描述

为了获知系统的整体状态,需要从每个组件收集指标。同时还需要知道历史状态、在时间区间里状态是如何变化的。为了达到这个目的,就意味着需要不断地从组件中收集状态数据。一旦有了这些指标数据,就可以构建内容丰富的仪表盘视图了,比如Grafana大盘,阿里云云监控大盘等。

适用客户

  • 通过指标进行可观测性的客户。
  • 使用多个阿里云账号的企业客户。

事件可观测性

场景描述

事件监控是Kubernetes可观测性 中的一种方法,可以弥补资源监控在实时性、准确性和场景上的欠缺。在ACK的事件可观测方案中,通过使用NPD结合SLS的Kubernetes事件中心、配置NPD集群检查项以及异常事件离线功能、使用钉钉、使用SLS离线Kubernetes事件及使用EventBridge离线Kubernetes事件,实时监控集群的异常与问题。

下面是事件的分类示意图:

ACK事件中心也提供常见的内置能力,包括如:

  • ACK事件中心已经封装好了常见的异常事件告警,实现了开箱即用的事件告警能力。例如:Pod OOM、系统OOM、Pod驱逐、Pod Pending等等。
  • ACK事件中心提供了事件分析功能,可以清晰的查看异常事件分布。
  • ACK事件中心提供了Pod生命周期监控能力,可以清晰的查看Pod生命周期的时间线,以便定位问题。

适用客户

  • 基于K8s事件进行分析的企业客户。

日志可观测性

场景描述

阿里云容器服务Kubernetes集群提供了多种方式进行应用的日志管理。SLS作为日志服务,提供了日志存储、加工、检索、查询的丰富产品能力。Logtail是日志服务提供的日志采集Agent,用于采集阿里云ECS、自建IDC、其他云厂商等服务器上的日志。

适用客户

  • 基于日志进行分析的企业客户。

数据跟踪可观测性

场景描述

对于部署在容器服务Kubernetes版中的Java应用,可以使用应用实时监控服务ARMS对其进行监控,实现自动发现应用拓扑、自动生成3D拓扑、自动发现并监控接口、捕获异常事务和慢事务,大幅提升线上问题诊断的效率。

适用客户

  • 基于链路追踪进行分析的企业客户。

告警场景

场景描述

ACK将ARMS Prometheus、事件、云监控等多种告警能力进行云原生场景下告警能力的集成,提供了“报警配置”的产品功能,可以在统一界面上看到全部告警,并进行配置,极大简化了云原生场景的告警能力。

适用客户

  • 统一告警的企业客户。

方案架构

单集群可观测架构

可观测架构分层

以ACK为基础的系统架构可以粗略分为4个层次。自下而上分别是:基础设施层、容器性能层、应用性能层、用户业务层。每层可以使用指标、日志、事件等可观测性方式进行监控。

  • 基础设施层可观测性:指容器服务ACK所依赖的底层资源的可观测场景:定位Pod与节点组成的资源池的调用链路,可视化拓扑关系,以及基础设施监控,例如宿主机节点、网络基础组件的性能监控等。
  • 容器性能层可观测性指基于容器服务ACK构建系统的容器抽象层的可观测场景,包括集群的性能、事件等监控,容器的性能,以及容器组件等监控。
  • 应用性能层可观测性指基于容器服务ACK构建系统的具体应用场景,包括应用指标性能(Metric)、系统调用链(Tracing)、日志监控(Logging)等,例如基于容器服务构建一个Java应用,JAVA应用的线程数指标等。
  • 用户业务层可观测性:基于容器服务ACK构建的业务系统的具体业务场景,例如基于容器服务构建一套高可用可扩展的网站,网站的业务运营数据PV、UV等,例如应用的成本审计场景等。

基础设施层可观测性

指容器服务ACK所依赖的底层资源的可观测场景:定位Pod与节点组成的资源池的调用链路,可视化拓扑关系,以及基础设施监控,例如宿主机节点、网络基础组件的性能监控等。

解决方案

方案介绍

适用场景

参考文档

架构可视化感知方案

Kubernetes集群中的业务是运行在节点组成的资源池上,使得定位Pod的调用链路以及拓扑关系非常复杂。那么如何以可视化的方式监控Kubernetes中的负载状态,及更好地可视化集群中流量的吞吐是非常重要的问题。推荐使用阿里云Kubernetes监控产品提供的架构感知产品能力。

适用全部场景

更多信息,请参见架构感知监控

基础设施指标监控方案

资源监控是Kubernetes中最常见的底层资源监控方式,通过资源监控可以快速查看负载的CPU、内存、网络等指标的使用率。在阿里云容器服务中,资源监控已经与云监控互通,新建的集群默认安装与集成云监控(Cloud Monitor)。

适用全部场景

更多信息,请参见基础资源监控

容器性能层可观测性

指基于容器服务ACK构建系统的容器抽象层的可观测场景,包括集群的性能、事件等监控,容器的性能,以及容器组件等监控。

解决方案

方案介绍

适用场景

参考文档

云监控容器服务ACK的监控方案

阿里云容器服务ACK新建的集群默认安装与集成云监控(Cloud Monitor),提供集群、容器的部分性能指标监控,并集成在容器服务控制台中展示。

适用部分场景,定制化提供基础的容器层性能指标可观测能力。

更多信息,请参见基础资源监控

阿里云托管版Prometheus的监控方案

Prometheus也是社区官方的容器场景云原生指标可观测方案。阿里云Prometheus监控全面对接开源Prometheus生态,支持类型丰富的组件监控,提供多种开箱即用的预置监控大盘,且提供全面托管的Prometheus服务。借助阿里云Prometheus监控,您无需自行搭建Prometheus监控系统,因而无需关心底层数据存储、数据展示、系统运维等问题。推荐使用阿里云托管版Prometheus(ARMS Prometheus)云产品。

适用全部场景,包括微服务(ServiceMesh)场景、集群如自身组件指标,以及定制监控能力等高级可观测能力。

更多信息,请参见阿里云Prometheus监控

开源Prometheus监控方案

阿里云容器服务在应用市场中提供了开源Prometheus监控方案的集成。企业级场景不推荐该方案,相比于云产品阿里云托管版Prometheus(ARMS Prometheus),开源产品没有完善的技术支持。

适用全部场景,包括微服务(ServiceMesh)场景、集群如自身组件指标,以及定制监控能力等高级可观测能力。

更多信息,请参见开源Prometheus监控

应用性能层可观测性

指基于容器服务ACK构建系统的具体应用场景,包括应用指标性能(Metric)、系统调用链(Tracing)、日志监控(Logging)等,例如基于容器服务构建一个Java应用,JAVA应用的线程数指标等。

解决方案

方案介绍

适用场景

参考文档

无侵入应用监控APM监控方案

推荐使用阿里云应用性能监控ARMS(Application Realtime Monitor Service)作为应用性能层监控方案,ARMS是一款阿里云应用性能管理(APM)类监控产品。只要为部署在容器服务Kubernetes版中的Java应用安装ARMS应用监控组件,您无需修改任何代码,就能借助ARMS对Java、PHP应用进行全方位监控,以便您更快速地定位出错接口和慢接口、重现调用参数、检测内存泄漏、发现系统瓶颈,从而大幅提升线上问题诊断问题的效率。

适用部分场景,包括JAVA、PHP应用的应用监控,方案接入支持无侵入方式,无需进行代码改造。

更多信息,请参见应用性能监控

侵入式应用监控APM监控方案

链路追踪Tracing Analysis为分布式应用的开发者提供了完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等工具,可以帮助开发者快速分析和诊断分布式应用架构下的性能瓶颈,提高微服务时代下的开发诊断效率。链路追踪支持多种开源社区的SDK,且支持OpenTracing标准。

适用所有场景,包括微服务(ServiceMesh)以及多种开发语言的应用,方案接入需要侵入式代码引入改造。

更多信息,请参见在ASM中实现分布式跟踪

快速上手链路追踪

用户业务层可观测性

基于容器服务ACK构建的业务系统的具体业务场景,例如基于容器服务构建一套高可用可扩展的网站,网站的业务运营数据PV、UV等,例如应用的成本审计场景等。

解决方案

方案介绍

适用场景

参考文档

自定义日志监控方案

推荐使用阿里云日志服务SLS (Log Service)作为自定义指标的观测方案。您可通过自定义应用系统的内容、格式,并通过日志服务收集,并在日志服务中配置业务大盘,观测自己的业务情况,或做系统审计。

适用全部场景,如流量监控、成本审计统计、业务订单走势统计等。

更多信息,请参见通过日志服务采集Kubernetes容器日志

多账号多集群可观测架构

多账号管理下的指标可观测性可以基于如下方案:

  1. 基于ARMS GlobalView的能力,可以打通多账号下的ARMS Prometheus数据源,实现跨账号的管理。可以复用现有的ACK One可观测性大盘。开发中,12月份上线。
  2. Grafana支持添加多账号下的Prometheus数据源,实现数据的聚合分析。具体可以查看官网链接

产品费用及名词

产品费用

产品名称

产品说明

产品费用

ARMS

ARMS Prometheus监控全面对接开源Prometheus生态,支持类型丰富的组件监控,提供多种开箱即用的预置监控大盘,且提供全面托管的Prometheus服务。借助ARMS Prometheus监控,用户无需自行搭建Prometheus监控系统,因而无需关心底层数据存储、数据展示、系统运维等问题。

收费,详情参见产品计费

云监控

云监控(CloudMonitor) 是一项针对阿里云资源和互联网应用进行监控的服务。云监控服务可用于收集获取阿里云资源的监控指标,探测互联网服务可用性,以及针对指标设置警报。

部分功能免费,高级功能收费。具体可以查看产品计费

日志服务

日志服务(SLS)是云原生观测与分析平台,为Log、Metric、Trace等数据提供大规模、低成本、实时的平台化服务。日志服务一站式提供数据采集、加工、查询与分析、可视化、告警、消费与投递等功能,全面提升您在研发、运维、运营、安全等场景的数字化能力。

收费,详情参见产品计费

容器集群(ACK)

阿里云容器服务Kubernetes版是全球首批通过Kubernetes一致性认证的服务平台,提供高性能的容器应用管理服务,支持企业级Kubernetes容器化应用的生命周期管理,让您轻松高效地在云端运行Kubernetes容器化应用。

收费,详情参见官网链接

名词解释

名称

说明

USE vs RED

指标可以按不同方式分类,常见的包括RED方法、USE方法。

RED方法专注于微服务架构,包含三类指标:

  • 速率(Rate):服务每秒的请求数
  • 错误率(Error):每秒失败的请求数
  • 时延(Duration):处理一次请求的时延

USE方法更专注于基础设施监控,包括三类指标:

  • 利用率(Utilization):已只用资源的比例,100%的利用率标示无法继续处理更多的工作任务。
  • 饱和度(Saturation):资源不能再服务更多额外工作的程度,通常有等待队列
  • 错误(Errors):错误事件数量

安全性

ARMS访问控制

借助访问控制RAM的RAM用户,您可以实现权限分割的目的,按需为RAM用户赋予不同权限,并避免因暴露阿里云账号密钥造成的安全风险。具体可以参考官网文档

Grafana身份安全

Grafana中存在多种结构用于组织资源和权限,当公司存在多个团队、部门或客户需要服务时,需要考虑如下场景的身份安全问题:

  • 部门A不应该看到部门B的信息,该如何分配账号并管理权限。
  • 不同部门对身份验证、插件等有很大不同,如何配置隔离。
  • 当需要对客户展示公共内容时如何使用户免鉴权查看。

具体可以参考官网文档

注意事项

Grafana登录问题

拥有Admin权限的账号不具备直接创建账号的能力,只有Admin账号可以直接创建账号。Admin账号登录方式:

  • 使用Admin账号和创建工作区时设置的Admin密码登录Grafana。如果忘记密码,您可以在控制台的账号管理页面重置Admin密码。
  • 登录创建工作区的阿里云账号(主账号),然后在Grafana登录页单击Sign in with Alibaba Cloud直接使用当前阿里云账号登录Grafana。

实施步骤

实施准备

实施时长

在实施准备工作完成的情况下,本方案实施预计时长60分钟。

场景规划

本文会按照四个层次展开介绍各个场景的实施步骤

  • 场景1:指标可观测性
  • 场景2:事件可观测性
  • 场景3:日志可观测性
  • 场景4:数据追踪可观测性

场景1:指标可观测性

该场景依赖于ARMS Prometheus监控,具体参见官网操作文档

方式一:创建集群时开启

在创建集群的组件配置页面,选中使用Prometheus监控服务。具体操作,请参见创建Kubernetes托管版集群

说明:

在创建集群时,系统默认选中使用Prometheus监控服务

集群创建完成,系统将自动配置ARMS Prometheus监控服务。

方式二:在已有集群中开启
  1. 登录容器服务管理控制台,在左侧导航栏中选择集群。
  2. 在集群列表页面中,单击目标集群名称,然后在左侧导航栏中,选择运维管理 > Prometheus监控。
  3. 在Prometheus监控页面,单击开始安装。控制台会自动安装组件、检查监控大盘。安装完成后,单击各个页签查看相应监控数据。

场景2:事件可观测性

该场景依赖于node-problem-detector以及事件中心具体参见官网操作文档

方式一:创建集群时开启

如果在创建集群时,已选中安装node-problem-detector并创建事件中心,请按照以下步骤查看Kubernetes事件中心。关于通过创建集群,安装node-problem-detector并创建事件中心的详细信息,请参见创建Kubernetes托管版集群

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 选择运维管理 > 事件中心
  5. 单击右上角的事件中心管理,在K8s事件中心页面左侧导航栏,单击目标集群名称左边的展开图标,查看Kubernetes事件中心相关信息。您可以查看Kubernetes事件的总览及详情、Pod生命周期,还可以进行自定义查询及告警配置。
方式二:在已有集群中开启

果在创建集群时,未配置事件中心功能,请按照以下步骤使用Kubernetes事件中心。

  1. 对被监控集群安装NPD并激活SLS功能。如果已安装NPD但未激活SLS,请先卸载旧版本。您在配置NPD参数时,需将 eventer.sinks.sls.enabled设置为 true,以创建SLS日志项目。成功部署NPD后,NPD会自动在SLS控制台内创建与集群对应的项目。
    1. 在控制台左侧导航栏中,单击集群
    2. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
    3. 选择应用 > Helm
    4. Helm页面,删除原有的ack-node-problem-detector组件以卸载旧版本NPD。
  1. 日志服务管理控制台为集群配置Kubernetes事件中心。
    1. 接入数据区域,单击Kubernetes-标准输出
    2. 设置项目Project为配置NPD时默认的SLS Project,选择日志库Logstore为自动创建的k8s-event
    3. 单击下一步,然后单击确认安装完毕
  1. 日志服务管理控制台Project列表区域,单击目标Project名称。
  2. 在左侧导航栏中,单击仪表盘,然后单击Kubernetes事件中心V1.5

在Kubernetes事件中心大盘中即可看到从集群中汇总的事件。

场景3:日志可观测性

该场景依赖于Logtail组件具体参见官网操作文档

可以在创建集群时选中使用日志服务,启用Logtail组件;也可以为已有集群启用Logtail组件。

方式一:创建集群时启用Logtail
  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击页面右上角的创建集群以下仅介绍开启日志服务的关键步骤。关于创建集群的具体操作,请参见创建Kubernetes托管版集群
  4. 组件配置配置项页中,选中使用日志服务,表示在新建的Kubernetes集群中安装日志插件。当选中使用日志服务后,会出现创建项目(Project)的提示。关于日志服务管理日志的组织结构,请参见项目(Project))。有以下两种创建Project方式。
    • 单击使用已有Project,选择一个现有的Project来管理采集的日志。
    • 单击创建新Project,自动创建一个新的Project来管理采集的日志,Project会自动命名为k8s-log-{ClusterID},ClusterID是您新建的Kubernetes集群的唯一标识。
  1. 配置完成后,单击右下角创建集群,在弹出的窗口中单击确定,完成创建。完成创建后,您可在集群列表页面看到开启了Logtail的ACK集群。
方式二:在已有集群中启用Logtail
  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏中,选择运维管理 > 组件管理,并在日志与监控区域找到logtail-ds
  5. logtail-ds组件右侧,单击安装
  6. 安装组件对话框中单击确认

场景4:链路追踪可观测性

具体参见官网操作文档

使用链路追踪控制台之前,需要完成的准备工作包括开通相关服务和授权,以及接入应用。

开通相关服务和授权

使用链路追踪之前,首先需要开通链路追踪服务。由于链路追踪依赖日志服务LOG和访问控制RAM服务,所以也需要开通这两项服务,并授权链路追踪读写您的日志服务数据。

关于开通相关服务和授权的方法,请参见开通相关服务并授权

接入应用

接入应用是指通过客户端将应用的链路数据上报至链路追踪控制台,从而实现链路追踪的目的。您可以将Java、Go、Python、JS、.NET、C++等语言的应用数据上报至链路追踪控制台。支持的上报数据客户端包括Jaeger、Zipkin和Skywalking。请根据您的应用语言或者使用的客户端查看相应的应用接入文档。

相关内容