第9章 日志服务的集成

源代码 2024-9-8 21:25:54 14 0 来自 中国
针对K8s日志收罗存在的收罗目的多、弹性伸缩难、运维本钱大、侵入性高、收罗性能低等题目,阿里云日志服务和容器服务团队计划了阿里云K8s日志办理方案。
用户一分钟内即可完成整个集群部署,并实现集群节点日志、容器日志、容器标准输出等全部数据源的一站式收罗。而且,在后续集群动态伸缩的时间,用户也不必要对日志组件做任何二次调解。
9.1 日志服务先容

阿里云的日志服务是针对日志类数据的一站式服务。日志收罗署理Logtail运行在上百万呆板上,为数以万计的应用提供服务。阿里云日志服务有如下特点:

  • 可靠:履历了“金融级别”的检验,不丢失一条日志。
  • 稳固:客户端性能强劲,资源占用率低,在上百万台呆板上运行。
  • 高吞吐:PB级规模,参数设置机动,“秒级”出效果。
  • 无维负担: 零负担,零代价,零预留本钱。
  • 生态丰富:完善支持Hadoop、Spark、Flink等开源产物与阿里云自研技能。
  • 迭代快:是阿里共用的一套产物,可第一时间提供新功能。新技能。
    从功能角度来看,日志服务重要包括日志收罗、离线盘算、可视分析以及实时盘算等。如下图所示。

    1.png
9.2 收罗方案先容

9.2.1 方案简介

阿里云K8s日志收罗方案如下图所示。K8s的每个节点都会运行一个Logtail容器,该容器可收罗宿主机以及该宿主机上容器的日志,包括标准输出和日志文件。


Logtail以集群Daemonset的方式编排,这包管了每个节点都有一个Logtail容器在运行。
同时,此方案使用了自界说标识呆板组,支持集群动态缩容和扩容。别的,收罗设置支持通过标签以及环境变量过滤指定容器。
K8s内部会注册自界说资源CRD AliyunLogConfig,并部署ALibaba Log Controller控制器。以是,此方案支持用户通过CRD方式或日志服务控制台两种方式对收罗设置举行管理。
9.2.2 运行流程

以CRD的设置方式为例,可以把日子方案的工作流程简朴总结为6个步调,如下图所示。

  • (1)用户使用kubectl或其他工具应用aliyunlogconfigs CRD设置。
  • (2)alibaba-log-controller监听到设置更新。
  • (3)alibaba-log-controller根据CRD内容以及服务端状态,主动向日志服务提交创建Logstore、创建立置以及创建应用呆板组的哀求。
  • (4)以DaemonSet模式运行的Logtail会定期哀求设置服务器,获取新的或已更新的设置并举行热加载。
  • (5)Logtail根据设置信息收罗各个容器(Pod)上的标准输出或日志文件。
  • (6)最终Logtail将处理、聚合好的数据发送给日志服务。
9.2.3 设置方式

日志收罗设置默认支持控制台设置方式,同时针对K8s微服务开发模式,提供了CRD的设置方式,用户可以直接使用下令行对设置举行处理或将其集成到其他编排服务中。两种设置方式的特点如下表所示。


如果刚开始使用日志服务,发起使用控制台的设置方式,此种方式所见即所得,易于上手。
若后续必要将日志收罗与服务或组件发布集成,发起使用CRD的设置方式,可以直接将收罗设置和服务设置放在同一个Yaml文件中部署和管理。
若后续必要将日志收罗于服务或组件发布集成,发起使用CRD的设置方式,可以直接将收罗设置和服务设置放到同一个Yaml文件中部署和管理。
9.3 核心技能先容

9.3.1 配景

