从 Kubernetes 工作流中收集日志

借助 Google Distributed Cloud (GDC) 网闸隔离配置中的日志收集功能,您可以汇总 Kubernetes 工作流中的运维事件,以便进行监控和问题排查。在 Management API 服务器中部署 LoggingTarget 自定义资源,以从 Kubernetes 工作器节点虚拟机 (VM) 中拉取、编入索引和标记项目日志。此流水线不支持从独立用户虚拟机收集日志。

配置日志收集后,您可以在 Grafana 中或通过 Log Query API 查询和查看日志。如需了解插桩建议,请参阅 Kubernetes 日志记录指南。

准备工作

如需获得管理 LoggingTarget 自定义资源所需的权限,请让您的 IAM 组织管理员或 IAM 项目管理员为您授予关联的 LoggingTarget 角色之一。

根据您需要的访问权限和权限级别,您可能会在组织或项目中获得此资源的创建者、编辑者或查看者角色。如需了解详情,请参阅准备 IAM 权限。

配置 LoggingTarget 自定义资源

LoggingTarget 自定义资源会指示日志记录流水线收集 GDC 项目中的日志。您可以指定要收集日志的目标、日志解析器、访问权限级别以及任何其他设置。

此资源定义了以下配置:

  • 目标:用于选择要从中收集日志的 Pod 和容器的条件。您可以指定集群名称、Pod 名称前缀和容器名称前缀。
  • 日志分析器:一种预定义的解析器,用于解读日志条目、将日志输出映射到标签,以及提取相关字段。
  • 服务标识:作为标签应用于日志条目的服务名称,以便于识别和过滤。
  • 授权:日志条目的访问权限级别,用于控制谁可以查看收集的日志。

通过在 LoggingTarget 自定义资源中配置这些参数,您可以精确控制日志的收集和组织。

请按照以下步骤收集操作日志:

  1. 确定要从中收集日志的 GDC 项目。
  2. 在 LoggingTarget 配置中,指定用于收集操作日志的 Pod、项目命名空间以及任何其他设置。

    以下 YAML 文件展示了 my-project-namespace 中的 LoggingTarget 配置示例,其中要从中收集日志的 Pod 名称前缀为 my-pod-prefix,日志条目的访问权限级别授予了应用运维人员 (ao),服务名称为 my-service-name,日志格式为 JSON:

    # Configures a log scraping job
    apiVersion: logging.gdc.goog/v1
    kind: LoggingTarget
    metadata:
      # Choose a namespace that matches the namespace of the workload pods.
      namespace: my-project-namespace
      name: my-logging-target
    spec:
      selector:
        matchPodNames:
          - my-pod-prefix
      parser: json
      logAccessLevel: ao
      serviceName: my-service-name
    

    如需了解其他字段和选项,请参阅完整的 LoggingTarget 规范和 API 参考文档。

  3. 将 LoggingTarget 配置应用于与目标 Pod 位于同一命名空间内的 Management API 服务器:

    kubectl --kubeconfig KUBECONFIG_PATH apply -f LOGGING_TARGET_NAME.yaml
    

    替换以下内容:

    • KUBECONFIG_PATH:Management API 服务器的 kubeconfig 文件的路径。
    • LOGGING_TARGET_NAME:LoggingTarget 定义文件的名称,例如 my-logging-target。

    日志记录流水线开始从项目的其他组件收集日志。

您可以使用 Grafana 界面或 Log Query API 查询收集的日志。如需了解详情,请参阅查询和查看日志。

如果您使用 Grafana 查询日志,则可以针对不同的日志级别使用内置的颜色编码功能。如需详细了解如何设置日志级别值,请参阅 https://grafana.com/docs/grafana/latest/explore/logs-integration/。

完整的 LoggingTarget 规范

以下 YAML 文件展示了 LoggingTarget 自定义资源的完整规范示例。如需了解详情和字段的完整说明,请参阅 API 参考文档。

# Configures a log scraping job
apiVersion: logging.gdc.goog/v1
kind: LoggingTarget
metadata:
  # Choose a namespace that matches the namespace of the workload pods.
  namespace: PROJECT_NAMESPACE
  name: LOGGING_TARGET_NAME
spec:
  # Choose a matching pattern that identifies the pods for this job.
  # Optional.
  # Relationship between different selectors: 'AND'
  selector:
    # The clusters to collect logs from.
    # The default configuration is to collect logs from all clusters.
    # The relationship between different clusters is an 'OR' relationship.
    # Optional
    matchClusters:
    - my-cluster
    - another-cluster

    # The pod name prefixes to collect logs from.
    # The logging platform scrapes all pods with names
    # that start with the specified prefixes.
    # The values must contain '[a-z0-9-]' characters only.
    # The relationship between different list elements is an 'OR' relationship.
    # Optional.
    matchPodNames:
      - my-pod-prefix
      - another-pod-prefix

    # The container name prefixes to collect logs from.
    # The logging platform scrapes all containers with names
    # that start with the specified prefixes.
    # The values must contain '[a-z0-9-]' characters only.
    # The relationship between different list elements is an 'OR' relationship.
    # Optional.
    matchContainerNames:
      - my-container-prefix
      - another-container-prefix

  # Choose the predefined parser for log entries.
  # Use parsers to map the log output to labels and extract fields.
  # Specify the log format.
  # Optional.
  # Options: klog_text, klog_json, klogr, gdch_json, json
  parser: klog_text

  # Specify an access level for log entries.
  # The default value is 'ao'.
  # Optional.
  # Options: ao, pa, io
  logAccessLevel: ao

  # Specify a service name to be applied as a label.
  # For user workloads consider this field as a workload name.
  # Required.
  serviceName: my-service-name

  # The additional static fields to apply to log entries.
  # The field is a key-value pair, where the field name is the key and
  # the field value is the value.
  # Optional.
  additionalFields:
    app: workload2
    key: value

替换以下内容:

  • PROJECT_NAMESPACE:您的项目命名空间。
  • LOGGING_TARGET_NAME:LoggingTarget 定义文件的名称。