配置日志记录和监控

Google Distributed Cloud 包含多个集群日志记录和监控选项,其中包括云端代管式服务、开源工具,以及经过验证的与第三方商业解决方案的兼容性。本页介绍了这些选项,并为您选择适合您环境的正确解决方案提供了一些基本指导。

Google Distributed Cloud 的方案

您可以为 Google Distributed Cloud 提供多种日志记录和监控选项:

  • Cloud Logging 和 Cloud Monitoring,在 Bare Metal 系统组件上默认启用。
  • Prometheus 和 Grafana,可从 Cloud Marketplace 获取。
  • 经过验证且适用于第三方解决方案的配置。

Cloud Logging 和 Cloud Monitoring

Google Cloud Observability 是 Google Cloud 的内置可观测性解决方案。它提供了全代管式日志记录解决方案、指标收集、监控、信息中心和提醒。Cloud Monitoring 监控 Google Distributed Cloud 集群的方式与云端 GKE 集群类似。

代理可配置为更改日志记录和监控的范围,以及收集的指标级别:

  • 日志记录和监控范围可以设置为仅限系统组件(默认值),也可以针对系统组件和应用进行设置。
  • 可以为一组优化的指标(默认值)或所有指标配置收集的指标级别。

如需了解详情,请参阅本文档中的为 Google Distributed Cloud 配置 Stackdriver 代理

Logging 和 Monitoring 提供了单一、易于配置且基于云的强大可观测性解决方案。在 Google Distributed Cloud 上运行工作负载时,我们强烈建议使用 Logging 和 Monitoring。对于组件在 Google Distributed Cloud 和标准本地基础架构上运行的应用,您可以考虑采用其他解决方案来端到端查看这些应用。

Prometheus 和 Grafana

Prometheus 和 Grafana 是 Cloud Marketplace 中提供的两款热门的开源监控产品:

  • Prometheus 会收集应用和系统指标。

  • Alertmanager 使用多种不同的提醒机制来发送提醒。

  • Grafana 是一种信息中心工具。

我们建议您使用基于 Cloud Monitoring 的 Google Cloud Managed Service for Prometheus,以满足您的所有监控需求。借助 Google Cloud Managed Service for Prometheus,您可以免费监控系统组件。Google Cloud Managed Service for Prometheus 还与 Grafana 兼容。但是,如果您更喜欢纯本地监控系统,则可以选择在集群中安装 Prometheus 和 Grafana。

如果您在本地安装了 Prometheus,并希望从系统组件收集指标,则需要向本地 Prometheus 实例授予访问系统组件的指标端点的权限:

  • 将 Prometheus 实例的服务帐号绑定到预定义的 gke-metrics-agent ClusterRole,并将服务帐号令牌用作凭据,以便从以下系统组件中抓取指标:

    • kube-apiserver
    • kube-scheduler
    • kube-controller-manager
    • kubelet
    • node-exporter
  • 使用存储在 kube-system/stackdriver-prometheus-etcd-scrape Secret 中的客户端密钥和证书对从 etcd 中抓取的指标进行身份验证。

  • 创建 NetworkPolicy,以允许从命名空间访问 kube-state-metrics。

第三方解决方案

Google 与多个第三方日志记录和监控解决方案提供商合作,帮助他们的产品与 Google Distributed Cloud 很好地搭配使用。这些提供方包括 Datadog、Elastic 和 Splunk。将来我们会添加经过验证的其他第三方。

以下解决方案指南适用于将第三方解决方案与 Google Distributed Cloud 搭配使用:

适用于 Google Distributed Cloud 的 Logging 和 Monitoring 的工作原理

创建新管理员集群或用户集群时,系统会在每个集群中安装并激活 Cloud Logging 和 Cloud Monitoring。

Stackdriver 代理在每个集群上都包含多个组件:

  • Stackdriver Operator (stackdriver-operator-*):管理部署到集群上的所有其他 Stackdriver 代理的生命周期。

  • Stackdriver Custom Resource:在 Google Distributed Cloud 安装过程中自动创建的资源。

  • GKE Metrics Agent (gke-metrics-agent-*)。一个基于 OpenTelemetry 收集器的 DaemonSet,用于将每个节点的指标爬取到 Cloud Monitoring。 此外,还包括 node-exporter DaemonSet 和 kube-state-metrics 部署,以提供有关集群的更多指标。

  • Stackdriver Log Forwarder (stackdriver-log-forwarder-*)。一个 Fluent Bit DaemonSet,用于将日志从每台机器转发到 Cloud Logging。日志转发器将日志条目在本地缓冲,并在最长 4 小时内将重新发送这些日志条目。如果缓冲区已满,或者日志转发器达到 Cloud Logging API 时间超过 4 小时时,日志会被丢弃。

  • 元数据代理 (stackdriver-metadata-agent-):一种部署,用于将 Pod、部署或节点等 Kubernetes 资源的元数据发送到 Config Monitoring for Ops API;通过这些数据,您可以按部署名称、节点名称甚至 Kubernetes 服务名称进行查询,从而丰富指标查询。

