开发者在云函数的开发调试、在线运维过程中,难免会遇到函数调用失利需要定位问题的情况,通常咱们运用日志作为首要排障手段。

在云函数控制台中,咱们能够看到包括函数调用状态的日志列表,直接筛选可过滤检查一切调用失利的日志。

假如咱们能够从网关回来信息中拿到某个失利恳求的 RequestId ,咱们还能够依据 Reque7 B 1 J estId 检索指定恳求的日志。

腾讯云云函数 SCF 日志检索最佳实践

这是最基础的日志G E . m b检索运用办法。

实践定位问题的过程中,有可能出现以下几种场景:

  • 函数里的部分反常有进行捕获,但函数的调用状态依然是成功,此时怎么找到已捕获的反常?W C q e t ? : = E
  • 函数过错调用非常多,我只想检查某些指定模块的日志信息怎么办?
  • 收到告警提示我函数运转时刻超过 x 秒,我怎么敏捷找到指定运转时长范围的调用日志# ` F 1 2 K $
  • 我要检查的事务日志包括多个不同的关键词,想要一次性找到多个关键词地点的日X w i v {志怎么办?

针对以上场景,咱们能够运用「高档日志」功用解决上述全部问题。[ j @ H w

高档日志怎么运用

下面给咱们共享一下m n | 2 U r @ 6捕获的反常查找函数运转时刻大于 x 的恳求关键词组合检索% 4 ( P B : ~ k R怎么运用高档日志。

1. 已捕获的反常

云函数比较多的运用场景是和 API 网关组合运: L Q用完成 REST API ,以2 s + R f B e ( e下咱们结合一个实践的事务场景阐明怎么运用高档日志。

以下模拟一个 HTTP PUT 恳求完成教师录入学生信B , i c c n K Q息的功用。

def teacher_put(h U } k n _ G 5):
print('u ~ binsert info')
try:
fh = open("/tmp/testfile", "w")
fhM . ..write("students info xxxx")
except IO ! MError:
print("Error: cannot fiT L 5 @nd the file or open file failed")
else:
print("write info success")
fh.close()
return('teacher_put success')
def main_handler(event, conteP 2 E z h 9 [ Bxt):
print(str(event))
if event["pathParameters"]["user_type"] == "teacher":
if event["pathParameters"]["acu W % a Q a H X _tion"] == "get":
return teache` X : ~ | t ! fr_get()
if event["pathParame; e ) ~ [ ters"]p X 5 & N $ b["action"]X [ q == "put":
return teacher_put()

J n S $ r于上面写文件时的 IO 反常已被捕获,所以当找不到文件时,函数调用成果依然为成功,API 恳求回来 null 。假如运用一般m c . @ 2 } A :调用日志功用,需要逐条检查日志,这将会非常麻烦。

咱们在代i X y码捕获反常时有打印 Error 信息,在高档日志里能够直接检索该关键词:

腾讯云云函数 SCF 日志检索最佳实践

假如? e y – y 5 W F ~想检查包括该恳w ~ 5 ~ l求的完好日志,则点击该条日志的 RequestId 即可:

腾讯云云函数 SCF 日志检索最佳实践

上面] 5 B v L叙述了怎么查找已被捕获的反常,直接检索捕获时打印的关键词即可, 日志输出办法没有特殊要求,运用运转时原生日志即可。

2. 查找! I w C c @函数运Q 8 ] 2 _转时刻大于 x 的恳求

假如咱们收到告警或通过监控图表检查到某个函数的运转时刻反常,怎么敏捷找到这些+ { 7 ? Q B ,日志呢?

高档日志里供给了运转时刻检索的办法,比方咱们想查找运转时刻大于 150ms 的日志,咱们能够在检索框输入 SCF_DuraU 2 O ] #tion>150,即可找出该时刻范围的日志。

腾讯云云函数 SCF 日志检索最佳实践

时刻范围和关键词检索可组合运用,在上述示例中会将一切日志都过滤出来。

假如咱们只想检查有多少恳求的运转时刻是大于 150 ms ,咱们能够组合关键词过滤 SCF_Duration>150 aj 7 [ p o P nd "Report RequestId" 进行检索:

腾讯云云函数 SCF 日志检索最佳实践

上述表达式的意思是,过滤运转时刻大于 150 ms 且 包括 Report RequestId 关键词的日志。Report RequestId这一行是函数每次0 n ! O恳求完毕后体系打印的语句,所以能够用它来到达筛[ 5 s选仅有恳求日志的效果。

假如想过滤出 150<运转时刻≤300 的日志,则能够+ @ c # _运用 SCF_Duration in (153 # g { + ? ) ! d0 300]

3. 关键词组合检索

假如咱们想同时检索多个关键词,比方 erroruseridregion咱们能够运用 and 或者 or 衔接这些关键词。

如想要过滤` d ` u F P # v q出同时包括这些关键词的日志,则能够运用 error aC f Ynd userid and region

如想要过滤出包括任一关键词的| v ! $ ) N : A `日志,则能够运用 errM T vor or userid or region

高档日志服务供给了丰富的检索语法,可参考日志检索语法教程

Serverless Framework 30 天试用计划

咱们诚邀您来体会最快捷的 Serverless 开发和布置方法。在试用期内,相关联的产品及服务均供给免费资源和专业的技术支持,帮助您的事务快速、快捷地完成 Serverl– [ ,ess!

详情可查阅:Serverless FramewT 8 ; 7 !ork 试用计划

One More Thing

3 秒你能做什么?喝一口水,看一封邮件,还是 —— 布置一个完好c & k p # T i e的 Serverless 使用?

复制链接至m – E ] Z T 6 PC 浏览) v ] y器拜访:s] * y z g % ~ / #erverless.cloud.tencentL O i.com/deploy/expr…

3 秒极速布置,当即体会史上最快的 Serverless HTTP 实战开发!

传送^ 2 =门:

  • GitHub: github.com/serverless
  • 官网:serverless.com

欢迎拜访:Serverless 中文网,您能够在 最– R r – 9 % x佳实践 里体会更多关于 Serverless 使用的开发k ~ V e g


引荐阅览:《Serverless 架构:从原理、规划到项目实战》