全面提升,阿里云Docker/Kubernetes(K8S) 日志解决方案与选型对比

摘要: 今天,日志服务再次升级Kubernetes(k8s)的日志解决方案。1分钟内即可完成整个集群部署,支持动态扩容,提供采集宿主机日志、容器日志、容器stdout等所有数据源的一站式采集。

点此查看原文: http://click.aliyun.com/m/42852/

背景

众所周知,Docker很火,Docker中Kubernetes(简称k8s)最火。相对物理机、VM,Docker提供了更加简单、轻量、高性价比的部署与运维方法;而k8s在Docker之上,更进一步提供了对管理基础设施的抽象,形成了真正意义上的一站式部署与运维方案。

k8s提供了强有力工作调度、水平扩展、健康监测、维护高可用性等能力,同时提供了网络、文件系统的抽象与管理,所以对于已有应用上k8s或者基于k8s部署应用十分便捷。但这里有一部分令开发和运维人员比较头疼--日志采集。

难点分析

基于VM或者物理机部署的应用,日志采集相关技术都比较完善,有比较健全的Logstash、Fluentd、FileBeats等。但在Docker中,尤其在k8s中,日志采集并没有很好的解决方案,主要原因如下:
  1. 采集目标多:需要采集宿主机日志、容器内日志、容器stdout。针对每种数据源都有对应的采集软件,但缺乏一站式解决方案。
  2. 弹性伸缩难:k8s是一个分布式的集群,服务、环境的弹性伸缩对于日志采集带来了很大的困难,采集的动态性以及数据完整性是非常大的挑战。
  3. 运维成本大:现有的方案只能使用多种软件组合采集,各个软件组装起来的系统稳定性难以保障,且缺乏中心化的管理、配置、监控手段,运维负担巨大。
  4. 侵入性高:Docker Driver扩展需要修改底层引擎;一个Container对应一个采集Agent又会产生资源竞争和浪费。
  5. 采集性能低:正常情况下一个Docker Engine会运行数十个甚至数百个Container,此时开源Agent日志采集性能以及资源消耗十分堪忧。

基于阿里巴巴多年来容器服务日志采集的经验积累,并结合阿里云Kubernetes内测以来广大用户的反馈与诉求,今天,日志服务为k8s带来真正意义上的一站式日志解决方案。

方案介绍

方案简介

如上图所示,我们只需要在Kubernetes集群中的每个节点上部署一个Logtail的容器,即可实现该节点上宿主机日志、容器日志、容器stdout等所有数据源的一站式采集。我们针对k8s提供了DaemonSet部署模板,1分钟内即可完成整个集群部署,并且后续集群动态伸缩无需对采集做任何二次部署。具体请参见使用方式章节。

日志服务客户端Logtail目前已有百万级部署,每天采集上万应用、数PB的数据,历经多次双11、双12考验。相关技术分享可以参见文章:多租户隔离技术+双十一实战效果Polling + Inotify 组合下的日志保序采集方案

依托阿里云日志服务强大的功能,对于采集到的日志数据,我们提供:
  1. 上下文查询,从茫茫数据中快速定位异常数据,并支持定位异常所在Container/Pod的上下文日志
  2. 实时的海量数据分析,1秒即可完成1亿条数据的统计分析
  3. 自带报表、告警功能,老板、开发、运维全搞定
  4. 流计算对接:storm、flink、blink、spark streaming等等都支持
  5. 外接可视化:Grafana、DataV轻松对接
  6. 日志归档投递:支持投递OSS归档存储,也支持投递MaxCompute进行离线分析

采集方案优势

关于日志服务整体的优势这里不再赘述,本文主要探讨日志服务Kubernetes采集方案的相关优势。这里我们主要总结了以下几点:
方案对比
相对Logstash、Fluentd主流日志采集方式,对比如下:
  logtaillogstashfluentd
采集方式宿主机文件支持支持支持
 container文件支持自动发现静态采集静态采集
 container stdout支持自动发现插件扩展Docker driver
数据处理处理方式正则、anchor、分隔符、json任意组合插件扩展插件扩展
 自动打标支持不支持k8s不支持k8s
 过滤正则插件扩展插件扩展