您可以通过运行以下命令查看 Stackdriver 安装的代理:

kubectl -n kube-system get pods -l "managed-by=stackdriver"

此命令的输出类似如下所示:

kube-system   gke-metrics-agent-4th8r                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-8lt4s                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-dhxld                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-lbkl2                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-pblfk                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-qfwft                                     1/1     Running   1 (40h ago)   40h
kube-system   kube-state-metrics-9948b86dd-6chhh                          1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-5s4pg                                         1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-d9gwv                                         1/1     Running   2 (40h ago)   40h
kube-system   node-exporter-fhbql                                         1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-gzf8t                                         1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-tsrpp                                         1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-xzww7                                         1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-log-forwarder-8lwxh                             1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-log-forwarder-f7cgf                             1/1     Running   2 (40h ago)   40h
kube-system   stackdriver-log-forwarder-fl5gf                             1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-log-forwarder-q5lq8                             1/1     Running   2 (40h ago)   40h
kube-system   stackdriver-log-forwarder-www4b                             1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-log-forwarder-xqgjc                             1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-metadata-agent-cluster-level-5bb5b6d6bc-z9rx7   1/1     Running   1 (40h ago)   40h

Cloud Monitoring 指标

如需查看 Cloud Monitoring 收集的指标列表,请参阅查看 Google Distributed Cloud 指标

为 Google Distributed Cloud 配置 Stackdriver 代理

随 Google Distributed Cloud 一起安装的 Stackdriver 代理会收集有关系统组件的数据,用于维护和排查集群问题。以下部分介绍了 Stackdriver 配置和操作模式。

仅限系统组件(默认模式)

安装后,Stackdriver 代理会默认配置为收集 Google 所提供系统组件的日志和指标,包括性能详情(如 CPU 和内存利用率)和类似元数据。这些组件包括管理员集群中的所有工作负载,以及用户集群的 kube-system、gke-system、gke-connect、istio-system、config-management-system 命名空间中的工作负载。

系统组件和应用

如需在默认模式的基础上启用应用日志记录和监控,请按照启用应用日志记录和监控中的步骤操作。

优化的指标(默认指标)

默认情况下,集群中运行的 kube-state-metrics 部署会收集一组经过优化的 kube 指标并报告给 Google Cloud Observability(以前称为 Stackdriver)。

收集这组优化的指标需要的资源较少,这可以提高整体性能和可伸缩性。

如需停用优化的指标(不推荐),请替换 Stackdriver 自定义资源中的默认设置。

为选定的系统组件使用 Google Cloud Managed Service for Prometheus

Google Cloud Managed Service for Prometheus 是 Cloud Monitoring 的一部分,可用作系统组件的选项。Google Cloud Managed Service for Prometheus 具有以下优势:

  • 您可以继续使用基于 Prometheus 的现有监控,而无需更改提醒和 Grafana 信息中心。

  • 如果您同时使用 GKE 和 Google Distributed Cloud,则可以对所有集群上的指标使用相同的 Prometheus 查询语言 (PromQL)。您还可以使用 Google Cloud 控制台的 Metrics Explorer 中的 PromQL 标签页。

启用和停用 Google Cloud Managed Service for Prometheus

Google Distributed Cloud 默认启用 Google Cloud Managed Service for Prometheus。

如需停用 Google Cloud Managed Service for Prometheus,请执行以下操作:

  1. 打开名为 stackdriver 的 Stackdriver 对象进行修改:

    kubectl --kubeconfig CLUSTER_KUBECONFIG --namespace kube-system \
        edit stackdriver stackdriver
    
  2. 添加 enableGMPForSystemMetrics 特性门控,并将其设置为 false

    apiVersion: addons.gke.io/v1alpha1
    kind: Stackdriver
    metadata:
      name: stackdriver
      namespace: kube-system
    spec:
      featureGates:
        enableGMPForSystemMetrics: false
    
  3. 关闭修改会话。

查看指标数据

enableGMPForSystemMetrics 设置为 true 时,以下组件的指标因在 Cloud Monitoring 中的存储和查询方式而具有不同的格式:

  • kube-apiserver
  • kube-scheduler
  • kube-controller-manager
  • kubelet 和 cadvisor
  • kube-state-metrics
  • node-exporter

在新格式中,您可以使用 PromQL 或 Monitoring Query Language (MQL) 查询上述指标:

PromQL

PromQL 查询示例:

histogram_quantile(0.95, sum(rate(apiserver_request_duration_seconds_bucket[5m])) by (le))

MQL

