1. 简介
在此 Codelab 中,您将学习如何利用面向所有使用 Cloud Functions 的开发者提供的日志记录和监控工具。在各种受支持的语言中部署的每个 Cloud Functions 函数都附带这些工具,可帮助您更高效地编写和操作无服务器代码。
您将使用 HTTP 触发的 Cloud Functions 函数,但您中介绍的所有内容同样适用于其他语言以及其他事件触发的 Cloud Functions 函数。
2. 设置和要求
自定进度的环境设置
请记住项目 ID,它在所有 Google Cloud 项目中都是唯一的名称(上述名称已被占用,您无法使用,抱歉!)。它稍后将在此 Codelab 中被称为 PROJECT_ID
。
- 接下来,您需要在 Cloud 控制台中启用结算功能,才能使用 Google Cloud 资源。
运行此 Codelab 应该不会产生太多的费用(如果有费用的话)。请务必按照“清理”部分部分,其中会指导您如何关停资源,以免产生超出本教程范围的结算费用。Google Cloud 的新用户符合参与 $300 USD 免费试用计划的条件。
Cloud Shell
虽然可以通过笔记本电脑远程使用 Cloud Functions 及其日志记录和监控功能,但您需要使用 Cloud Shell,这是一个在 Google Cloud 中运行的命令行环境。
基于 Debian 的这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证。这意味着在本 Codelab 中,您只需要一个浏览器(没错,它适用于 Chromebook)。
- 如需从 Cloud Console 激活 Cloud Shell,只需点击激活 Cloud Shell(预配和连接到环境仅需花费一些时间)。
在连接到 Cloud Shell 后,您应该会看到自己已通过身份验证,并且相关项目已设置为您的 PROJECT_ID
。
gcloud auth list
命令输出
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
命令输出
[core] project = <PROJECT_ID>
如果出于某种原因未设置项目,只需发出以下命令即可:
gcloud config set project <PROJECT_ID>
正在查找您的 PROJECT_ID
?检查您在设置步骤中使用的 ID,或在 Cloud Console 信息中心查找该 ID:
默认情况下,Cloud Shell 还会设置一些环境变量,这对您日后运行命令可能会很有用。
echo $GOOGLE_CLOUD_PROJECT
命令输出
<PROJECT_ID>
- 最后,设置默认可用区和项目配置。
gcloud config set compute/zone us-central1-f
您可以选择各种不同的可用区。如需了解详情,请参阅区域和可用区。
3. 部署一个简单的 Cloud Functions 函数
为了能够监控内容,请创建一个“Hello, World”Cloud Functions 函数。在 Google Cloud 控制台的左侧菜单中,点击 Cloud Functions,然后点击创建函数。
输入“hello-monitor”作为新的 Cloud Functions 函数的名称
保留源代码的所有默认值。(不过,您也可以选择其他语言/运行时。)
最后,点击创建。
您应该会看到您的 Cloud Functions 函数旁边有一个绿色对勾标记,这表示它已可以调用。
4. 测试 Cloud Functions 函数并使用负载生成器发送流量
现在,Cloud Functions 函数已成功部署,请从命令行对其进行测试。
首先,使用 Cloud Shell 发出以下命令:
$ gcloud functions describe hello-monitor
这应该会返回 Cloud Functions 函数的说明,包括 httpsTrigger
的网址,该网址是调用 Cloud Functions 函数的 HTTP(S) 端点。它应如下所示:https://<region>-<project-id>.cloudfunctions.net/hello-monitor。
现在,触发 Cloud Functions 函数应该就像在该网址上使用 curl
命令一样简单。
$ curl https://<region>-<project-id>.cloudfunctions.net/hello-monitor Hello World!
现在使用 Vegeta,这是一款简单的 HTTP 负载测试工具。如需安装它,只需在 Cloud Shell 中输入以下命令即可:
$ go get -u github.com/tsenart/vegeta
如需向您的 Cloud Functions 函数发送一些流量(每秒发送五个请求,持续几分钟),请使用以下命令:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
5. 浏览日志
在 Cloud Functions 函数详细信息视图中,点击查看日志。
系统应该会将您引导至项目的 Stackdriver Logging 部分,该部分仅显示 Cloud Functions 函数日志。
向您的 Cloud Functions 函数发出的所有请求都应返回 200 状态代码。
查看日志时,您可以执行以下操作:
- 按日志级别过滤(在本例中,所有日志均为
debug
级别)。 - 选择特定时间范围(相对或绝对)。
- 启用日志流式传输(使用屏幕顶部的播放 )。
- 复制指向相应日志条目的链接(以便与团队成员分享)。
- 在资源上下文中显示日志条目。
- 固定日志条目(作为视觉提示)。
- 将日志导出至 BigQuery、Cloud Storage 或 Pub/Sub(或者直接下载 JSON 或 CSV 文件)。
6. 更新函数
使用 Cloud 控制台,前往函数详情视图,观察您与负载测试工具一起创建的每秒调用次数和执行时间峰值。
另一个用于观察延迟时间和 RPC 调用的详细工具是 Stackdriver Trace,但您需要先对 Cloud Functions 函数进行一些更改,然后才能使用该工具。执行以下操作:
- 将救命的
node-emoji
软件包添加为依赖项。 - 更新函数代码以使用 node-emoji 模块,并导致一些延迟。
- 添加一个环境变量,以便为 Cloud Functions 启用 Stackdriver Trace。
在函数详细信息中,点击修改以修改函数。
修改 package.json
文件,为 node-emoji
软件包添加依赖项。
{
"name": "sample-http",
"version": "0.0.1",
"dependencies": {
"node-emoji": "^1.8.1"
}
}
通过将 index.js
的内容更改为以下内容来修改实际函数:
const emoji = require('node-emoji');
exports.helloWorld = (req, res) => {
let message = req.query.message || req.body.message || 'Hello World!';
// add some latency, functions are too quick!
setTimeout(function() {
message += emoji.random().emoji;
res.status(200).send(message);
}, (3 * 100)); // 300ms
};
这会在 Cloud Functions 函数暂停 300 毫秒后,在它返回的消息中添加随机表情符号。
最后,添加一个名为 GOOGLE_CLOUD_TRACE_ENABLED
的 Cloud Functions 函数环境变量并设置为 true
,如下所示:
点击保存。
返回 Cloud Shell 并调用命令,以在新部署的 Cloud Functions 函数上生成一些负载:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
现在,您可以观察生成的跟踪记录列表了,无需其他设置要求,也无需在代码中使用特定的跟踪库!
7. 跟踪更新后的 Cloud Functions 函数
使用左侧菜单导航到 Stackdriver Trace 下的跟踪记录列表。
您应该会看到类似于以下屏幕截图的内容:
由此可以很明显地看出,Cloud Functions 函数中引入的延迟时间确实是 300 毫秒。
图表上的每个点都是一个请求,您可以查看其详细信息,例如时间戳、HTTP 方法和状态、其标签、指向相应日志条目的链接,以及 Cloud Functions 函数进行的任何后续 RPC 调用。
如果您想放大图表,只需点击并拖动图表即可。
如要缩小,请点击页面顶部的撤消缩放。
由于您部署了单个 Cloud Functions 函数,因此图表仅显示针对 hello-monitor
URI 的 GET
请求,但您可以按 HTTP 方法(GET、POST、DELETE)按 HTTP 状态(2XX、3XX)或使用请求过滤条件来过滤跟踪记录。
转到左侧菜单中的概览:
在此概览页面中,您可以找到最近的跟踪记录和其他数据分析。
您还可以根据 URI 请求过滤器、HTTP 方法、HTTP 状态和时间范围的组合创建自定义报告。您甚至可以将生成的值与时间基准进行比较。
如果您能利用足够多的数据点设置正确的时间范围,就可以生成报告,显示初始 Cloud Functions 函数和新 Cloud Functions 函数之间的重要延迟时间变化。
此类自定义报告可用于查找出现性能问题的时间,以及跟踪服务等级指标 (SLI),例如最终用户请求延迟时间。
8. 现在该清理资源了
此 Codelab 到此结束!
虽然 Cloud Functions 和 Stackdriver 工具是无服务器平台,在不使用时不会产生费用,但请做一个好的云公民,然后删除您的 Cloud Functions 函数。只需在 Cloud Functions 下的 Overview 中选择 hello-monitor
,然后点击 Delete 即可。
9. 接下来做什么?
下面是一些后续内容:
/