集装箱时代的分布式记录(第3部分)

你参加集装箱革命吗?开始利用Platform9对Kubernetes部署的最终指导来利用容器管理 。

所以,我们已经看到了微服务和容器在日志记录方面的问题。我们还介绍了如何为您的项目选择正确的聚合体系结构可以提供帮助。但现在,我们要看看实现这一目标的工具 - Fluentd。

锁和密钥:Docker + Fluentd

Treasure Data首席架构师Sadayuki Furuhashi开发并开放了  Fluentd  框架。Fluentd是一个数据收集系统 - 一个像syslogd一样的守护进程,它监听来自服务的消息并以各种方式路由它们。但是与syslogd不同的是,  Fluentd是从微服务统一日志源的,因此可以有效地用于生产和分析。在收集器或聚合器模式下可以使用相同的性能代码,只需对配置进行一次调整即可,因此在整个系统中进行部署非常简单。

由于Fluentd在Docker Machine上本机支持,因此可以收集所有容器日志,而无需在单个容器中运行任何“代理”。只需使用“-log-driver = fluentd”选项启动Docker容器,并确保主机或指定的“日志”容器运行Fluentd。这种方法确保大多数容器可以运行“精简”,因为不需要在源容器上安装日志代理。

Fluentd的轻量和可扩展性使其适用于在“扩展”或“扩展”配置中汇总源端和目标端的日志。再次,哪种味道最适合你,取决于你现在的设置和你未来的需求。我们来看看每一个。

简单转发+扩展

为了便于安装,很难 在应用程序中从Fluentd记录器库中包含几行配置代码,  并且可以即时启用每个容器的单个Fluentd实例的直接日志转发。因为它几乎毫不费力,对初创企业来说,这可能是一个很大的好处,通常这些企业只有少量的服务和数据量,可以存储在标准的MySQL数据库中,并且只有少量的并发连接。

但是冒着严重死马的风险,这样的系统可以扩展多少是有限度的。 如果你的创业真的起飞呢? 根据数据驱动您的业务的方式,您可能需要事先投入实施(或考虑  将问题外包给托管数据基础架构堆栈),以避免以后发生恐慌攻击。

源聚合+扩展

另一种可能的配置是使用Fluentd汇总源代码,并使用Fluentd的400多个社区贡献的插件之一将汇总的日志发送到NoSQL数据存储区。 这个例子我们来看看  Elasticsearch,因为它很受欢迎。这种配置(使用Kibana进行可视化)称为  EFK堆栈,例如  Kubernetes  运行。这是相当简单的,它适用于中等数据量。通常。

Elasticsearch的一个警告:作为一个很好的搜索平台,作为数据基础架构的核心组件,它  并不是最佳选择。 当您尝试加载大量的重要数据时尤其如此。在生产规模上,Elasticsearch已被证明存在关键的摄入问题,包括导致数据丢失。在EFK配置中,由于Fluentd在源上而不是目的地上进行聚合,因此如果商店丢弃数据,则无法执行此操作。

对于生产规模分析,您可能会考虑更容错的平台,如  Hadoop  或Cassandra,这两个平台都针对大容量写入负载进行了优化。

源/目标聚合+扩展

如果您需要处理大量的复杂数据,最好的办法是同时设置源端和目标端汇聚节点,并利用Fluentd的各种配置模式  。通过与Docker绑定的  Fluentd日志记录驱动程序,您的应用程序可以将其日志写入STDOUT。Docker会自动将它们转发到本地主机上的Fluentd实例,然后聚合并通过TCP将它们转发到目标端Fluentd聚合器。

这就是Fluentd的力量和灵活性真正进入自己的地方。在此体系结构中,默认情况下,Fluentd使用自动故障转移实现循环负载平衡。这有助于向外扩展体系结构,因为每个新节点都由下游实例提供负载平衡。此外,内置的  缓冲架构  为其在传输过程的每个阶段提供了自动防故障保护,防止数据丢失。它甚至包括自动损坏检测(启动上传重试,直到完整的数据集被传输),以及重复数据删除API。

