使用 Gemini CodeLab 排查问题

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 项目。

22170459a4f3ba59

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

9d27c844c16ad3e4.png

或者,您也可以搜索“Cloud Functions”:

35f23e52875b26cd.png

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

如果您之前未在此项目中使用过 Cloud Functions,则需要启用 Google API 才能正常运行。

5b7978521d6f56f7

点击“启用”以继续。

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

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

6a2aaf9bedd161d9

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

f4e76470dbdf6854.png

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

1ad7bf15c07eda49

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

此 Codelab 使用 Python 作为编程语言。如果您不熟悉 Python,也不必担心。若要完成此 Codelab,您无需掌握 Python 知识。

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

9a3cd8bf272b4d02

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

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

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

请注意,有时你可能会在提示 Gemini 时收到错误消息。对于此类事件,请再次重复提示操作以获得回答。例如,点击“说明此日志条目”按钮。

5. 查看 Gemini 提供的说明。如果提供的解释不够充分或不清楚,请使用以下某个提示或自行撰写问题,提示 Gemini 提供更多信息

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

6.然后,提示 Gemini 提供解决相应问题的建议。例如,问 Gemini

如何解决此问题?
推荐解决此错误的解决方案
提供修正此错误的方法

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

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

c3d9b207214a2240.png

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

6a2aaf9bedd161d9

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

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

4. 清理

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

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

5. 恭喜!

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

参考文档…