本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
日志记录
创建虚拟节点和虚拟网关时,您可以选择配置 Envoy 访问日志。在控制台中,这位于虚拟节点和虚拟网关创建或编辑工作流程的日志记录部分中。
上图显示了 Envoy 访问日志 /dev/stdout
的日志记录路径。
对于format
,请指定两种可能的格式之一,json
或 text
和模式。json
获取密钥对并将其转换为 JSON 结构,然后再将其传递给 Envoy。
以下代码块显示了可在 AWS 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
格式化程序
在 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
您可以使用 CloudWatch 来收集日志信息和指标。您可以在 App Mesh 文档的导出指标部分找到有关 CloudWatch 的更多信息。