此 Codelab 旨在帮助您了解如何利用面向所有 Cloud Functions 开发者提供的日志记录和监控工具。这些工具附带了所有受支持的语言中每个部署的 Cloud Functions 函数,可提高您在编写和运行无服务器代码时的效率。
在本示例中,我们使用由 HTTP 触发的函数,但其涵盖的所有内容也适用于其他语言和其他事件触发的函数(如存储分区、Pub/Sub 等)。
自定进度的环境设置
如果您还没有 Google 帐号(Gmail 或 Google Apps),则必须创建一个。登录 Google Cloud Platform Console (console.cloud.google.com) 并创建一个新项目:
请记住项目 ID,它在所有 Google Cloud 项目中都是唯一名称(很抱歉,上述名称已被占用,您无法使用!)。它稍后将在此 Codelab 中被称为 PROJECT_ID
。
接下来,您需要在 Cloud Console 中启用结算功能,才能使用 Google Cloud 资源。
在此 Codelab 中运行仅花费几美元,但是如果您决定使用更多资源或继续让它们运行,费用可能更高(请参阅本文档末尾的“清理”部分)。
Google Cloud Platform 的新用户有资格获享 $300 免费试用。
Google Cloud Shell
虽然您可以从笔记本电脑远程使用 Google Cloud Functions 及其日志记录和监控功能,但在此 Codelab 中,我们将使用 Google Cloud Shell,这是一种在云端运行的命令行环境。
基于 Debian 的这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5GB 主目录,并在 Google Cloud 上运行,大大增强了网络性能和身份验证。这意味着在本 Codelab 中,您只需要一个浏览器(没错,它适用于 Chromebook)。
要激活 Google 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>
默认情况下,Cloud Shell 还会设置一些环境变量,这对您日后运行命令可能会很有用。
echo $GOOGLE_CLOUD_PROJECT
命令输出
<PROJECT_ID>
如果出于某种原因未设置项目,只需发出以下命令即可:
gcloud config set project <PROJECT_ID>
正在查找您的 PROJECT_ID
?请查看您在设置步骤中使用的 ID,或在控制台信息中心内查找:
重要提示:最后,设置默认可用区和项目配置:
gcloud config set compute/zone us-central1-f
您可以选择各种不同的可用区。如需了解详情,请参阅“区域和可用区”文档。
为了进行监控,让我们创建一个 Hello World Cloud Functions 函数。在控制台的左侧菜单中,点击“Cloud Functions”,然后点击“Create function
”:
为新函数命名“hello-monitor
”:
... 并保留源代码的所有默认值(不过,如果您愿意,可以选择其他语言/运行时):
最后,使用“Create
”按钮创建函数:
片刻之后,您应该会看到您的函数列为已可调用(如绿色对勾标记所示):
现在,Cloud Functions 函数已成功部署,我们将从命令行对其进行测试。
首先,使用 Cloud Shell 发出以下命令:
$ gcloud functions describe hello-monitor
这应该会返回函数的说明,包括 httpsTrigger
(即用来调用函数的 HTTP(S) 端点)的网址。其格式应为:https://<region>-<project-id>.cloudfunctions.net/hello-monitor
现在触发函数应该就像 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 函数(每秒 5 个请求并持续几分钟的时间),请使用以下命令:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
在函数详情视图中,点击右侧的“查看日志”菜单:
这应该会将您转到项目的 Stackdriver Logging 部分,仅显示您的 Cloud Functions 函数日志:
希望对函数的所有请求都返回 200 状态代码。
使用此日志查看器,您可以:
- 按日志级别过滤(在本例中,所有日志均为
Debug
级别) - 选择特定的时间范围(相对或绝对)
- 启用日志流式传输(屏幕顶部的“播放”按钮)
- 复制指向日志条目的链接(用于与团队成员共享)
- 在资源上下文中显示日志条目
- 固定日志条目(作为视觉提示)
- 将日志导出到 BigQuery、Cloud Storage 或 Cloud Pub/Sub(或者直接以 JSON 或 CSV 格式下载日志)
另请注意,在左上角选择器中,您可以按函数过滤日志。您还可以在窗口顶部的搜索栏中搜索标签或全文搜索。在我们的示例中,标签为 hello-monitor
(函数的名称)以及每个请求的执行标识符。
您也可以复制过滤条件以共享(请查看搜索框中的下拉菜单):
使用控制台导航到“函数详情”并查看并观察我们使用负载测试工具创建的峰值,包括每秒调用次数和执行时间:
另一种用于观察延迟时间和 RPC 调用的更详尽的工具是 Stackdriver Trace 功能,但在使用此功能之前,我们需要对函数做一些更改,即:
- 将保存
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
};
这将在函数暂停 300 毫秒后向该函数返回的消息添加一个随机表情符号。
最后,添加一个名为 GOOGLE_CLOUD_TRACE_ENABLED
的 Cloud Functions 函数环境变量,并将其设置为 true
,如下所示:
不要忘记点击“保存”!
现在,返回到 Cloud Shell 并调用命令,为新部署的函数生成一些负载:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
现在,我们可以观察生成的跟踪记录列表了,无需其他设置要求,也无需在您的代码中指定特定的跟踪库!
使用左侧菜单中导航到“跟踪记录”列表(在 Stackdriver Trace 下):
您应该会看到类似以下屏幕截图的内容:
这应该非常明显,我们的函数引入的延迟时间在 300 毫秒。
此图表上的每个点都是一个请求,您可以在其中查看详细信息,如时间戳、HTTP 方法和状态、其标签、返回相应日志条目的链接,以及该函数后续进行任何的 RPC 调用:
如果您想放大,只需点击并拖动图表:
要缩小显示,请点击页面顶部的“撤消缩放”按钮。
由于我们部署了单个函数,因此图表仅显示了针对 hello-monitor
URI 的 GET
请求,但您可以按 HTTP 方法(GET、POST、DELETE ...)或 HTTP 状态(2XX、3XX、...)或使用请求过滤器来过滤跟踪记录。
立即转到左侧菜单中的“跟踪记录”\“概览”部分:
在此概览页面中,您可以找到最近的跟踪记录和其他数据分析。
...以及基于 URI 请求过滤器、HTTP 方法、HTTP 状态和时间范围的组合创建自定义报告。甚至还可以将生成的值与时间基准进行比较:
如果您成功设置了正确的时间范围,并拥有足够的数据点,就可以生成报告,并看到初始函数与新函数之间的延迟时间波动情况:
此类自定义报告可用于找出性能问题出现的时间,以及跟踪服务等级指标 (SLI),例如最终用户请求延迟时间。
此 Codelab 已结束,本单元将介绍如何部署新的 Cloud Functions 函数、浏览其日志并观察其请求跟踪记录。
虽然 Cloud Functions 和 Stackdriver 工具都是无服务器平台,但是在不使用时不会产生任何费用,但作为一个良好的云公民,我们删除一下函数吧。
只需在 Cloud Functions 概览页面中选择 hello-monitor
函数,然后点击“删除”。
此简单的 Codelab 入门及 Cloud Functions 日志记录和跟踪记录到此结束!
下面提供了一些后续跟进内容:
- Stackdriver Monitoring 基于日志的指标
- Stackdriver Error Reporting
- ... 或者无服务器类别中的更多 Codelab
/