配置自动更新支持手动加载支持
 服务端配置支持Beta版本支持简单功能辅助管理软件扩展
性能采集性能极简单核160M/s、正则20M/s单核2M/s左右单核3-5M/s
 资源消耗平均CPU 2%、内存 40M10倍以上性能消耗10倍以上性能消耗
可靠性数据保存支持插件支持插件支持
 采集点位保存所有均支持只支持文件插件支持
监控本地监控支持支持支持
 服务端监控支持Beta版本支持简单功能辅助监控软件扩展

使用方式

部署k8s的日志采集只需分为3个步骤,1分钟内即可完成集群部署(详细帮助文档参见[k8s采集帮助]()),这可能是你见过的最简单的k8s日志采集部署方案:
  1. 部署Logtail的DaemonSet。体力消耗:一条wget名,vi 修改3个参数,执行一条kubectl命令
  2. 日志服务控制台创建自定义标识机器组(后续集群动态伸缩无需额外操作)。体力消耗:web控制台点击几次,输入一个ID
  3. 日志服务控制台创建采集配置(所有采集均为服务端配置,无需本地运维)。体力消耗:stdout采集 web控制台点击几次;文件采集 web控制台点击几次,输入2个path
  • 除k8s外,日志服务还支持标准docker部署方式

核心技术简介

自定义标识机器组

日志采集支持k8s弹性伸缩的关键就是Logtail的自定义标识机器组。通常采集Agent远程管理的方案都以IP或者hostname作为标识,此方案在集群规模较小以及环境变化性不强的情况下较为适用,当机器规模扩大、弹性伸缩成为常态时运维成本承指数级升高。

基于集团内数年来的Agent运维经验总结,我们设计了一种灵活性更高、使用更加便捷、耦合度更低的配置&机器管理方式:
  1. 机器组除支持静态ip设置外,也支持自定义标识的方式:所有Logtail只要定义了该标识则自动关联到对应的机器组。
  2. 一个Logtail可属于多个机器组,一个机器组可包含多个Logtail,实现Logtail与机器组的解耦。
  3. 一个采集配置可应用到多个机器组,一个机器组可关联多个采集配置,实现机器组与采集配置的解耦。

以上概念映射到k8s中,可实现各种灵活的配置:
  1. 一个k8s集群对应一个自定义标识的机器组。同一集群的Logtail使用相同配置,k8s集群伸缩时对应Logtail的DaemonSet自动伸缩,Logtail启动后立即就会获取和该机器组关联的所有配置。
  2. 一个k8s集群中配置多种不同采集配置。根据不同Pod需求设置对应的采集配置,所有涉及容器采集的配置均支持IncludeLabelExcluseLabel过滤
  3. 同一配置可应用到多个k8s集群。如果您有多个的k8s集群,若其中有部分服务日志采集逻辑相同,您可以将同一配置应用到多个集群,无需额外配置。

容器自动发现

Logtail和很多软件(Logspout、MetricBeats、Telegraf等)一样内置了容器的自动发现机制。当前开源的容器自动发现均采用一次扫描+事件监听的方式,即:初次运行时获取当前所有的容器信息,后续监听docker engine的事件信息,增量更新信息。

此种方式效率相对最高,但有一定概率遗漏部分信息:
  1. 获取所有容器信息到docker engine事件监听建立期间的这部分的增量信息会丢失
  2. 事件监听可能会因为某些异常情况而终止,终止后到监听重新建立期间的增量信息会丢失
考虑以上问题,Logtail采用了事件监听与定期全量扫描的方式实现容器的自动发现:
  1. 首先注册监听事件,其次再全量扫描
  2. 每隔一段时间执行一次全量扫描,全量更新meta信息(时间间隔高到对docker engine压力无影响)

容器文件自动渲染

容器日志采集只需要配置容器内的文件路径,并且支持各种采集模式:极简、Nginx模板、正则、分隔符、JSON等。相对传统的绝对路径采集,容器内日志采集动态性极强,为此我们专门实现了一套容器路径的自动匹配与配置渲染方案:
  1. Logtail会根据配置的容器路径,查找容器对应路径在宿主机上的映射关系
  2. 根据宿主机路径以及容器的元数据信息(container name、pod、namespace...)渲染出正常的采集配置
  3. Logtail文件采集模块加载渲染的配置并采集数据
  4. 当容器销毁时删除相应渲染的配置

