1. 简介
在本实验中,您将使用 Google Cloud 中依托 AI 技术的协作工具 Gemini,通过分析错误日志、确定问题的根本原因并找出解决方法来排查 Cloud Functions 函数部署问题。
实践内容…
- 您将使用 Cloud Shell 终端和 gcloud CLI 来设置环境,包括启用相关的 Google API 以及根据提供的代码创建 Cloud Functions 函数
- 您将使用 Cloud Logging 日志摘要功能生成日志摘要,以便了解捕获的信息。
- 你将与 Gemini 聊天,让 Gemini 协助你进行问题排查和解决问题。
学习内容…
- 如何将 Gemini 与 Google Cloud Observability 搭配使用以及如何排查问题。
- 如何借助 Gemini 查找和了解 Cloud Functions 函数日志。
所需条件…
- Chrome 网络浏览器
- 启用了结算功能的 Google Cloud 项目
- 一个 Google 账号,该账号有权访问该项目,让您可以启用 API 并操纵资源
本实验的适用对象为 DevOps 和平台工程师,以及各级软件开发者,包括初学者。我们的重点是亲自体验使用 Gemini 的功能进行问题排查。
2. 设置
本部分涵盖了开始此实验所需执行的所有操作。
配置环境
1. 打开 https://console.cloud.google.com,登录 Cloud 控制台。
2. 选择您计划用于本实验的 Google Cloud 项目。
3. 在 Console 中打开 Cloud Functions 页面。为此,您可以从导航菜单(控制台窗口的左上角图标 ☰)中选择 Cloud Functions。
或者,您也可以搜索“Cloud Functions”:
点击函数列表顶部的“创建函数”按钮
如果您之前未在此项目中使用过 Cloud Functions,则需要启用 Google API 才能正常运行。
点击“启用”以继续。
4. 定义新的 Cloud Functions 函数的基本属性。
- 将名称设置为“
codelab-cf
” - 选择允许未通过身份验证的调用选项。
要完成该步骤,请点击窗口左下角的“下一步”按钮:
点击“下一步”后,系统可能会提示您启用其他 Google API。和第 4 步一样,点击“启用”。
设置 Cloud Functions 函数的运行时和代码
此 Codelab 使用 Python 作为编程语言。如果您不熟悉 Python,也不必担心。若要完成此 Codelab,您无需掌握 Python 知识。
5. 选择 Python 3.11 作为函数的运行时
请注意,更改运行时会更改内嵌编辑器中显示的源代码。
6.将以下代码复制到内嵌编辑器中,以修改自动生成的快速入门示例。
from google.cloud import storage
import json
import re
client = storage.Client()
def get_object_list(request):
if request.args and 'path' in request.args:
path = request.args['path']
else:
return '{}'
parsed = re.search('gs:\/\/([a-zA-Z0-9_-]{3,63})\/([-a-zA-Z0-9_\+.\/]*)', path)
bucket, prefix = parsed.group(1), parsed.group(2)
blobs = client.list_blobs(bucket, prefix=prefix, delimiter='/')
objects = []
if (blobs):
for blob in blobs:
objects.append(blob.name)
return json.dumps(objects)
此代码从 GET 请求中读取 path
属性,解析路径以获取存储分区名称,然后调用 Google Cloud Storage API 以获取存储在此路径中的对象的列表。函数 (get_object_list
) 接受作为 Flask 对象的请求作为输入参数,并以 JSON 数组形式返回对象名称。
7.从内嵌编辑器中保留的文件列表中选择 requirements.txt
文件。将以下代码复制到内嵌编辑器中,将当前的依赖项列表替换为新的依赖项列表。
google-cloud-storage
8.如需部署 Cloud Functions 函数,请点击左下角的“部署”。
您可能需要等待几分钟,直到部署过程完成。如果您严格按照设置说明进行操作,应该会看到部署被报告为失败。
3. 查找和解决问题
在本部分中,您将使用“日志说明”功能和其他 Gemini 辅助功能来确定问题和解决方法。
1. 部署失败。您应该会看到一条错误消息,告知您相关信息,并提供额外信息以及用于查看部署日志的选项。点击“查看日志”可查看部署的日志。
请注意,部署日志将在同一浏览器的单独标签页中打开。您需要在各标签页之间导航,才能完成此 Codelab。
请注意,点击“查看日志”时可能看不到日志行,也可能只看到几行。在这种情况下,请使用日志浏览器查询窗格中的时间范围选择器,然后选择过去 30 分钟。
2. 在打开的标签页中查看日志。请注意,日志摘要看起来像是异常的多行调用堆栈。这是因为 Cloud Functions 函数会捕获输出到 stdout
或 stderr
的文本,并将每一行作为单独的日志条目写入。其他日志行汇总了有关退出错误代码的信息以及 Cloud Functions 和 Cloud Run API 报告的其他信息。
您可以点击任意一行,查看特定日志的详细信息。在展开的日志中,点击其他界面元素,您可以复制该日志的所有相关信息,展开所有字段以显示相应日志条目的所有数据,并使用 Gemini 解释该日志条目。
4. 异常调用堆栈提供的信息不多。浏览日志以找到异常堆栈轨迹日志的末尾。即“Container called exit(1)
”那一行代码。以下日志摘要显示:
functions_framework.exceptions.MissingTargetException: File /workspace/main.py is expected to contain...
它似乎很适合开展调查。点击此行可展开日志条目。然后点击解释此日志条目按钮以查看有关所选日志的更多信息。
如果 Gemini 之前未在此项目中使用,系统会提示您启用所需的 API。如果系统提示您启用该 API,请点击“启用”以继续。
请注意,有时你可能会在提示 Gemini 时收到错误消息。对于此类事件,请再次重复提示操作以获得回答。例如,点击“说明此日志条目”按钮。
5. 查看 Gemini 提供的说明。如果提供的解释不够充分或不清楚,请使用以下某个提示或自行撰写问题,提示 Gemini 提供更多信息
能否提供关于此日志的更多信息?
能否提供关于此错误的更多信息?
6.然后,提示 Gemini 提供解决相应问题的建议。例如,问 Gemini
如何解决此问题?
推荐解决此错误的解决方案
提供修正此错误的方法
Gemini 的回答可能会因当前上下文以及提示的措辞和格式而异。Gemini 预计会建议确保 Cloud Functions 函数的源代码包含名为 hello_http
的函数。
7.您目前看到的是显示 Cloud Functions 日志的标签页。选择上一个显示出错的 Cloud Functions 函数部署页面的标签页,然后点击“修改”。
8.确认身份验证仍设置为允许未通过身份验证的调用,并根据需要更新所选内容。
9.点击底部的“下一步”即可查看内嵌编辑器。按照 Gemini 的建议操作,将函数名称从 get_order_list
更改为 hello_http
。
完成修改后,点击“部署”。
您可能需要等待几分钟,直到部署过程完成。确认部署成功完成,并且没有显示错误消息。
请注意,控制台可能会继续显示最后一条错误消息,直到部署过程完成为止。
10.使用 curl
发送以下 HTTPS 请求,以检查 Cloud Functions 函数是否正常运行。您可以使用 Cloud Shell,也可以通过任何已安装 curl
和 gcloud
CLI 的终端执行此操作。从 Cloud Shell 终端执行以下命令。
curl -m 70 -X GET \
https://us-central1-${GOOGLE_CLOUD_PROJECT}.cloudfunctions.net/\
codelab-cf?path=gs://cloud-samples-data/generative-ai/image/ \
-H "Authorization: bearer $(gcloud auth print-identity-token)"
请注意,如需从终端运行此命令,您必须使用 gcloud CLI 进行身份验证,并将项目 ID 的值设置为环境变量 GOOGLE_CLOUD_PROJECT
。
奖励
选择 Python 运行时时,函数 hello_http
的名称被定义为 HTTP 触发的 Cloud Functions 函数的默认入口点。替代解决方案可以是将 get_order_list
保留为源代码中函数的名称,并在“运行时”字段中更新位于内嵌编辑器上方的 Cloud Functions 函数的入口点字段:
将入口点从 hello_http
更改为 get_order_list
将解决部署问题。
4. 清理
如需进行清理,您可以关闭项目或删除 Cloud Functions 函数实例。您可以使用控制台或通过 CLI 命令删除 Cloud Functions 函数,如下所示:
gcloud functions delete codelab-cf --region=us-central1
5. 恭喜!
恭喜!您已成功使用 Gemini 排查并解决了应用存在的问题,现在您已了解 Gemini 如何协助您理解日志和获得 Google Cloud 相关问题的解答。