本文档介绍了默认日志记录吞吐量以及如何提高吞吐量。
启用系统日志记录后,系统会自动部署和管理专用的 Logging 代理。它在集群中的所有 GKE 节点上运行,以收集日志,添加有关容器、pod 和集群的有用元数据,然后使用基于 fluentbit 的代理将日志发送到 Cloud Logging。
对于系统和工作负载日志,专用 Logging 代理至少提供每个节点 100 KiB/秒的日志吞吐量。如果节点利用率过低,则根据日志负载的类型(例如,文本或结构化日志条目、节点上的极少数容器或多个容器),专用 Logging 代理可能会提供高达 500 KiB/秒或更多的吞吐量。此外,在具有 GKE 控制平面 1.23.13-gke.1000 或更高版本的集群中,Logging 代理允许至少具有 2 个未使用 CPU 核心的节点具有高达 10 MiB/秒的吞吐量。但请注意,如果吞吐量较高,某些日志可能会丢失。
确定日志吞吐量更高的节点
默认情况下,GKE 集群会收集系统指标。系统指标 kubernetes.io/node/logs/input_bytes
提供节点上每秒生成的日志字节数。此指标可帮助您确定 Logging 代理的哪个变体需要部署在集群或节点池中。
如需查看集群中每个节点的历史日志记录吞吐量,请按照以下步骤操作:
-
在 Google Cloud 控制台中,转到 leaderboard Metrics Explorer 页面:
如果您使用搜索栏查找此页面,请选择子标题为监控的结果。
在选择指标字段中,输入
kubernetes.io/node/logs/input_bytes
。在分组依据字段中,选择 project_id、location、cluster_name 和 node_name。
点击确定。
选择性地点击指标列表上方的列标题值,按降序对指标列表进行排序。
如需了解由系统组件或节点上运行的工作负载引起的日志记录量,您还可以按类型指标标签分组。
启用高吞吐量日志记录
如果任何 GKE 节点要求每秒日志吞吐量超过 100 KiB,并且 GKE Standard 集群使用控制平面 1.23.13-gke.1000 或更高版本,则您可以配置 GKE 以部署 Logging 代理的替代配置,旨在最大限度地提高日志记录吞吐量。此最大吞吐量 Logging 变体允许每个节点 10 MiB/秒的最大吞吐量。您可以将此高吞吐量 Logging 代理部署到集群中的所有节点或节点池中的所有节点。
这种高吞吐量配置将消耗额外的 CPU 和内存。
gcloud CLI
如需在新集群中的所有节点上启用高吞吐量日志记录,请执行以下命令:
gcloud container clusters create CLUSTER_NAME \
--location=COMPUTE_LOCATION \
--logging-variant=MAX_THROUGHPUT \
--machine-type=MACHINE_TYPE
替换以下内容:
CLUSTER_NAME
:新集群的名称。COMPUTE_LOCATION
:新集群的 Compute Engine 位置。MACHINE_TYPE
:具有足够的 Logging 代理 CPU 的机器类型,例如e2-standard-8
。
此集群中所有新创建的节点池(包括默认节点池)都会部署高吞吐量 Logging 代理。
如需确认是否已为现有集群设置高吞吐量日志记录,请使用 gcloud container cluster describe
命令:
gcloud container clusters describe CLUSTER_NAME \
--location=COMPUTE_LOCATION \
--format="value(nodePoolDefaults[].loggingConfig.variantConfig.variant)"
替换以下内容:
CLUSTER_NAME
:集群的名称。COMPUTE_LOCATION
:集群的 Compute Engine 位置。
如需为现有集群配置高吞吐量日志记录,请使用 gcloud container clusters update
命令:
gcloud container clusters update CLUSTER_NAME \
--location=COMPUTE_LOCATION \
--logging-variant=MAX_THROUGHPUT
替换以下内容:
CLUSTER_NAME
:集群的名称。COMPUTE_LOCATION
:集群的 Compute Engine 位置。
如需创建使用高吞吐量 Logging 代理的新节点池,请使用 gcloud container node-pools create
命令:
gcloud container node-pools create NODEPOOL_NAME \
--cluster=CLUSTER_NAME \
--location=COMPUTE_LOCATION \
--logging-variant=MAX_THROUGHPUT
替换以下内容:
NODEPOOL_NAME
:新节点池的名称。CLUSTER_NAME
:集群的名称。COMPUTE_LOCATION
:新集群的 Compute Engine 位置。
如需确认是否已为现有节点池设置高吞吐量日志记录,请使用 gcloud container node-pools describe
命令:
gcloud container node-pools describe NODEPOOL_NAME \
--cluster=CLUSTER_NAME \
--location=COMPUTE_LOCATION \
--format="value(config.loggingConfig.variantConfig.variant)"
替换以下内容:
NODEPOOL_NAME
:节点池的名称。CLUSTER_NAME
:集群的名称。COMPUTE_LOCATION
:Compute Engine 位置。
如需更新现有节点池,请使用 gcloud container node-pools update
命令。
gcloud container node-pools update NODEPOOL_NAME \
--cluster=CLUSTER_NAME \
--location=COMPUTE_LOCATION \
--logging-variant=MAX_THROUGHPUT
替换以下内容:
NODEPOOL_NAME
:节点池的名称。CLUSTER_NAME
:集群的名称。COMPUTE_LOCATION
:Compute Engine 位置。
Terraform
以下代码块指定如何声明带有或不带高吞吐量日志记录的节点池。
如需明确管理节点池,必须指定没有默认节点池的集群。
resource "google_container_cluster" "with_example_logging_variants" {
provider = google
name = "CLUSTER_NAME"
location = "COMPUTE_LOCATION"
initial_node_count = 1
remove_default_node_pool = true # We want to manage our node pools separately.
}
如需指定使用高吞吐量代理的节点池,请使用 node_config
字段将 Logging 代理变体指定为 MAX_THROUGHPUT
和相应的机器类型:
resource "google_container_node_pool" "with_example_logging_variant" {
provider = google
name = "example-node-pool-with-htl"
cluster = google_container_cluster.with_example_logging_variants.name
location = "COMPUTE_LOCATION"
node_config {
logging_variant = "MAX_THROUGHPUT"
# Use a machine type with enough CPU to accommodate the high-throughput agent, such as e2-standard-8.
machine_type = "e2-standard-8"
}
node_count = 1
}
如需指定使用默认代理的节点池,请使用 node_config
字段将 Logging 代理变体指定为 DEFAULT
:
resource "google_container_node_pool" "with_default_logging_variant" {
provider = google
name = "example-node-pool-with-default-logging"
cluster = google_container_cluster.with_example_logging_variants.name
location = "COMPUTE_LOCATION"
node_config {
logging_variant = "DEFAULT"
}
node_count = 1
}
停用高吞吐量日志记录
如果您不想再使用高吞吐量 Logging 代理,请将默认 Logging 代理部署到集群或节点池。
gcloud CLI
在创建或更新集群或节点池时,传递标志 --logging-variant=DEFAULT
。
如需在新集群中的所有节点上使用默认日志记录代理,请执行以下操作:
gcloud container clusters create CLUSTER_NAME \
--location=COMPUTE_LOCATION \
--logging-variant=DEFAULT \
--machine-type=MACHINE_TYPE
替换以下内容:
CLUSTER_NAME
:新集群的名称。COMPUTE_LOCATION
:新集群的 Compute Engine 位置。MACHINE_TYPE
:具有足够的 Logging 代理 CPU 的机器类型,例如e2-standard-8
。
如需在现有集群上使用默认的日志记录代理,请使用 gcloud container clusters update
命令:
gcloud container clusters update CLUSTER_NAME \
--location=COMPUTE_LOCATION \
--logging-variant=DEFAULT
替换以下内容:
CLUSTER_NAME
:集群的名称。COMPUTE_LOCATION
:集群的 Compute Engine 位置。
如需为新的节点池使用默认日志记录代理,请使用 gcloud container node-pools create
命令:
gcloud container node-pools create NODEPOOL_NAME \
--cluster=CLUSTER_NAME \
--location=COMPUTE_LOCATION \
--logging-variant=DEFAULT
替换以下内容:
NODEPOOL_NAME
:新节点池的名称。CLUSTER_NAME
:集群的名称。COMPUTE_LOCATION
:新集群的 Compute Engine 位置。
如需更新现有节点池,请使用 gcloud container node-pools update
命令:
gcloud container node-pools update NODEPOOL_NAME \
--cluster=CLUSTER_NAME \
--location=COMPUTE_LOCATION \
--logging-variant=DEFAULT
替换以下内容:
NODEPOOL_NAME
:节点池的名称。CLUSTER_NAME
:集群的名称。COMPUTE_LOCATION
:Compute Engine 位置。
Terraform
如果您不再希望 Terraform 创建使用高吞吐量 Logging 代理的节点池,请将 logging_variant
字段设置为 DEFAULT
。
后续步骤
- 了解如何控制日志提取。