本页面介绍了如何将 Cloud Logging 和 Cloud Monitoring 与 Media CDN 的服务扩展插件搭配使用。
日志记录
本部分介绍了媒体 CDN 插件的服务扩展日志,以及如何查看和关联日志消息中的信息。
日志消息
Service Extensions 支持在插件执行期间生成日志消息。默认情况下,日志记录处于停用状态。如需记录插件的日志,请在创建插件或更新插件时启用日志记录。
插件日志记录会添加以下上下文信息注释:
- 标准日志注释,例如时间戳和日志级别。
- 生成消息的插件的身份。
- 生成日志消息的插件回调。
- 一个
requestId跟踪标识符,用于帮助确定日志消息与哪个请求日志相关联。
与服务扩展程序相关的日志属于以下类别之一:
插件日志消息
由日志记录调用生成,例如 Rust 的
info!(...)、Go 的proxywasm.LogInfo(...)或 C++ 的LOG_INFO。Service Extensions 会将这些日志消息导出到 Cloud Logging。您可以记录请求和响应标头以及插件已采取的任何操作。您可以使用
networkservices.googleapis.com服务查看这些消息。媒体 CDN 日志消息
针对向具有关联 Wasm 操作的
EdgeCacheService资源发出的 HTTP 请求的媒体 CDN 日志消息。这些是可在edgecache.googleapis.com服务下查看的常规 Media CDN 日志条目。
为插件启用日志记录
Service Extensions 支持在插件执行期间生成日志消息。默认情况下,日志记录处于停用状态。
如需记录插件的日志,请在创建插件或更新插件时启用日志记录。
如需为现有插件启用日志记录,请使用 gcloud beta service-extensions wasm-plugins update 命令:
gcloud beta service-extensions wasm-plugins update WASM_PLUGIN \
--log-config=[LOG_CONFIG,...]
替换以下内容:
WASM_PLUGIN:插件的 ID 或完全限定名称LOG_CONFIG:插件的日志记录选项。如需启用日志记录,请将enable选项设置为true。然后,指定以下详细信息:sample-rate:活动日志的抽样率,介于0和1之间的值。值0表示不存储日志消息。默认值1表示存储所有日志消息。一个介于0.0和1.0之间的浮点值,表示存储的日志消息百分比。min-log-level:要导出到 Cloud Logging 的插件日志消息的最低严重程度级别。默认值为INFO。
如需查看日志,请在 Google Cloud 控制台中前往 Logs Explorer 页面。
查看日志消息
您可以在 Logs Explorer 中构建查询来查看日志。
您可以将插件日志视为独立的服务扩展日志。在此视图中,每个插件日志消息都会记录在自己的日志记录中,并且不会自动与请求日志信息相关联。
这些日志消息位于资源类型为 networkactions.googleapis.com/WasmPluginVersion 的 networkactions.googleapis.com/wasm_plugin_activity 日志中。
系统还可能会向此日志添加信息性日志消息。例如,如果插件调用超出 CPU 或内存限制时发生插件故障,系统会记录严重程度为 ERROR 的消息。您还可以在查看和过滤错误中看到此类消息。
您还可以在 Logs Explorer 中查看与相应 Media CDN 请求日志相关联的日志消息。在查看请求日志时,当您展开某个请求日志条目时,与该请求相关的插件日志会嵌套显示在相应请求日志下方。此视图有助于您了解插件日志及其关联请求的上下文。
日志示例
假设有一个 Service Extensions 日志条目示例。message 的值会传递给插件的 LOG_INFO 调用。severity 值取决于插件日志调用中使用的日志级别。在 labels 部分中,API 的值为 HTTP_REQUEST_HEADER,表示记录的操作是 on_http_request_headers 插件回调。
{
"insertId": "65224aac-0000-24bd-a0e1-582429bd544c@a1",
"jsonPayload": {
"@type": "type.googleapis.com/google.cloud.networkactions.logging.v1.WasmPluginLogEntry",
"metroIataCode": "ber",
"proxyRegionCode": "DE",
"message": "[add_header_plugin.cc:26]::onRequestHeaders() AddHeaderStreamContext::onRequestHeaders called",
"requestId": "effc0311-6716-431b-9e2a-7586835fdff1"
},
"resource": {
"type": "networkactions.googleapis.com/WasmPluginVersion",
"labels": {
"plugin_version": "prod-1",
"resource_container": "projects/123456789",
"location": "global",
"plugin_name": "add-headers-plugin-prod-resource"
}
},
"timestamp": "2023-05-10T03:05:43.317015458Z",
"severity": "INFO",
"labels": {
"networkactions.googleapis.com/operation": "HTTP_REQUEST_HEADERS"
},
"logName": "projects/123456789/logs/networkactions.googleapis.com%2Fwasm_plugin_activity",
"trace": "projects/123456789/traces/effc0311-6716-431b-9e2a-7586835fdff1",
"receiveTimestamp": "2023-05-10T03:05:44.207265284Z"
}
requestId 和 trace 值相同。
{
"insertId": "6c95cc54-0000-26ba-ba73-f403043c328c@a1",
"jsonPayload": {
"cacheMode": "USE_ORIGIN_HEADERS",
"@type": "type.googleapis.com/google.cloud.edgecache.v1.EdgeCacheLogEntry",
"wasmAction": "add-headers-action-prod-resource",
"cacheKeyFingerprint": "f04d02bb12f2e79e",
"proxyStatus": "Google-Edge-Cache",
"clientCity": "Erlangen",
"clientAsn": "8881",
"origin": "example-origin",
"cacheId": "ber",
"tlsVersion": "NONE",
"latency": "0.002840304s",
"originIp": "142.250.145.128",
"requestId": "effc0311-6716-431b-9e2a-7586835fdff1",
"clientRegionCode": "DE",
"originalRequestId": "7656c418-df7c-4ae5-9db5-4f247ec5a82c",
"httpTtfb": "0.002814903s",
"metroIataCode": "BER",
"proxyRegionCode": "DE",
"cacheStatus": "hit"
},
"httpRequest": {
"requestMethod": "GET",
"requestUrl": "https://example.com/image.jpg",
"requestSize": "1631",
"status": "200",
"responseSize": "402907",
"userAgent": "Wtrace",
"remoteIp": "2001:1438:1:19::5",
"protocol": "HTTP/1.1"
},
"resource": {
"type": "edgecache.googleapis.com/EdgeCacheRouteRule",
"labels": {
"location": "global",
"route_destination": "projects/123456789/locations/global/edgeCacheOrigins/example-origin",
"matched_path": "/turing/",
"route_type": "ORIGIN",
"path_matcher_name": "routes",
"resource_container": "projects/123456789",
"service_name": "example-service"
}
},
"timestamp": "2023-05-10T03:05:43.321347304Z",
"logName": "projects/bdn-prober/logs/edgecache.googleapis.com%2Fedge_cache_request",
"trace": "projects/1069774196212/traces/effc0311-6716-431b-9e2a-7586835fdff1",
"receiveTimestamp": "2023-05-10T03:05:49.919781008Z"
}
限制
插件每次客户端 HTTP 请求最多只能记录 16 KiB 的载荷数据。此金额会分摊到与给定 HTTP 请求关联的多个日志记录调用中。此限制仅适用于日志消息文本,不适用于服务扩展程序添加到日志记录的其他元数据。
例如,如果 on_http_request_headers 回调发出两次日志记录调用,每次调用都包含 4 KiB 的消息,然后 on_http_response_headers 回调尝试针对同一 HTTP 请求发出三次日志记录调用,每次调用都包含 4 KiB 的消息,则第三条日志记录消息会被舍弃。添加了一个日志消息,用于记录丢弃的插件生成的日志消息数量。
监控
本部分介绍如何使用 Cloud Monitoring 信息中心查看媒体 CDN 插件的服务扩展指标。
如需详细了解 Service Extensions 指标类型,请参阅Google Cloud 指标页面。
查看 Service Extensions 的 Monitoring 信息中心
如需查看服务扩展的“监控”信息中心,请执行以下操作:
- 在 Google Cloud 控制台中,前往服务扩展程序页面。
- 点击插件标签页。
- 点击插件名称。
- 在插件详情页面上,点击监控标签页。
- 如需查看插件生命周期操作的指标,请从操作过滤条件列表中选择值。默认情况下,系统会选择值
HTTP request header和HTTP response header。 - 如需查看特定插件版本的指标,请从插件版本过滤条件列表中选择一个值。默认情况下,系统会显示所有版本的指标。
- 如需更改要查看数据的时间段,请从时间选择器中选择一个预定义的时间段,或点击自定义并指定开始时间和结束时间。默认情况下,选择器设置为
1 day。
在监控页面上,指标图表会显示有助于您监控插件性能的信息。
Service Extensions 的插件指标
您可以从服务扩展的角度监控插件的以下指标。这些指标的前缀为 networkactions.googleapis.com/wasm_plugin/。表中的条目省略了此前缀。
| 指标类型 | 显示名
种类、类型、单位 说明 |
|---|---|
invocation_count
|
Wasm 插件调用次数
DELTA、INT64、1
所选时间段内插件的调用次数。每次插件回调调用都算作一次单独的插件调用。 |
invocation_latencies
|
Wasm 插件调用延迟时间
DELTA、DISTRIBUTION、us
插件的本地执行时间(以毫秒为单位)。 相应指标包含每个回调的标签分隔条目。 |
cpu/usage_times
|
Wasm 插件的归一化 CPU 使用情况
DELTA、DISTRIBUTION、us{CPU}
插件调用的 CPU 使用时间,以微秒为单位。 |
memory/bytes_used
|
Wasm 插件内存使用情况
GAUGE、DISTRIBUTION、By
Wasm 插件虚拟机分配的总内存(以字节为单位)。 |
媒体 CDN 的插件指标
您可以从 Media CDN 的角度监控插件的以下指标。指标类型字符串具有此前缀:edgecache.googleapis.com/edge_cache_route_rule/network_actions/。表中的条目省略了此前缀。
| 指标类型 | 显示名
种类、类型、单位 说明 |
|---|---|
wasm_action_invocation_count
|
服务扩展调用次数
DELTA、INT64、1
媒体 CDN 在所选时间范围内处理的服务扩展调用次数。 |
wasm_action_invocation_latencies
|
服务扩展程序调用延迟时间
DELTA、DISTRIBUTION、us
Media CDN 调度和执行插件所用的总时间(以毫秒为单位)。该指标包含服务扩展程序回调的标签分隔条目。 |