Cloudflare
提供内容传递网路及安全服务的Cloudflare本周坦承,该公司在11月14日,因为内部系统一连串的臭虫,在短短5分钟的错误配置中,便遗失了55%的客户日志。
Cloudflare的网路是由分布在全球330个城市的系统组成,它们支援多项服务,且系统的每个部分都会产生事件日志,并将它们传送给客户,供客户执行合规性管理、系统观察,或是会计。Cloudflare平均每天会处理50兆个客户事件日志,但仅有不到10%、约4.5兆个会传送给客户。
Cloudflare的日志处理架构,包括负责从全球伺服器接受并批量转发日志的Logfwdr,接收批量日志并进一步将它们分配至缓冲区的Logreceiver,管理超过100万个日志缓冲区的Buftee,以及将日志推送到客户指定地点的Logpush。
在11月14日那天,为了支援新的资料集以处理额外的日志类型,Cloudflare更新了Logpush的配置,配置系统需要将此一配置传送给Logfwdr,但配置系统传送给Logfwdr的档案却是空白的,因而触发了Logfwdr内部的「故障开放」(Fail Open)机制。
该机制是一种系统设计策略,在发生故障时,系统预设选择开放状态,亦即宁可多做也不要停止服务,在Cloudflare的日志系统上发生时,它便选择替所有的客户发送日志。
尽管Cloudflare很快就发现此一错误,并在5分钟内恢复了该变更,但Logfwdr已根据Fail Open发送日志予大量客户,而Buftee原本有防护机制,却因配置问题而未被正确启用,导致Buftee所管理的日志缓冲区数量,很快就从一百多万个快速增加到4,000万个。
图片来源/Cloudflare
只有短短5分钟的错误配置便造成了巨大的过载,导致底层系统过载而无法正常运作,需要全面的重置与重新启动。这起意外从配置系统出错、Fail Open的设计、Buftee的保护机制未被启动,一直到复原,总计持续了3.5个小时,造成Cloudflare原本应该发送给客户的日志中,有55%并未发送而且完全遗失。
Cloudflare表示,大规模系统中的故障是无可避免的,但子系统必须具备自我保护机制,以防止来自其它部分的故障引发连锁反应,在此次的事故中,系统某部分的配置错误导致了另一部分的过载,而另一部分的系统亦存在著配置问题,如果正确的配置,即可避免日志遗失。