无服务器架构中的日志处理

作者:Daniel Berman

译者:海松

原标题:Logging in a Serverless Architecture

无服务器架构中的日志处理会遇到诸多挑战,让我们就此作一番探究,同时也了解 ELK Stack(使用 Kinesis Firehose)是如何解决这些问题的。

在我们以前的文章中,有一篇内容是关于 NASA 同一艘飞船进行通讯联系的,那艘飞船被派往火星,主要任务是研究和探测火星的气候、大气以及行星表面。最后,NASA 宣布与那艘火星气候探测飞船失去联系,而在此前的24 小时中,NASA 的工程师们曾想尽办法联系一个早已不存在的对象。

在无服务器架构运行模式下,函数及其容器在数秒钟内便完成开启和关闭,除非能及时捕捉,否则和上面提到的例子相似,我们将不可挽回地丢失其确定和不确定的状态以及其它信息。

无服务器架构促使开发人员编写出快速、独立和可执行的代码,这些代码由事件触发并驻留在临时容器内。不过,如果其中某一个函数未能如期运行会出现什么情况?DevOps团队人员如何确认相应事件是否激活了对应的函数?

在无服务器应用程序中,各服务趋于小型化且分工精确,这让追根溯源变得异常复杂。在查找故障源时,相关服务和这些服务的集成点可能根本不存在。当操作涉及超过一个函数时,查找故障源就像在黑夜中寻找猎物一般困难。

要查看无服务器应用程序的运行情况,以及故障时会发生什么,最重要的就是记录日志。

1.为什么需要进行无服务器日志处理?

对开发人员来说,日志的必要性是显而易见的,但具体到无服务器架构日志记录,仍有一些特殊情况需要考虑。

显然,当数个函数发生故障导致其无法提供所请求的功能时,为了能分析不同函数的日志,日志中必须包含事务唯一识别符,只有这样才能方便地发现和汇集事务。在无服务器应用程序内,相同的日志必须包含参与操作的所有函数的更多信息,包括响应值和运行次数。

如果一项函数在运行期间发生崩溃,其实例和容器在崩溃后也不复存在,那么崩溃日志记录对于了解问题所在至关重要。现在的关键是,我们如何记录下崩溃日志,我们又如何从一项业已失效的函数中得到这些日志呢?这就要求我们具备创造型思维。

有种值得注意的解决方案,即创建一个函数,它在另一项函数崩溃时会被触发,或者从根本上说,它与其他各函数是关联的。该函数负责收集容器中的所有信息,包括崩溃前的所有记录,由基础架构引发的事件可以触发该函数,而且通过配置可使其能够触发崩溃函数的另一个实例。利用这种方法,在无人工干预的情况下,通过对故障的及时响应和恢复,日志可以由无服务器应用程序实现自我维护。

无服务器日志在应用程序检查中还具有其它重要作用。当云应用程序遭到恶意软件或者黑客攻击时,利用日志可以轻而易举地检查服务负载、识别滥用服务的企图。在无服务器环境中,服务执行不但很短暂,而且它也将自动伸缩作为其目标,因此识别和处理上述攻击活动便成为一项现实的挑战。在攻击发生时,良好的规划、专业的日志记录以及合适的分析工具,可以识别出攻击类型,同时找出正在遭受攻击的函数并对其采取恰当的保护措施。

无服务器架构会面临另一个软件方面的重大问题——即无状态。有时各项函数的存续的时间仅为几秒钟,因其容器状态无法得以保留,从而造成在后续调用相同函数时,该函数无法访问之前运行的数据。对于这个问题,有一些不同的解决方案,其中有些方案要求集成外部工具,而另一些则要求实现一个专门设计的无服务器框架。

日志则可以相当轻松地解决这一问题。集中备份的函数日志起到了存储介质的作用,可以授权函数访问此前的运行数据,如果不这样处理,这些数据本来是要被丢弃的。函数可以基于先前的事件对应用程序状态作出评估,而非仅仅基于应用程序的当前状态。

2.那么,应该如何在

无服务器环境下记录日志呢?

通常,应用程序服务日志存放在其容器的本地磁盘内。当基于云的应用程序增长扩容之后,访问、管理和分析这些日志会是一件相当复杂的工作。如果不使用合适的工具,要遍历保存在几百台服务器上的数百份日志文件,来搜寻某个特定的错误,其困难可想而知。

所以一般需要使用基于文件复制或者 syslog 的技术,来制定中心化日志解决方案。在无服务器架构中,日志必须存放于中心服务器,以便于在函数和容器关闭后还能够保存并分析其数据。

以 AWS Lambda 为例,作为一套中心化的日志管理解决方案,ELK Stack用于采集和分析函数日志。ELK Stack(Elasticsearch、Logstash 和Kibana)不仅使DevOps团队具备了采集、储存和分析日志的能力,还可以据此构造出视图或者数字仪表盘,以突出显示重要信息,来为函数实现及功能提供决策上的依据。

由于能够提供清晰的应用程序状态视图,并能协助有关人员对相关故障点进行追根溯源,ELK Stack中的三大组件在许多 IT 组织得到了广泛应用。

2015 年岁末,AWS 推出了一项名为 Kinesis Firehose 的数据采集和传输解决方案,该方案允许用户从应用程序内的所有日志中采集数据,并将这些数据传输至 Amazon S3 或者 Redshift。

