摘要: 今天阿里云Kubernetes日志解决方案再次升级,为您带来如下改进: 一、极致部署体验:只需一条命令一个参数便可完成整个K8S集群的日志解决方案部署。 二、支持更多配置方式:除原生控制台、SDK配置方式外,支持经过CRD方式进行配置(kubectl、控制台、K8S openapi)。html
针对K8S日志采集存在的采集目标多、弹性伸缩难、运维成本大、侵入性高、采集性能低等问题,在18年2月份日志服务和容器服务团队一块儿发布了阿里云Kubernetes日志解决方案。1分钟内便可完成整个集群部署,实现该节点上宿主机日志、容器日志、容器stdout等全部数据源的一站式采集。而且后续集群动态伸缩无需对采集作任何二次部署。linux
今天阿里云Kubernetes日志解决方案再次升级,为您带来如下改进:golang
阿里云的日志服务(log service)是针对日志类数据的一站式服务,2013年研发,有5年多线上运行经验,经历双11、新春红包等考验。日志采集Agent Logtail运行在100W+机器上,为万级别应用提供服务。主要特色以下:sql
日志服务主要包括 实时采集与消费、数据投递、查询与实时分析 等功能,接下来咱们介绍下如何利用日志服务进行Kubernetes日志采集。
docker
阿里云Kubernetes日志采集方案如上图所示:api
以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对配置进行管理或集成到其余编排服务。两种配置方式特色以下:app
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中均支持):