从零入门 Serverless | 函数计算的可观测性
作者 | 夏莞 阿里巴巴函数计算团队
本文整理自《Serverless 技术公开课》,关注“Serverless”公众号,回复“入门”,即可获取 Serverless 系列文章 PPT。
导读:本文主要分为三个部分:概述中介绍可观测性的基本概念,主要包括 Logging、Metrics、Tracing 三个方面;然后详细介绍函数计算上的 Logging、Metrics、Tracing;最后以几个常见场景为例,介绍在函数计算中如何快速定位问题并解决问题。
概述
可观测性是什么呢?维基百科中这样说:可观测性是通过外部表现判断系统内部状态的衡量方式。
在应用开发中,可观测性帮助我们判断系统内部的健康状况。在系统出现问题时,帮助我们定位问题、排查问题、分析问题;在系统平稳运行时,帮助我们评估风险,预测可能出现的问题。评估风险类似于天气预报,预测到明天下雨,那出门就要带伞。在函数计算的应用开发中,如果观察到函数的并发度持续升高,很可能是业务推广团队的努力工作导致业务规模迅速扩张,为了避免达到并发度限制触发流控,开发者就需要提前提升并发度。
可观测性包括三个方面:Logging、Metrics、Tracing
- Logging 是日志,日志记录了函数运行中的关键信息,这些信息是离散且具体的,结合错误日志与函数代码可以迅速定位问题。
- Metrics 是指标,是聚合的数据,通常以图表的形式展现。图表中的 tps、错误率等核心指标,可以反映函数的运行情况与健康状况。
- Tracing 是链路追踪,是请求级别的追踪,在分布式系统中可以看到请求在各个模块的延时、分析性能瓶颈。
函数计算中的 Logging/Metrics/Tracing
1. 日志
在函数计算中如何查看函数日志呢?在传统服务器开发方式中,可以将日志记录到磁盘中的某个文件中,再通过日志收集工具收集文件的内容;而在函数计算中,开发者不需要维护服务器了,那如何收集代码里打印的日志呢?
1)配置日志
函数计算与日志服务无缝集成,可以将函数日志记录到开发者提供的日志仓库(Logstore)中。日志是服务配置中的一项,为服务配置 LogProject 和 Logstore,同一服务下所有函数通过 stdout 打印的日志,都会收集到对应的 Logstore 中。
2)记录日志
那日志怎么打呢?在代码中直接通过 console.log/print 打印的日志可以收集到吗?答案是可以的。各个开发语言提供的打印日志的库都将日志打印到 stdout,比如 node.js 的 console.log()、python 的 print()、golang 的 fmt.Println() 等。函数计算收集所有打印到 stdout 的日志并将其上传到 Logstore 中。
函数计算的调用是请求维度的,每次调用对应一个请求,也就对应一个 requestID。当请求量很大时,会有海量日志,如何区分哪些日志属于哪个请求呢?这就需要把 requestID 一起记录到日志中。函数计算提供内置的日志语句,打印的每条日志前都会带上请求 ID,方便日志的筛选。
3)查看日志
当函数日志被收集到日志服务的 Logstore 中,可以登录日志服务控制台查看日志。
同时,函数计算控制台也集成了日志服务,可以在函数计算控制台上查看日志。函数计算控制台有两种查询方式:
- 简单查询:简单查询中列出每个 requestID 对应的日志,可以通过 requestID 对日志进行筛选;
- 高级查询:高级查询嵌入了日志服务,可以通过 SQL 语句进行查询。
点击链接观看 Demo 演示:https://developer.aliyun.com/lesson_2024_18996
2. 指标
查看指标的方式:
- 函数详情查看监控指标:FC 提供丰富的系统指标,这些指标可以不用任何配置,就可以在函数计算控制台查看。
- 配置日志大盘:日志大盘不仅可以看到函数计算提供的监控指标,而且可以与开发者日志关联,生成自定义的监控指标。
3. 链路追踪
(请求在各个链路的延时瀑布图)
链路追踪是分布式系统排查问题的重要一环,链路追踪可以分析分布式系统中请求在各个链路的时延。有以下几种情况:
- 函数计算作为整个链路中的一环,可以看到请求在函数计算上的时延,时延包括系统启动的时间和请求真正的执行时间,帮助用户分析性能瓶颈。
- 函数计算中调用 FC SDK,可以默认看到 SDK API 的调用时延。
- 开发者在函数代码中访问数据库等产品,可以手动在函数中埋点分析这段时延。
问题排查
函数计算提供了很多可观测性相关的功能,那究竟怎样定位问题呢?以几个场景为例。
场景一:新版本发布后,函数错误率升高
首先发布版本后要观察函数各项指标,一旦错误率升高要立即回滚避免故障,查看函数日志定位错误原因,修复问题再次上线。
场景二:函数性能差,总是执行时间很长,甚至超时
开启 tracing 功能,在函数内部可能耗时的地方进行埋点,查看请求的瀑布图,定位执行时间长的原因,修复问题。
场景三:业务量迅速扩张,并发度即将到达并发度限制
通过 metrics 查看当前并发度,观察到并发度持续上升时,及时联系函数计算开发同学,提升并发度。
课程推荐
为了更多开发者能够享受到 Serverless 带来的红利,这一次,我们集结了 10+ 位阿里巴巴 Serverless 领域技术专家,打造出最适合开发者入门的 Serverless 公开课,让你即学即用,轻松拥抱云计算的新范式——Serverless。
点击即可免费观看课程:https://developer.aliyun.com/learning/roadmap/serverless
Serverless 公众号,发布 Serverless 技术最新资讯,汇集 Serverless 技术最全内容,关注 Serverless 趋势,更关注你落地实践中的遇到的困惑和问题。
从零入门 Serverless | 函数计算的可观测性的更多相关文章
- 从零入门 Serverless | 函数计算如何粘合云服务,提供端到端解决方案
作者 | 西流 阿里云技术专家 导读:阿里云 Serverless 产品函数计算可以作为粘合剂,串联其他云服务提供端到端解决方案,从而简化编程模型,快速实现最上层的业务目标. 传统单体应用的拆解 首先 ...
- 从零入门 Serverless | 函数计算的开发与配置
导读:在本篇文章中,"基本概念"部分主要对函数计算最核心的概念进行详细介绍,包括服务.函数.触发器.版本.别名以及相关的配置:"开发流程"部分介绍了基于函数计算 ...
- 发评测赢好礼 | Serverless 函数计算征集令
随着云计算发展,云原生热度攀升,Serverless 架构崭露头角且发展势头迅猛.不仅被更多开发者所关注,市场占有率也逐年提高.阿里云函数计算(Function Compute)是一个事件驱动的全托管 ...
- 从零入门 Serverless | 一文搞懂函数计算及其工作原理
作者 | 孔德慧(夏莞) 阿里云函数计算开发工程师 什么是函数计算 大家都了解,Serverless 并不是没有服务器,而是开发者不再需要关心服务器.下图是一个应用从开发到上线的对比图: 在传统 Se ...
- 从零入门 Serverless | 课时5 函数的调试与部署
作者 | 江昱 阿里巴巴高级产品经理 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复"入门",即可获取 S ...
- 从零入门 Serverless | 一文详解 Serverless 技术选型
作者 | 李国强 阿里云资深产品专家 今天来讲,在 Serverless 这个大领域中,不只有函数计算这一种产品形态和应用类型,而是面向不同的用户群体和使用习惯,都有其各自适用的 Serverless ...
- 从零入门 Serverless | 一文讲透 Serverless Kubernetes 容器服务
作者 | 张维(贤维) 阿里云函数计算开发工程师 导读:Serverless Kubernetes 是以容器和 kubernetes 为基础的 Serverless 服务,它提供了一种简单易用.极致弹 ...
- 从零入门 Serverless | 在线应用的 Serverless 实践
作者 | 唐慧芬(黛忻) 阿里云产品专家 导读:毫无疑问,Serverless 能够在效率和成本上给用户带来巨大收益.那具体到落地又应该怎么做呢?本文就给大家详细解读 Serverless 的落地实践 ...
- 从零入门 Serverless | Knative 带来的极致 Serverless 体验
作者 | 冬岛 阿里巴巴高级技术专家 Serverless 公众号后台回复"knative",即可免费下载<Knative 云原生应用开发指南>电子书! 导读:Serv ...
随机推荐
- Storm重启topology,失败
storm新加节点,重启topology后,出现错误 如果检查了CPU和内存不高后,还出现 java.lang.OutOfMemoryError: unable to create new nativ ...
- Go版本管理--处理不兼容
目录 1. 简介 2.能否引起不兼容的包 3.如何处理incompatible 1. 简介 Go module的版本选择机制,其中介绍了一个Module的版本号需要遵循v<major>.& ...
- ES6——简单的多态
简单的多态 多态: 1.同一个接口,在不同情况下做不一样的事情:相同的接口,不同的表现: 2.接口本身只是一组定义,实现都是子类里面:需要子类去实现的方法(子类只需重写与父类同名的方法,即可达到覆盖的 ...
- vscode Markdown Preview Enhanced 安装配置
打开VSCode 打开Externsion,可通过Ctrl+Shift+X 选中 Markdown Preview Enhanced并install即可 配置Preview风格: Magage -&g ...
- 求证:-1/2 <= {2x} - {x} < 1/2
证:由 x = [x] + {x},知2x = 2[x] + 2{x}. 1.若{x}落在[0,1/2),则2{x} < 1,于是有{2x} = 2{x},此时 {2x} - {x} = {x} ...
- (一)羽夏看C语言——简述
"羽夏看C语言"介绍什么 本系列从汇编的角度,比较翔实的介绍C语言.C++和C其实是一样的东西,C++的编译器只是更强大,更能帮助我们写代码,例如模板.没有特殊说明,本系列不会 ...
- 从源码角度分析 MyBatis 工作原理
一.MyBatis 完整示例 这里,我将以一个入门级的示例来演示 MyBatis 是如何工作的. 注:本文后面章节中的原理.源码部分也将基于这个示例来进行讲解.完整示例源码地址 1.1. 数据库准备 ...
- Appium问题解决方案(4)- Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException
背景 操作步骤 运行 uiautomatorviewer.bat 点击左上角的 Device ScreensShot 报错 截图 解决方法 网上还是有很多方法的,可能造成的原因不同,我是第六种方法解决 ...
- shell脚本中的多行注释
shell 中注释的使用方法 1. 单行注释 单行注释最为常见,它是通过一个'#'来实现的.注意shell脚本的最开始部分"#!/bin/bash"的#号不是用来注释的. 2. 多 ...
- Linux高级之语句表达式
表达式 表达式和语句是 C 语言中的基础概念.什么是表达式呢?表达式就是由一系列操作符和操作数构成的式子.操作符可以是 C 语言标准规定的各种算术运算符.逻辑运算符.赋值运算符.比较运算符等.操作数可 ...