可靠性保证

日志采集中的可靠性保证是非常重要也非常困难的工作。在Logtail的设计中,进程退出、异常终止、程序升级被认为是常态,在这些情况发生时Logtail需尽可能保证数据的可靠性。针对容器数据采集的动态特点,Logtail在之前可靠性保证的基础上,新增了容器标准输出以及容器文件的checkpoint维护机制

容器标准输出checkpoint管理

  1. 容器stdout和stderr的checkpoint独立保存
  2. checkpoint保存策略:定期dump所有容器当前的checkpoint;配置更新/进程退出时强制保存
  3. 配置加载时,默认从checkpoint处开始采集,若无checkpoint,则从5秒前采集
  4. 考虑到配置删除时并不会删除checkpoint,后台定期清除无效checkpoint

容器文件checkpoint管理

  1. 除文件采集的checkpoint需保存外,还需保存容器meta的映射关系
  2. checkpoint加载前需提前加载容器与文件之间的映射关系
  3. 考虑到停止期间无法感知容器状态变化,所以每次启动时会渲染所有当前的配置。Logtail保证多次加载同一容器配置的幂等性。

总结

阿里云日志服务提供的解决方案完美地解决了k8s上日志采集难的问题,从之前需要多个软件、几十个部署流程精简到1款软件、3个操作即可轻松上云,让广大用户真正体验到一个字:爽,从此日志运维人员的生活质量大大提高。

扫码获取更多资讯:


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言几种排序方法的比较,基于C语言的几种排序方法比较.doc

基于C语言的几种排序方法比较.doc基于C语言的几种排序方法比较 【摘要】文章对c语言中的冒泡排序法、选择排序法、插入排序法进行比较讨论,以试图找出最佳排序方法。 【关键词】c语言;排序方法;比较 引言 排序是计算机程序设计中的一种重要操作,其作用是…

JFinalOA导出Excel

JFinalOA导出Excel https://blog.csdn.net/qq_39237801/article/details/87818130

51单片机音乐播放器c语言,51单片机之简单的音乐播放器