如需使用 MQL,请将受监控的资源设置为 prometheus_target,使用前缀为 kubernetes.io/anthos 的指标名称,并将 Prometheus 类型作为后缀添加到指标名称中。

fetch prometheus_target
| metric 'kubernetes.io/anthos/apiserver_request_duration_seconds/histogram'
| align delta(5m)
| every 5m
| group_by [], [value_histogram_percentile: percentile(value.histogram, 95)]

使用 Google Cloud Managed Service for Prometheus 配置 Grafana 信息中心

如需将 Grafana 与来自 Google Cloud Managed Service for Prometheus 的指标数据搭配使用,您必须先配置 Grafana 数据源并对其进行身份验证。如需配置数据源并对其进行身份验证,您可以使用数据源同步程序 (datasource-syncer) 生成 OAuth2 凭据,并通过 Grafana 数据源 API 将其同步到 Grafana。数据源同步程序会将 Cloud Monitoring API 设置为 Grafana 中数据源下的 Prometheus 服务器网址(网址值以 https://monitoring.googleapis.com 开头)。

按照使用 Grafana 进行查询中的步骤对 Grafana 数据源进行身份验证和配置,以查询来自 Google Cloud Managed Service for Prometheus 的数据。

GitHub 上的 anthos-samples 代码库中提供了一组示例 Grafana 信息中心。如需安装示例信息中心,请执行以下操作:

  1. 下载示例 JSON 文件:

    git clone https://github.com/GoogleCloudPlatform/anthos-samples.git
    cd anthos-samples/gmp-grafana-dashboards
    
  2. 如果您的 Grafana 数据源是使用 Managed Service for Prometheus 创建的名称不同的,请更改所有 JSON 文件中的 datasource 字段:

    sed -i "s/Managed Service for Prometheus/[DATASOURCE_NAME]/g" ./*.json
    

    [DATASOURCE_NAME] 替换为 Grafana 中指向 Prometheus frontend 服务的数据源名称。

  3. 通过浏览器访问 Grafana 界面,然后在信息中心菜单下选择 + 导入

    前往 Grafana 中的信息中心导入。

  4. 上传 JSON 文件,或复制并粘贴文件内容并选择 Load。成功加载文件内容后,选择 Import。您还可以根据需要在导入之前更改信息中心名称和 UID。

    在 Grafana 中导入信息中心。

  5. 如果您的 Google Distributed Cloud 和数据源配置正确,导入的信息中心应该会成功加载。例如,以下屏幕截图显示了 cluster-capacity.json 配置的信息中心。

    Grafana 中的集群容量信息中心。

其他资源

如需详细了解 Google Cloud Managed Service for Prometheus,请参阅以下内容:

配置 Stackdriver 组件资源

当您创建集群时,Google Distributed Cloud 会自动创建 Stackdriver 自定义资源。您可以在自定义资源中修改规范,以替换 Stackdriver 组件的 CPU 和内存请求及限制的默认值,也可以单独替换优化的指标默认设置。

替换 Stackdriver 组件的默认 CPU 及内存请求和限制

pod 密度较高的集群引入了较高的日志记录和监控开销。在极端情况下,Stackdriver 组件可能会报告接近 CPU 和内存利用率限制,资源限制甚至可能导致持续重启。在这种情况下,如需替换 Stackdriver 组件的 CPU 和内存请求以及限制的默认值,请按以下步骤操作:

  1. 运行以下命令,在命令行编辑器中打开您的 Stackdriver 自定义资源:

    kubectl -n kube-system edit stackdriver stackdriver
  2. 在 Stackdriver 自定义资源中的 spec 字段下添加 resourceAttrOverride 部分:

    resourceAttrOverride:
          DAEMONSET_OR_DEPLOYMENT_NAME/CONTAINER_NAME:
            LIMITS_OR_REQUESTS:
              RESOURCE: RESOURCE_QUANTITY

    请注意,resourceAttrOverride 部分将替换指定组件的所有现有默认限制和请求。resourceAttrOverride 支持以下组件:

    • gke-metrics-agent/gke-metrics-agent
    • stackdriver-log-forwarder/stackdriver-log-forwarder
    • stackdriver-metadata-agent-cluster-level/metadata-agent
    • node-exporter/node-exporter
    • kube-state-metrics/kube-state-metrics

    示例文件如下所示:

    apiVersion: addons.gke.io/v1alpha1
    kind: Stackdriver
    metadata:
      name: stackdriver
      namespace: kube-system
    spec:
      anthosDistribution: baremetal
      projectID: my-project
      clusterName: my-cluster
      clusterLocation: us-west-1a
      resourceAttrOverride:
        gke-metrics-agent/gke-metrics-agent:
          requests:
            cpu: 110m
            memory: 240Mi
          limits:
            cpu: 200m
            memory: 4.5Gi
  3. 如需保存对 Stackdriver 自定义资源的更改,请保存并退出命令行编辑器。

  4. 检查 Pod 的运行状况:

    kubectl -n kube-system get pods -l "managed-by=stackdriver"

    健康的 Pod 的响应如下所示:

    gke-metrics-agent-4th8r                1/1     Running   1   40h
  5. 检查组件的 Pod 规范,确保资源设置正确。

    kubectl -n kube-system describe pod POD_NAME

    POD_NAME 替换为您刚刚更改的 Pod 的名称。例如 gke-metrics-agent-4th8r

    回答如下所示:

      Name:         gke-metrics-agent-4th8r
      Namespace:    kube-system
      ...
      Containers:
        gke-metrics-agent:
          Limits:
            cpu: 200m
            memory: 4.5Gi
          Requests:
            cpu: 110m
            memory: 240Mi
          ...

停用优化的指标

默认情况下,集群中运行的 kube-state-metrics 部署会收集一组优化的 kube 指标并报告给 Stackdriver。如果您需要额外的指标,我们建议您从 Google Distributed Cloud 指标列表中查找替代指标。

以下是一些您可能使用的替代指标示例:

已停用的指标 替代指标
kube_pod_start_time container/uptime
kube_pod_container_resource_requests container/cpu/request_cores
container/memory/request_bytes
kube_pod_container_resource_limits container/cpu/limit_cores
container/memory/limit_bytes

如需停用优化指标默认设置(不推荐),请执行以下操作:

  1. 在命令行编辑器中打开 Stackdriver 自定义资源:

    kubectl -n kube-system edit stackdriver stackdriver
  2. optimizedMetrics 字段设置为 false

    apiVersion: addons.gke.io/v1alpha1
    kind: Stackdriver
    metadata:
    name: stackdriver
    namespace: kube-system
    spec:
    anthosDistribution: baremetal
    projectID: my-project
    clusterName: my-cluster
    clusterLocation: us-west-1a
    optimizedMetrics: false
    
  3. 保存更改并退出命令行编辑器。

指标服务器

Metrics Server 是各种自动扩缩流水线的容器资源指标的来源。Metrics Server 会从 kubelet 检索指标,并通过 Kubernetes Metrics API 公开这些指标。然后,HPA 和 VPA 将使用这些指标来确定何时触发自动扩缩。Metrics Server 使用插件调整器进行扩缩。

在高 Pod 密度导致过多日志记录和监控开销的极端情况下,资源限制可能导致 Metrics Server 停止并重新启动。在这种情况下,您可以通过修改 gke-managed-metrics-server 命名空间中的 metrics-server-config configmap 并更改 cpuPerNodememoryPerNode 的值,为指标服务器分配更多资源。

kubectl edit cm metrics-server-config -n gke-managed-metrics-server

ConfigMap 的示例内容如下:

apiVersion: v1
data:
  NannyConfiguration: |-
    apiVersion: nannyconfig/v1alpha1
    kind: NannyConfiguration
    cpuPerNode: 3m
    memoryPerNode: 20Mi
kind: ConfigMap

更新 ConfigMap 后,使用以下命令重新创建指标服务器 Pod:

kubectl delete pod -l k8s-app=metrics-server -n gke-managed-metrics-server

Logging 和 Monitoring 的配置要求

如需使用 Google Distributed Cloud 启用 Cloud Logging 和 Cloud Monitoring,需要满足一些配置要求。这些步骤包含在“启用 Google 服务”页面上的配置服务账号以与 Logging 和 Monitoring 搭配使用中,具体如下列出:

  1. Cloud Monitoring 工作区必须在 Cloud 项目中创建。如需实现此目的,请点击 Google Cloud 控制台中的 Monitoring 并按照工作流操作。
  2. 您需要启用以下 Stackdriver API:

  3. 您需要将以下 IAM 角色分配给 Stackdriver 代理使用的服务账号:

    • logging.logWriter
    • monitoring.metricWriter
    • stackdriver.resourceMetadata.writer
    • monitoring.dashboardEditor
    • opsconfigmonitoring.resourceMetadata.writer

价格

Google Kubernetes Engine (GKE) Enterprise 版本的系统日志和指标是免费的。

在 Google Distributed Cloud 集群中,Google Kubernetes Engine (GKE) Enterprise Edition 系统日志和指标包含以下内容:

  • 管理员集群中所有组件的日志和指标
  • 用户集群的以下命名空间中组件的日志和指标:kube-systemgke-systemgke-connectknative-servingistio-systemmonitoring-systemconfig-management-systemgatekeeper-systemcnrm-system

如需了解详情,请参阅 Google Cloud 可观测性价格

如需了解 Cloud Logging 指标的赠送金额,请与销售人员联系了解价格