全面提升,阿里云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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

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

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

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

阿里云NAS备份服务

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

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

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

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

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

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

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

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…

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

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

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

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

idea配置的导入导出

摘要:每当更新了工具,或者其他电脑想使用idea工具,配置不可能重新配置,这时只要把已配置好的导出来,打开新的idea时,直接导入即可。 文章目录一、导出配置二、导入配置一、导出配置 打开工具,找…

基于阿里云移动推送的移动应用推送模式最佳实践

摘要:### 一、概念 以下概念对应系统设计时的语义,对于如何合理使用移动推送有借鉴意义 #### 1.1 设备 安装并使用开发者移动应用的装置 #### 1.2 设备ID 阿里云移动推送为设备分配的唯一ID,可以通过阿里云移动推送SDK端提供的接口获取 点此阅…

android 底部滑动效果怎么做,Android实现简单底部导航栏 Android仿微信滑动切换效果...

android仿微信滑动切换最终实现效果:大体思路:1. 主要使用两个自定义view配合实现; 底部图标加文字为一个自定义view,底部导航栏为一个载体,根据需要来添加底部图标;2. 底部导航栏的设置方法类似于tablayout的关联,view需要创建关联方法,用来关联viewpag…

cgi进程设置多少 宝塔_宝塔面板安装完的一些列操作

推荐教程虚拟机建站总目录 - 辉哥博客​www.haah.net前言新安装的宝塔会有很多地方需要配置,如果懂的大佬可以跳过,如果是小白可以按照辉哥的教程一步步操作,辉哥是以虚拟机进行操作的,但是服务器也是一样的道理!安全入…

白话中台战略:中台是个什么鬼?

戳蓝字“CSDN云计算”关注我们哦!来源:健荐作者:王健从去年开始,好像就有一只无形的手一直将我与“微服务”、“平台化”、“中台化”撮合在一起,给我带来了很多的困扰和思考与收获。故事的开始源于去年的技术雷达峰会…

用WEB技术栈开发NATIVE应用(二):WEEX 前端SDK原理详解

摘要: WEEX依旧采取传统的web开发技术栈进行开发,同时app在终端的运行体验不输native app。其同时解决了开发效率、发版速度以及用户体验三个核心问题。那么WEEX是如何实现的?目前WEEX已经完全开源,并捐给Apache基金会&#xff0c…

cad查看_CAD与天正软件对齐命令实例讲解

好课推荐:1、CAD2014:点击查看 2、室内&全屋:点击查看 3、CAD2019:点击查看4、CAD2018:点击查看5、Bim教程:点击查看 6、室内手绘:点击查看7、CAD三维:点击查看8、全屋定制&…