使用 Gemini CodeLab 排查问题

1. 简介

在本实验中,您将使用 Google Cloud 中 AI 赋能的协作工具 Gemini,通过分析错误日志、确定问题的根本原因并找到修复方法,来排查 Cloud Functions 部署方面的问题。

实践内容…

  • 您将使用 Cloud Shell 终端和 gcloud CLI 设置环境,包括启用相关的 Google API 和从提供的代码创建 Cloud Function
  • 您将使用 Cloud Logging 日志总结功能生成日志摘要,以便了解捕获的信息。
  • 您将与 Gemini 对话,以获取 Gemini 在排查和解决问题方面的帮助。

学习内容…

  • 如何将 Gemini 与 Google Cloud Observability 搭配使用,以及如何使用 Gemini 排查问题。
  • 如何借助 Gemini 查找并理解 Cloud Functions 日志。

所需条件…

  • Chrome 网络浏览器
  • 启用了结算功能的 Google Cloud 项目
  • 具有项目访问权限的 Google 账号,可用于启用 API 和操纵资源

本实验的适用对象为各种水平的 DevOps 工程师、平台工程师和软件开发者,包括新手。我们将重点介绍如何通过实践体验 Gemini 在问题排查方面的功能。

2. 设置

本部分涵盖了开始此实验所需执行的所有操作。

配置环境

1. 打开 https://console.cloud.google.com,登录 Cloud 控制台。

2. 选择您计划用于本实验的 Google Cloud 项目。

22170459a4f3ba59.png

3. 在控制台中打开 Cloud Functions 页面。为此,您可以从导航菜单(控制台窗口中的左上角图标 ☰)中选择 Cloud Functions。

9d27c844c16ad3e4.png

或者,您也可以在控制台的搜索区域中搜索“Cloud Functions”:

35f23e52875b26cd.png

点击函数列表顶部的“创建函数”按钮 34b5e7e36f4e48e9.png

如果您之前未在此项目中使用过 Cloud Functions,系统会要求您启用 Google API,以便 Cloud Functions 正常运行。

5b7978521d6f56f7.png

点击“启用”继续。

4. 定义新 Cloud Functions 函数的基本属性。

  • 将名称设置为“codelab-cf
  • 选择允许未通过身份验证的调用选项

6a2aaf9bedd161d9.png

如需完成此步骤,请点击窗口左下角的“下一步”按钮:

f4e76470dbdf6854.png

点击“下一步”后,系统可能会提示您启用其他 Google API。与第 4 步一样,点击“启用”。

1ad7bf15c07eda49.png

设置 Cloud Functions 函数的运行时和代码

此 CodeLab 使用 Python 作为编程语言。如果您不熟悉 Python,也不必担心。完成本 Codelab 不需要具备 Python 知识。

5. 选择 Python 3.11 作为函数的运行时

9a3cd8bf272b4d02.png

请注意,运行时更改会更改内嵌编辑器中显示的源代码。

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 函数,请点击左下角的“DEPLOY”。

17c4828702a32cd9.png

您可能需要等待几分钟,直到部署过程完成。如果您严格按照设置说明操作,则应该会看到部署报告为失败。

3. 查找并解决问题

在本部分中,您将使用日志说明功能和其他 Gemini 辅助功能来确定问题及解决方法。

1. 部署失败。您应该会看到一条错误消息,其中包含有关此问题的更多信息以及用于查看部署日志的选项。点击“查看日志”可查看部署日志。

bc62db6ef3b35420.png

请注意,部署日志将在同一浏览器中的单独标签页中打开。您需要切换标签页才能完成此 Codelab。

请注意,点击“查看日志”后,您可能看不到任何日志行,或者只能看到几行。在这种情况下,请使用日志探索器的查询窗格中的时间范围选择器,然后选择过去 30 分钟

e24856920201ebf8.png

2. 查看已打开标签页中的日志。请注意,日志摘要看起来像是多行异常的调用堆栈。这是因为 Cloud Functions 会捕获输出到 stdoutstderr 的文本,并将每行文本作为单独的日志条目写入。其他日志行会总结有关退出错误代码的信息,以及 Cloud Functions 和 Cloud Run API 报告的其他信息。

b49e41594173b57c.png

您可以点击任意一行,详细了解特定日志。展开的日志具有额外的界面元素,点击这些元素可让您复制有关日志的所有信息、展开所有字段以显示日志条目的所有数据,以及使用 Gemini 解释日志条目。

4. 异常调用堆栈提供的信息不够详细。浏览日志,找到异常堆栈轨迹日志的结尾。即显示“Container called exit(1)”的那一行。以下日志摘要显示:

functions_framework.exceptions.MissingTargetException: File /workspace/main.py is expected to contain...

这似乎是一个值得调查的候选对象。点击此行即可展开日志条目。然后,点击“说明此日志条目”按钮,查看有关所选日志的更多信息。

b815de46d1b4597c.png

如果之前未在此项目中使用过 Gemini,系统会提示您启用所需的 API。如果系统提示您启用该 API,请点击“启用”以继续操作。

7ca90e087a2e99d1.png

请注意,有时在向 Gemini 发出提示时,您可能会收到错误消息。在这种情况下,请再次重复提示操作以获取回答。例如,再次点击“说明此日志条目”按钮。

5. 查看 Gemini 提供的说明。如果给出的说明不够充分或不够清晰,请使用以下提示之一或自行撰写问题,让 Gemini 提供更多信息

您能否提供有关此日志的更多信息?
您能否提供有关此错误的更多信息?

6. 然后,提示 Gemini 提供解决问题的建议。例如,您可以问问 Gemini

如何解决此问题?
建议一种解决此错误的方法
建议我如何修复此错误

Gemini 回答可能会因当前上下文以及提示的措辞和格式而异。预计 Gemini 会建议确保 Cloud Functions 函数的源代码包含一个名为 hello_http 的函数。

7. 您目前看到的是显示 Cloud Functions 日志的标签页。选择显示包含错误的 Cloud Functions 部署页面的上一个标签页,然后点击“修改”。

c3d9b207214a2240.png

8. 确认身份验证仍设置为允许未经身份验证的调用,并根据需要更新选择。

6a2aaf9bedd161d9.png

9. 点击底部的“下一步”即可查看内嵌编辑器。按照 Gemini 的建议,将函数名称从 get_order_list 更改为 hello_http

修改完成后,点击“部署”。

您可能需要等待几分钟,直到部署过程完成。确认部署已成功完成,并且未显示任何错误消息。

请注意,在部署流程完成之前,控制台可能会继续显示上次的错误消息。

10. 使用 curl 发送以下 HTTPS 请求,以检查 Cloud Functions 函数是否正常运行。您可以使用 Cloud Shell,也可以从安装了 curlgcloud 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 函数的入口点字段:

9a3cd8bf272b4d02.png

将入口点从 hello_http 更改为 get_order_list 将解决部署问题。

4. 清理

如需清理,您可以关停项目或删除 Cloud Functions 实例。您可以使用控制台或使用如下所示的 CLI 命令删除 Cloud Functions 函数:

gcloud functions delete codelab-cf --region=us-central1

5. 恭喜!

恭喜!您已成功使用 Gemini 排查并解决了应用存在的问题,现在了解了它如何协助您了解日志并回答有关 Google Cloud 的问题。

参考文档…