日志记录 - Amazon App Mesh
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

日志记录

创建虚拟节点和虚拟网关时,您可以选择配置 Envoy 访问日志。在控制台中,这位于虚拟节点和虚拟网关创建或编辑工作流程的日志记录部分中。

上图显示了 Envoy 访问日志 /dev/stdout 的日志记录路径。

对于format,请指定两种可能的格式之一json text和模式。json 获取密钥对并将其转换为 JSON 结构,然后再将其传递给 Envoy。

以下代码块显示了可在 Amazon CLI 中使用的 JSON 表示形式。

"logging": { "accessLog": { "file": { "path": "/dev/stdout", "format" : { // Exactly one of json or text should be specified "json": [ // json will be implemented with key pairs { "key": "string", "value": "string" } ] "text": "string" //e.g. "%LOCAL_REPLY_BODY%:%RESPONSE_CODE%:path=%REQ(:path)%\n" } } } }
重要

请务必检查您的输入模式是否对 Envoy 有效,否则 Envoy 将拒绝更新并将最新的更改存储在 error state 中。

当您向 /dev/stdout 发送 Envoy 访问日志时,它们会与 Envoy 容器日志混在一起。您可以使用标准 Docker 日志驱动程序(例如 awslogs)将它们导出到日志存储和处理服务(例如 CloudWatch Logs)。有关更多信息,请参阅《Amazon ES3 开发人员指南》中的使用 awslogs 日志驱动程序。要仅导出 Envoy 访问日志(而忽略其他 Envoy 容器日志),可以 ENVOY_LOG_LEVEL 将设置为 off。您可以通过包含格式字符串 %REQ_WITHOUT_QUERY(X?Y):Z% 来记录不带查询字符串的请求。有关示例,请参阅ReqWithoutQuery 格式化程序。有关更多信息,请参阅 Envoy 文档中的访问日志记录

在 Kubernetes 上启用访问日志

使用适用于 Kubernetes 的 App Mesh Controller 时,您可以通过将日志配置添加到虚拟节点规范中,为虚拟节点配置访问日志,如以下示例所示。

--- apiVersion: appmesh.k8s.aws/v1beta2 kind: VirtualNode metadata: name: virtual-node-name namespace: namespace spec: listeners: - portMapping: port: 9080 protocol: http serviceDiscovery: dns: hostName: hostname logging: accessLog: file: path: "/dev/stdout"

您的集群必须有日志转发器才能收集这些日志,例如 Fluentd。有关更多信息,请参阅将 Set up Fluentd 设置为 DaemonSet,以将日志发送到 CloudWatch Logs

Envoy 还会将各种调试日志从其过滤器写入 stdout。这些日志对于深入了解 Envoy 与 App Mesh 的通信以及服务到服务的流量非常有用。可以使用 ENVOY_LOG_LEVEL 环境变量配置您的特定日志级别。例如,以下文本来自调试日志示例,该日志显示 Envoy 为特定 HTTP 请求匹配的集群。

[debug][router] [source/common/router/router.cc:434] [C4][S17419808847192030829] cluster 'cds_ingress_howto-http2-mesh_color_client_http_8080' match for URL '/ping'

Firelens 和 Cloudwatch

Firelens 是一款容器日志路由器,您可以用来收集 Amazon ECS 和 Amazon Fargate 的日志。您可以在我们的示例存储库中找到使用 Firelens 的Amazon示例

您可以使用 CloudWatch 来收集日志信息和指标。您可以在 App Mesh 文档的导出指标部分找到有关 CloudWatch 的更多信息。