线上问题诊断
线上问题诊断
虽然阿里云函数计算控制台提供很好的白屏化可观测能力, 但是小明是一个命令行爱好者,他希望在终端也能完成基本的日志查询和实例登录操作。
查看日志
-
需要给函数的 s.yaml 配置上 logConfig
logConfig:enableInstanceMetrics: trueenableRequestMetrics: truelogBeginRule: DefaultRegexlogstore: function-logstoreproject: 1431999136518149-cn-huhehaote-project上面的 project 和 logstore 替换成您日志服务的 project 和 logstore, logstore 打开索引
-
执行
s deploy
部署函数 -
执行
s invoke
命令,让函数执行产生日志# -*- coding: utf-8 -*-import loggingdef handler(event, context):logger = logging.getLogger()logger.info(event)return eventTerminal window $ s invoke -e "hello1"$ s invoke -e "hello2"$ s invoke -e "hello3"$ s invoke -e "hello1" -
查询日志
Terminal window $ s logs⌛ Steps for [logs] of [hello-world-app]====================c-65ddae0a-123e0897-eeda07b5115b 2024-02-27 17:40:26 FunctionCompute python3 runtime inited.c-65ddae0a-123e0897-eeda07b5115b 2024-02-27 17:40:26 FC Invoke Start RequestId: 1-65ddae0a-12245c4f-517e4d57f6f1c-65ddae0a-123e0897-eeda07b5115b 2024-02-27 17:40:26 2024-02-27 17:40:26 1-65ddae0a-12245c4f-517e4d57f6f1 [INFO] b'hello1'c-65ddae0a-123e0897-eeda07b5115b 2024-02-27 17:40:26 FC Invoke End RequestId: 1-65ddae0a-12245c4f-517e4d57f6f1c-65ddae0a-123e0897-eeda07b5115b 2024-02-27 17:40:30 FC Invoke Start RequestId: 1-65ddae0e-123e1745-247c03a581c6c-65ddae0a-123e0897-eeda07b5115b 2024-02-27 17:40:30 2024-02-27 17:40:30 1-65ddae0e-123e1745-247c03a581c6 [INFO] b'hello2'c-65ddae0a-123e0897-eeda07b5115b 2024-02-27 17:40:30 FC Invoke End RequestId: 1-65ddae0e-123e1745-247c03a581c6c-65ddae0a-123e0897-eeda07b5115b 2024-02-27 17:40:34 FC Invoke Start RequestId: 1-65ddae12-12244712-03c07a35f166c-65ddae0a-123e0897-eeda07b5115b 2024-02-27 17:40:34 2024-02-27 17:40:34 1-65ddae12-12244712-03c07a35f166 [INFO] b'hello3'c-65ddae0a-123e0897-eeda07b5115b 2024-02-27 17:40:34 FC Invoke End RequestId: 1-65ddae12-12244712-03c07a35f166c-65ddae0a-123e0897-eeda07b5115b 2024-02-27 17:41:18 FC Invoke Start RequestId: 1-65ddae3e-123e1745-614a2e85ee8ec-65ddae0a-123e0897-eeda07b5115b 2024-02-27 17:41:18 2024-02-27 17:41:18 1-65ddae3e-123e1745-614a2e85ee8e [INFO] b'hello1'c-65ddae0a-123e0897-eeda07b5115b 2024-02-27 17:41:18 FC Invoke End RequestId: 1-65ddae3e-123e1745-614a2e85ee8e✔ [hello_world] completed (0.34s)$ s logs --search hello1⌛ Steps for [logs] of [hello-world-app]====================c-65ddae0a-123e0897-eeda07b5115b 2024-02-27 17:40:26 2024-02-27 17:40:26 1-65ddae0a-12245c4f-517e4d57f6f1 [INFO] b'hello1'c-65ddae0a-123e0897-eeda07b5115b 2024-02-27 17:41:18 2024-02-27 17:41:18 1-65ddae3e-123e1745-614a2e85ee8e [INFO] b'hello1'✔ [hello_world] completed (0.46s)
更多日志查询使用请参考logs指令
登录实例
在一些日常的场景下,实例命令行操作会带来更符合用户习惯、更高效便捷的排查问题方式。
小明写完一个程序部署到函数计算后,发现函数中设置的环境变量不生效,如果进一步排查,则需要修改代码,打印日志,重新部署,查看日志,使用这样繁琐的排查方式。现在借助实例命令行操作,小明可以:
$ s instance list
instances: - instanceId: c-65ddafab-123e0897-d8db655765ad versionId: 0
$ s instance exec --instance-id c-65ddafab-123e0897-d8db655765ad --cmd "env"
FC_RUNTIME_API=127.0.0.1:19001LD_LIBRARY_PATH=/code/:/code//lib:/usr/local/lib:/opt/libFC_SERVER_LOG_PATH=/var/logSIGMA_APP_NAME=fn-test-xiliuLANG=C.UTF-8RUST_LOG=infoFC_CONTAINER_ID=c-65ddafab-123e0897-d8db655765adFC_FUNC_CODE_PATH=/code/PWD=/var/fc/runtimeHOME=/rootFC_SERVER_LOG_LEVEL=INFOTERM=xtermFC_FUNCTION_NAME=49ee1266-957a-408e-856e-f715ec7b4186SHLVL=1PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binKATA_CONTAINER=true_=/usr/bin/env
或者直接登录实例:
s instance exec --instance-id c-65ddafab-123e0897-d8db655765ad⌛ Steps for [instance] of [hello-world-app]====================[2024-02-27 17:50:02][INFO][hello_world] Enter `exit` to open the link on the server side to exit (recommended), or execute `control + ]` to force the client to exit✔ [hello_world] completed (0.29s)
A complete log of this run can be found in: /Users/xl/.s/logs/0227175000
root@c-65ddafab-123e0897-d8db655765ad:/code# lsindex.py
More
实例命令行操作提供了便捷的登录体验,能帮助用户解决复杂场景下的应用问题。一些情况下,用户已经无法通过函数日志、监控指标来具体定位问题,需要借助比如 coredump 、tcpdump、jmap 等工具进行深入排查。
比如,小明发现自己的线上程序最近会出现一些函数错误,报错内容都是连接远程某服务超时。小明怀疑是函数实例与远端服务的网络链接不稳定,想进入实例内部,调查分析下实例与远端服务的网络情况。他可以按照这样的步骤进行:
-
登录进实例内部后,先安装 tcpdump 工具,需要执行 apt-get update 和 apt-get install tcpdump 两条命令:
-
安装完毕后,执行 tcpdump 命令,对远端服务 IP 的请求进行抓包,并将抓包结果保存在 tcpdump.cap 文件中:
-
抓包完毕,借助 OSS 命令行工具 ossutil64 ,将 tcpdump.cap 文件上传到自己的 OSS ,然后下载到本地借助分析工具 wireshark 可以进行分析。