差别于其他开源日志收罗Agent,日志服务Logtail从计划之初就已经思量到设置管理的困难。因此Logtail从第一个版本开始就支持中心化的设置管理,支持在日志服务台或者SDK中对全部收罗设置举行同一管理,大大低落了日志收罗的管理负担。
但在K8s集群环境下,业务应用、服务、组件的连续集成和主动发布已经成为常态,使用控制台或SDK操纵收罗设置的方式很难与各类CI、编排框架集成,导致业务应用发布后用户只能通过控制台以手动设置的方式部署与之对应的日志收罗设置。因这天志服务专门为K8s举行了扩展,用以支持原始的设置管理。
9.3.2 实现方式

如下图所示,日志服务为K8s新增了一个CRD扩展,名为AliyunLogConfig。同时开发了alibaba-controller用于监听AlilyunLogConfig事故。

4.png
当用户创建、删除、修改AliyunLogConfig资源时,alibaba-log-controller会监听到资源厘革,并在日志服务上创建、删除、修改相应的收罗设置,以此实现K8s内部AliyunLogConfig与日志服务中收罗设置的关联关系。
9.3.3 allibaba-log-controller内部实现

alibaba-log-controller重要由6个模块构成,各个模块的功能以及依靠关系如下图所示。

5.png
EventListener:负责监听AliyunLogConfig的CRD 资源。这个EventListener是广义上的Listener,重要功能有:

  • 初始化时会摆列全部的AliyunLogConfig资源。
  • 注册AliyunLogConfig监听厘革的事故。
  • 定期再扫描全部AliyunLogConfig资源,防止事故出现遗漏或处理失效。
  • 将事故打包,交由EventHandler处理。
    EventHandler:负责处理对应的创建、删除、修改事故,作为Controller的核心模块,重要功能如下:
  • 首先查抄ConfigMapManager中对应的Checkpoint,如该事故已经被处理(版本号雷同且状态为200),则直接跳过。
  • 为防止汗青时间干扰处理效果,从服务端拉去最新的资源状态,查抄是否为同一版本,若版本不划一,则使用服务端版本更换。
  • 对事故举行肯定的预处理,使之符合LogSDK的根本格式需求。
  • 调用LogSDKWrapper,创建日志服务Logstore,创建、删除、修改对应的设置。
  • 根据上述处理效果,更新对应的AliyunLogConfig资源的状态。
    ConfigMapManager:依靠于K8s的ConfigMap机制实现Controller的Checkpoint管理,包括:
  • 维护Checkpoint到ConfigMap的映射关系。
  • 提供基础的Checkpoint增编削查接口。
    LogSDKWrapper:基于阿里云LOG golang sdk的二次封装,功能包括:
  • 初始化创建日志服务资源,包括Project、MachineGroup、OperationLogstore等。
  • 将CRD资源转换为对应的日志服务资源操纵、CRD与日志服务资源为一对多关系。
  • 包装SDK接口,主动处理网络非常、服务器非常、权限非常。
  • 负责权限管理,包括主动获取role,更新STS Token。
    ScheduledSyner:背景的定期同步模块,防止进程或节点失效期间设置改动而遗漏事故,包管设置管理的最终划一性:
  • 定期革新全部的Checkpoint和AliyunLogConfig。
  • 查抄Checkpoint和AliyunLogConfig资源的映射关系,如果Checkpoint中出现不存在的设置,则删除对应的资源。
  • Monitor:alibaba-log-controller除了将当地运行日志输出到stdout外,还会将日志直接收罗到日志服务中,便于远程排查题目。收罗日志种类如下:

    • K8s内部非常日志
    • alibaba-log-controller运行日志
    • alibaba-log-controller内部非常数据(主动聚合)

9.4 总结

总体来说,阿里云K8s日志办理方案做到了以下三点:
首先打造了极致的不熟体验,用户只要一条下令、一个参数即可完成整个K8s集群的日志办理方案部署。
其次是支持更多设置方式,除原生控制台、SDK设置方式外,还支持通过CRD方式举行设置。
最后是与K8s无缝集成,收罗设置支持yaml方式部署,兼容K8s各种集成方式。
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-19 04:25, Processed in 0.166590 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表