随着 Serverless 技术的不断发展,越来越多的应用开始采用 Serverless 架构,Serverless 应用的优势也变得越来越明显。但是,Serverless 应用的日志采集却是一个比较复杂的问题,这篇文章将重点介绍如何实现 Serverless 应用的日志采集。
Serverless 应用的日志采集问题
在传统的应用架构中,我们通常可以通过日志文件来记录应用的运行状态和错误信息。但是,在 Serverless 应用中,没有服务器可以直接访问,也不存在一个明确的操作系统或文件系统,因此采集日志会面临许多困难。
虽然 Serverless 平台都提供了一些日志查询和分析的功能,但是这些功能往往不能满足实际需求,比如:
- 集中式日志分析:某些场景下需要将多个 Serverless 应用的日志汇总到一起进行分析,比如完整地追踪一个事务的整个跨度。
- 自定义日志采集:有时候我们需要采集一些自定义的日志信息,比如打印一些特殊的调试信息,这些信息在日志查询和分析中对调试和排错都非常有帮助。
因此,如何实现 Serverless 应用的日志采集成为了一个比较值得探讨的问题。
应用日志和平台日志
在我们开始讨论日志采集的策略之前,我们需要了解以下两个概念:
- 应用日志:指应用程序本身输出的日志信息,包括错误日志、调试信息、业务日志等。
- 平台日志:指 Serverless 平台自身输出的日志信息,包括函数调用次数、耗时、异常信息等。
这两种日志都是很有用的,但是采集方式却略有不同,因此我们需要根据实际需求选择不同的采集方式。
如何采集应用日志
对于应用日志的采集,我们一般可以采用以下两种方式:
1. 写入相关日志服务
Serverless 平台一般都提供了类似于云日志的服务,可以通过 API 或者 SDK 调用来将日志数据写入这些服务中。比如,阿里云提供了日志服务(Log Service)和函数计算日志服务(FC-LOGGER),AWS 包括 CloudWatch Logs 等服务。
-- -------------------- ---- ------- ----- ------ - -------------------------- --------------- - ----- ------- -------- -- - -- ---- -------------------- ------- ---- -------- ------- ---------------------- ----- -------------- ----------------------- ---- ---------- -- --- ------ -展开代码
2. 使用 CloudWatch 或者 Kinesis 等服务发往外部日志系统
如果希望将应用日志发往外部日志系统,我们可以考虑使用 CloudWatch 或者 Kinesis 等服务作为一个中间件,将日志发送到指定的外部日志系统,比如 Elasticsearch 等。
-- -------------------- ---- ------- ----- --- - ------------------- ----- ------------- - --------------------- --------------- - ----- ------- -------- -- - ----- --- - --- -------------------- ------- ----------- --- ----- -- - --- ---------------- ------- ----------- --- -- ----- --- ------ ----- ---------- - ----- ------------------------ ------------- -------------------- -------------------- -------------- ------------- --- ------ - ------------------------- -- --------- - ------ - ------ --------------------- ------------- -------------------- -------------- -------------- ------------------------ - -- ---- ----- --------- - ---------------------- ----- ----- - - ---------- -- -------- ---------- ---------- --- ---------------- --- ------------- -------------------- -------------- --------------------- -- ----- ---------------------------------- -展开代码
如何采集平台日志
对于平台日志,Serverless 平台一般都提供了专门的 API 或者 SDK,可以帮助我们将日志数据记录下来,在后台进行查询和分析。以下是 AWS 和阿里云等平台的示例代码:
-- -------------------- ---- ------- -- --- --------------------- ------- ---- -------- ------- ------------------------ ---- -------- ---------------------- --------- --------------- -- --- ------------------- --------- ------------------------ ---- -------- ---------------------- --------- ---------------展开代码
可以看到,无论是 AWS 还是阿里云,都提供了 console 对象来打印日志。这里需要注意的是,平台日志的格式和应用日志的格式不太一样,不能按照应用日志的方式来采集。
总结
Serverless 应用的日志采集是一个比较复杂的问题,但是我们可以通过采用不同的方案,实现对应用和平台日志的采集。需要注意的是,不同的 Serverless 平台可能有不同的 API 和 SDK,需要根据具体情况选择采集方式和工具。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64b0955848841e9894cad4c4