/*************************************************************音乐播放器:按键 0 - 9 对应最多10首乐曲,当一首乐曲播放完毕后,响应按键的动作去播放相应的音乐,另外,右、下这两个按键对应着下一首,左上…

再次“重新定义” 华为争做数据基础设施领航者

戳蓝字“CSDN云计算”关注我们哦!数字经济是随着信息技术革命发展而产生的一种新的经济形态。近年来,随着我国开始更多从经济视角观察数字化问题,数字经济开始升温。7月31日,国家统计局发布2018年我国经济发展新动能指数。测算结果…

《阿里巴巴Android开发手册》正式发布,献给移动开发者的新年礼物

春节余味尚未消,我们为移动开发者准备了一份迟到的新年礼物——《阿里巴巴Android开发手册》,继《阿里巴巴Java开发手册》之后,阿里巴巴开发规范家族又添一丁,「阿里巴巴Android开发规范」认证考试也同步上线。 手册免费下载&…

搜索引擎背后的原理和中文日志检索

摘要: 日志服务支持的两种搜索方式 通过设置分词字符(通常是标点符号),把一段文本划分成不同的单词。分词字符只能是单字节ascii字符这种方式适合于切分英文单词。这种方式对于中文日志,必须要搜索中文语句整体。 点此查看原文:ht…

解决在已办任务菜单中都会抛出异常,由于definitionId=undefined导致的问题

任务办理完了,在已办任务(历史)菜单中,查看一下任务办理的节点信息不为过吧, 其实,也是那个definitionIdundefined导致的,也是由于获取的对象不对,这里我直接修改程序。 解决方案: //修改后…

华为高通5G华山论剑,一文看懂5G芯片背后的明争暗斗

戳蓝字“CSDN云计算”关注我们哦!来源:鲜枣课堂作者:小枣君 6月6日工信部正式发放5G商用牌照之后,国内5G网络建设的步伐大幅加快了。越来越多的城市出现了5G基站和5G信号,5G离我们的距离更近了。面对激动人心的5G&…

c语言正确理解以下名词及其含义,C程序作业答案.doc

C程序作业答案.doc什么是程序及程序设计 程序(program)是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合。为实现预期目的而进行 操作的一系列语句和指令。一般分为系统程序和应用程序两大类。程序设计Programming是指设计、编制、调试程 序的方法和过程。它…

阿里云NAS备份服务

摘要: 阿里云NAS(Network Attached Storage)是一款高可靠高可用高性能的分布式存储产品,应用场景包括ECS、HPC、Docker等共享存储。目前已经有大量的客户使用NAS作为他们的数据存储,其中包括今日头条、Ofo这样的大型互…

win10默认壁纸_仅4M!微软出品的壁纸软件,让桌面每天都不一样!

有一张好看的壁纸,看起来都非常的舒服,不管是手机还是电脑。现在市面上的壁纸软件非常多,小助手用了几款都觉得很一般,所以都没有大家推荐。但上个月,微软官方出品了一款电脑壁纸软件「Bing Wallpaper」,简…

第8篇:Flowable快速工作流脚手架Jsite_请假实战_查看历史任务

节点流转结束了,jsite发起流程的执行人,查看一下历史任务应该吧。 先追踪一下流程详情 很明显又是这个问题,大家应该知道怎末改了吧, 再次测试

AMD 发布第二代EPYC处理器,重新定义数据中心新标准

2019 年8 月7 日,旧金山讯——AMD 公司今日召开发布会,在空前壮大的数据中心产业链合作伙伴和客户的见证下,正式发布了第二代 AMD EPYC(霄龙)系列处理器,为众多企业级、云和高性能计算(HPC)工作负载带来领先…

获取当前系统时间c语言,使用C语言获取当前系统的时间

要想使用C语言来获取当前系统的时间,办法如下:需要提前准备的工作:1 #include 2 #include 3 #include 45 intmain()6 {7 time_t rawtime; //时间类型,由time.h中定义8 struct tm *timeinfo; //关于时间的结构体类型,在…

苹果手机悬浮窗怎么打开_怎么通过悬浮窗录音?再也不用担心文本被遮挡

怎么通过悬浮窗录音?在录音的时候经常遇到这种情况,打开了录音软件,录音软件就遮挡了要录制的文本,将文本缩小看起来又很不方便。在生活中,这种情况其实很普遍,主要是因为录音软件没有选择好。在浏览器搜索…

AliOS Things SIG BLE Mesh网络的介绍和搭建

摘要:在最新的版本(1.2.1)中,AliOS Things 开始支持SIG BLE mesh。本文对SIG BLE mesh及如何使用AliOS Things搭建BLE mesh网络进行了详细的说明。点此查看原文:http://click.aliyun.com/m/42946/在最新的版本(1.2.1)中,AliOS Thi…

联想ThinkPad笔记本Fn键关闭与启用方法

最快捷的方法,按FnEsc键启用Fn功能键

android图标错误的是什么意思啊,Android错误:找不到与给定名称匹配的资源(在icon处,值为@drawable/icon) - Android - srcmini...

本文概述将旧版本的项目导入Android Studio时, 似乎会导致此错误, 然后Android Studio会将gradle版本更新为最新版本, 从而导致该错误。对于具有旧版本gradle的Cordova项目, 这似乎也发生了, 当你使用cordova平台删除旧的android平台时, 请删除android, 然后使用cordova平台重新…

02年六代雅阁的整备质量_2020年宝安第八批更新计划:联投地产5.4万㎡“工改”项目...

今日(10月22日),宝安区更新整备局发布关于《2020年深圳市宝安区城市更新单元第八批计划》(草案),共2个工改项目,即大田洋工业区东方三队、四队片区更新项目、沙民马安山工业区更新项目,合计拆除用地面积112446㎡。龙华区更新整备局…

被吹得天花乱坠的无服务器架构,究竟是什么?

戳蓝字“CSDN云计算”关注我们哦!无服务器计算(Severless computing,简称 Serverless)现在是软件架构圈中的热门话题,国外三大云计算供应商(Amazon、Google 和 Microsoft)都在大力投入这个领域&…