什么配置适合你?

这取决于你的预算和你必须移动多快。你是一个资源匮乏的启动处理少量的数据?您可能能够直接从源代码转移到单个节点的MySQL数据库。如果您的需求比较温和,而不需要进行故障安全数据捕获,那么EFK堆栈就足够了。

然而,随着各种规模的组织变得更加以数据为导向,值得花时间考虑您的长期目标。当你每天开始处理数十亿个事件时,你需要确保你的数据管道不会窒息吗?您希望将来可以添加的任何数据源的最大可扩展性?那么你可能想要考虑实现源和目的地聚合。你的未来的自我(和同事)会感谢你,当你的数据量开始爆炸。

无论您的配置如何,Fluentd的简单性,可靠性和可扩展性使其成为数据转发和聚合的绝佳选择。而且它内置Docker的事实使得它对于任何基于微服务的系统来说都是不容小觑的。

原文链接:https://dzone.com/articles/distributed-logging-in-the-container-era-part-3

原文作者:Glenn Davis

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CSDN技术头条

PHP 7.0.0正式版来了

PHP团队宣布PHP 7.0.0上线了。这是PHP7新系列开始的标志。 以下为官方发布稿: PHP 7.0.0 带来了新版本的Zend引擎,不仅如此,还有许多新...

1889
来自专栏Golang语言社区

Go语言API开发框架 PhalGo

前言 PhalGo是一个Go语言开发的一体化开发框架,主要用于API开发,因为使用ECHO框架作为http服务,MVC模式一样可以使用,牛顿曾经 说过"如果我比...

3915
来自专栏FreeBuf

地方商业银行APP安全性分析

0x00、业务需求 国内133家地方商业银行作为商业领域国外IT厂商和商家必争之地,无论是IT基础设施建设、容灾备份系统建设、还是信息安全建设等,各家银行都做的...

2046
来自专栏大数据钻研

谷歌的代码管理

谷歌和 Facebook 都只有一个代码仓库,全公司的代码都放在这个库里。 我一直很困惑,为什么要这样做,不同语言的项目放在一个库有什么好处? 最新一期的《AC...

3277
来自专栏携程技术中心

Ctrip·Tech——架构师一席谈(2)Zookeeper在分布式应用中的作用

是不是要在标题的“作用”之前加上“重要”两个字,我犹豫了一下,zookeeper提供的功能是如此的重要,以至于如果你在应用中不使用它,早晚也会在你的应用中去实现...

1789
来自专栏IT技术精选文摘

当代码变更遇上精准测试的总结

敏捷模式下迭代频繁,回归测试时总是不知道变动的范围。Devlop 有的时候也不知道他改了哪些东西,影响到哪些节点,或者是很多人改的,彼此不知道。遇到有代码洁癖的...

1165
来自专栏数据和云

【全局出发,追根溯源】一则集群故障案例分析

作者简介: ? 董冰,混迹DBA圈子十余载的闲云野鹤,曾服务过政府行业、银行数据中心、互联网游戏上市公司,辗转蛰伏于中国铁塔,励志做一个社会主义的螺丝钉。 故...

3286
来自专栏安智客

Google Keybox功能与TEE关系介绍

昨天介绍了Keystore功能,今天来普及一下Keybox。这个也与可信执行环境TEE有着密切的关系! Keybox就是Android的密钥箱功能,用于解密受D...

42510
来自专栏高性能服务器开发

11 一种高性能网络游戏服务器架构设计

网络游戏的结构分为客户端与服务器端,客户端采用2D绘制引擎或者3D绘制引擎绘制游戏世界的实时画面,服务器端则负责响应所有客户端的连接请求和游戏逻辑处理,并控制...

1012
来自专栏一个小程序员的成长笔记

Bug 级别定义标准

852

扫码关注云+社区