Elasticsearch 为原始数据建立索引并对这些数据进行分析,用户借此可以查询到任何重要的业务信息。Kibana 根据预定义的规则,将结果直观地呈现给用户,因此组织内的不同团队可以获得生产环境所需的特定视图。

在无服务器架构中,一套基础 EKK(Elasticsearch、Kibana 和 Kinesis)Stack 应该如下图所示:

作为替代方案,如果您不希望管理AWS 上的 Elasticsearch 和Kibana,可将Kinesis Firehose 构造的日志流传输到 Logz.io 的S3服务,实现Kinesis Firehose 同诸如 Logz.io 的这样的托管式 ELK 解决方案的结合。该项解决方案可向您提供全套的管理服务,您则无需关心Elasticsearch 伸缩、解析函数日志或者 保护Kibana 安全等管理任务。

3.结论

尽管减少了维护工作量、实现了可伸缩性规划、降低了服务器管理成本,但在调查系统故障、查找故障原因中引入无服务器应用程序,对于研发人员和运维开发人员来说仍是一项新挑战。日志显示了各函数和其容器的功能和二者间的关系。我们必须利用各种专用工具才能将所有信息从生产环境传输至研发团队,以帮助他们完成维护任务。

必须将无服务器日志的采集和对分析工具的流传输当作函数执行的一部分,只有这样我们才能在容器关闭后不会丢失数据。鉴于无服务器架构鼓励快速执行,日志采集任务也必须随之做到迅速及时。很多无服务器开源框架(主要是 AWS Lambda,也包括 Azure Functions)都深知这种复杂性,因此它们都带有日志采集解决方案。尽管如此,以上方案均不够简单,所以在无服务器构架中的日志处理技术依旧任重而道远。

原文链接https://logz.io/blog/logging-serverless-architecture/

关于作者

丹尼尔·伯曼(Daniel Berman)是Logz.io的产品传播者。他热衷于日志分析、大数据、云计算、家庭,爱好跑步、利物浦足球俱乐部,以及写写关于颠覆性高科技东西的文章。在推特上@proudboffin关注他。

原文发布于微信公众号 - EAWorld(eaworld)

原文发表时间:2017-09-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏WeTest质量开放平台团队的专栏

5天2亿活跃用户,2017QQ“LBS+AR”天降红包活动后台揭密

作者王家彬,腾讯后台开发工程师,参与“LBS+AR”天降红包项目,其所在“2016春节红包联合项目团队”获得2016公司级业务突破奖。

1663
来自专栏林喜东的专栏

你的账号安全吗?

账号安全无小事,近些年持续不断爆出的安全事件,有很多低级错误其实都是拥有一个健壮的账号体系可以避免的;多次听闻后曾写一写账号安全相关的东西,但直...

2684
来自专栏北京马哥教育

Python爬虫爬取知乎小结

最近学习了一点网络爬虫,并实现了使用Python来爬取知乎的一些功能,这里做一个小的总结。网络爬虫是指通过一定的规则自动的从网上抓取一些信息的程序或脚本。我们知...

2784
来自专栏HappenLee的技术杂谈

数据系统的未来------《Designing Data-Intensive Applications》读书笔记17

对于任何给定的数据问题,总会有多种解决方案。所有这些解决方案都会有不同的优缺点和权衡。因此,最合适的软件工具选择也要视情况而定。每一个软件,甚至一个所谓的“通用...

1422
来自专栏Seebug漏洞平台

Sebug 大牛支招之我是如何在Sebug中杀入前10的?

大家好我是koshell,ID:k0sh1, 在之前的文章中我分享了在web漏洞挖掘中的一些小技巧,这里要补充一下。 注入其实只是众多web入侵手段中的一种,脱...

3847
来自专栏vue+shiro

基于vue(element ui) + ssm + shiro 的权限框架

现在的Java世界,各种资源很丰富,不得不说,从分布式,服务化,orm,再到前端控制,权限等等玲琅满目,网上有句话说,语言框架迭代太快了,我学不动了,不如回去搬...

1K2
来自专栏Flutter入门到实战

开发工具总结(9)之开源项目的README文档的最全最规范写法

版权声明:本文为博主原创文章,未经博主允许不得转载。https://www.jianshu.com/p/813b70d5b0de

1201
来自专栏张善友的专栏

别再设计易碎的Web API

原文作者Mathieu Fenniak在博文中大呼:不要再设计易碎的Web API 了,否则你的合作伙伴或第三方开发者会因此恨你,而离你远去的。他认为,想设计出...

2168
来自专栏BestSDK

从绘制到工具,一套完整的产品经理制图干货

很多人拿到需求就火急火燎的开始画原型,然后画着画着觉得有些地方没有考虑到,又回头去改,如果在画原型之前,你能将自己的业务流程想好,用户的操作流程想好,页面跳转想...

2824
来自专栏张善友的专栏

让应用程序与您形影相随-PortableApps.com

作为一名 IT 专业人员,您可能会经常需要从一台计算机移到另一台计算机。当您这样做时,您可能会希望能拥有一组随时可用的标准应用程序、工具和文档。满足这些需求的一...

2165

扫码关注云+社区

领取腾讯云代金券