针对K8S日志采集存在的采集目标多、弹性伸缩难、运维成本大、侵入性高、采集性能低等问题,在18年2月份日志服务和容器服务团队一起发布了阿里云Kubernetes日志解决方案。1分钟内即可完成整个集群部署,实现该节点上宿主机日志、容器日志、容器stdout等所有数据源的一站式采集。并且后续集群动态伸缩无需对采集做任何二次部署。
今天阿里云Kubernetes日志解决方案再次升级,为您带来以下改进:
阿里云的日志服务(log service)是针对日志类数据的一站式服务,2013年研发,有5年多线上运行经验,经历双十一、新春红包等考验。日志采集Agent Logtail运行在100W+机器上,为万级别应用提供服务。主要特点如下:
日志服务主要包括 实时采集与消费、数据投递、查询与实时分析 等功能,接下来我们介绍下如何利用日志服务进行Kubernetes日志采集。
阿里云Kubernetes日志采集方案如上图所示:
以CRD配置方式为例,内部工作流程如下:
kubectl
或其他工具应用aliyunlogconfigs CRD配置。阿里云Kubernetes用户只需一条命令即可完成日志采集部署,命令中只需输入一个参数。
${your_k8s_cluster_id}
替换为您的Kubernetes集群id,执行此命令。 wget http://logtail-release.oss-cn-hangzhou.aliyuncs.com/linux64/alicloud-log-k8s-install.sh -O alicloud-log-k8s-install.sh; chmod 744 ./alicloud-log-k8s-install.sh; sh ./alicloud-log-k8s-install.sh ${your_k8s_cluster_id}
日志采集配置默认支持控制台配置方式,同时针对Kubernetes微服务开发模式,我们还提供CRD的配置方式,您可以直接使用kubectl对配置进行管理或集成到其他编排服务。两种配置方式特点如下:
CRD方式 | 控制台方式 | |
---|---|---|
操作复杂度 | 低 | 一般 |
功能项 | 支持除控制台方式外的高级配置 | 一般 |
上手难度 | 一般 | 低 |
网络连接 | 连接Kubernetes集群 | 连接互联网 |
与组件/应用部署集成 | 支持 | 不支持 |
鉴权方式 | Kubernetes鉴权 | 云账号鉴权 |
如果您刚开始使用日志服务,建议使用控制台的配置方式,此种方式所见即所得,非常易于上手。
若后续您需要将日志采集与服务/组件发布集成,建议使用CRD的配置方式。可以直接将采集配置和服务配置放到同一个yaml文件部署和管理。
相比其他采集方案,日志服务Kubernetes采集方案具备以下优势:
在上一篇阿里云Kubernetes日志解决方案中我们对容器数据采集、自定义标识机器组等技术做了相关的介绍。本次主要为大家带来日志采集配置与K8S无缝集成的技术实现。
不同于其他开源日志采集Agent,日志服务Logtail从设计之初就已经考虑到配置管理的难题。因此Logtail从第一个版本发布就支持中心化的配置管理。支持在日志服务控制台或者SDK远程对所有采集配置进行统一管理,大大降低了日志采集的管理负担。
但在K8S集群环境下,业务应用/服务/组件的持续集成和自动发布已经成为常态,使用控制台或SDK操作采集配置的方式很难与各类CI、编排框架集成,导致业务应用发布后用户只能通过控制台手动配置的方式部署与之对应的日志采集配置。
因此日志服务专门为K8S进行了扩展,用以支持原始的配置管理。
如上图所示,日志服务为K8S新增了一个CustomResourceDefinition扩展,名为AliyunLogConfig
。同时开发了alibaba-log-controller
用于监听AliyunLogConfig
事件。
当用户创建/删除/修改AliyunLogConfig
资源时,alibaba-log-controller
会监听到资源变化,并对应的在日志服务上创建/删除/修改相应的采集配置。以此实现K8S内部AliyunLogConfig
与日志服务中采集配置的关联关系。
alibaba-log-controller
主要由6个模块组成,各个模块的功能以及依赖关系如上图所示:
EventListener:负责监听AliyunLogConfig
的CRD资源。这个EventListener是广义上的listener,主要功能有
AliyunLogConfig
资源AliyunLogConfig
监听变化的事件AliyunLogConfig
资源防止事件出现遗漏或处理失效EventHandler:负责处理对应的Create/Update/Delete事件,作为Controller的核心模块,主要功能如下:
AliyunLogConfig
资源的状态ConfigMapManager:依赖于K8S的ConfigMap机制实现Controller的checkpoint管理,包括:
LogSDKWrapper:基于阿里云LOG golang sdk的二次封装,功能包括:
ScheduledSyner:后台的定期同步模块,防止进程/节点失效期间配置改动而遗漏事件,保证配置管理的最终一致性:
AliyunLogConfig
AliyunLogConfig
资源的映射关系,如果checkpoint中出现不存在的配置,则删除对应的资源Monitor:alibaba-log-controller
除了将本地运行日志输出到stdout外,还会将日志直接采集到日志服务,便于远程排查问题。采集日志种类如下:
alibaba-log-controller
运行日志alibaba-log-controller
内部异常数据(自动聚合)阿里云日志服务本次带来的提升更进一步简化了K8S日志采集的上手门槛以及集成体验。让广大用户真正体验到一个字:爽,从此日志运维人员的生活质量大大提高。
目前Logtail除支持宿主机文件、容器文件、容器stdout采集外,还支持以下多种采集方式(这些方式k8s中均支持):
或是邮件反馈可也:
askdama[AT]googlegroups.com
订阅 substack 体验古早写作:
关注公众号, 持续获得相关各种嗯哼: