日志记录和监控

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

概览

您可以为 GKE On-Prem 集群提供多种日志记录和监控选项:

  • Cloud Logging 和 Cloud Monitoring,由使用 GKE On-Prem 部署的集群内代理启用。
  • Prometheus 和 Grafana,默认情况下处于停用状态。
  • 经过验证且适用于第三方解决方案的配置。

Cloud Logging 和 Monitoring

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

Stackdriver 代理可配置两个不同级别的日志记录和监控:

  • 仅限系统组件(默认)。
  • Stackdriver 已停用(停用之前,请参阅支持页面,了解如何将 Stackdriver 用于支持用途)。

如果客户需要一个易于配置且功能强大的云端可观测性解决方案,Stackdriver 是理想的解决方案。如果仅在 GKE On-Prem 上运行工作负载,或者在 GKE 和 GKE On-Prem 上运行工作负载,则强烈建议使用 Stackdriver。对于组件在 GKE On-Prem 和传统本地基础架构上运行的应用,您可以考虑采用其他解决方案来实现这些应用的端到端视图。

Prometheus 和 Grafana

Prometheus 和 Grafana 是两种热门的开源监控产品:

  • Prometheus 会收集应用和系统指标。
  • Alertmanager 使用多种不同的提醒机制来发出提醒。
  • Grafana 是一种信息中心工具。

您可以在每个管理员集群和用户集群上启用 Prometheus 和 Grafana。建议使用 Prometheus 和 Grafana 的对象:之前使用过这些产品的应用团队,或者希望在集群内保留应用指标的运营团队,以及网络连接断开时排查问题的团队。

第三方解决方案

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

以下解决方案指南适用于将第三方解决方案与 GKE On-Prem 搭配使用:

Stackdriver for GKE On-Prem 的工作原理

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

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

  • Stackdriver Operator (stackdriver-operator-*):管理部署到集群上的所有其他 Stackdriver 代理的生命周期。
  • 在 GKE On-Prem 安装过程中自动创建的 Stackdriver 自定义资源;用户可以随时更改自定义资源以更新值(例如项目 ID、集群名称和集群位置)。
  • Stackdriver Log Aggregator (stackdriver-log-aggregator-*):一个将日志发送到 Cloud Logging API 的 Fluentd StatefulSet;如果无法发送日志,则 Log Aggregator 会缓冲多达 200 GB 的日志条目,并且在之后 24 小时内尝试重新发送日志。如果缓冲区已满或 Log Aggregator 超过 24 小时无法访问 Logging API,则日志将会被丢弃。
  • Stackdriver Log Forwarder (stackdriver-log-forwarder-*):一个 Fluentbit daemonset,用于将每台机器的日志转发到 Stackdriver Log Aggregator
  • Stackdriver Metrics Collector (stackdriver-prometheus-k8s-):一个 Prometheus 和 Stackdriver Prometheus Sidecar StatefulSet,用于将 Prometheus 指标发送到 Cloud Logging API。
  • Stackdriver Metadata Collector (stackdriver-metadata-agent-):一个部署,用于将 Pod、部署、节点等 Kubernetes 资源的元数据发送到 Stackdriver Resource Metadata API;这些数据用于通过部署名称、节点名称甚至 Kubernetes 服务名称进行查询来丰富指标查询。

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

  kubectl -n kube-system get pods | grep stackdriver

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

stackdriver-log-aggregator-0                  1/1     Running   0   4h31m
stackdriver-log-aggregator-1                  1/1     Running   0   4h28m
stackdriver-log-forwarder-bpf8g               1/1     Running   0   4h31m
stackdriver-log-forwarder-cht4m               1/1     Running   0   4h31m
stackdriver-log-forwarder-fth5s               1/1     Running   0   4h31m
stackdriver-log-forwarder-kw4j2               1/1     Running   0   4h29m
stackdriver-metadata-agent-cluster-level...   1/1     Running   0   4h31m
stackdriver-operator-76ddb64d57-4tcj9         1/1     Running   0   4h37m
stackdriver-prometheus-k8s-0                  2/2     Running   0   4h31m

为 GKE On-Prem 配置 Stackdriver 代理

与 GKE On-Prem 一起安装的 Stackdriver 代理会根据您的设置和配置收集有关系统组件的数据,以便通过以下模式之一维护 GKE On-Prem 集群以及排查其问题:

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

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

Stackdriver 已停用

您可以通过删除 Stackdriver 自定义资源来完全停用 Stackdriver 代理。在停用 Stackdriver 之前,请参阅支持页面,详细了解停用操作会如何影响 Google Cloud 支持的服务等级协议 (SLA)。

要为 GKE On-Prem 停用 Stackdriver,请运行以下命令:

kubectl -n kube-system delete stackdrivers stackdriver

Stackdriver 代理会根据您的存储和保留配置捕获本地存储的数据。通过使用有权将数据写入安装时指定的 Google Cloud 项目的服务帐号,系统会将数据复制到该项目。如上所述,Stackdriver 代理可以随时停用,Stackdriver 代理收集的数据可以像其他指标和日志数据一样被管理和删除(如 Stackdriver 文档中所述)。

Stackdriver 的配置要求

要使用 GKE On-Prem 启用 Stackdriver,需要满足一些配置要求。这些步骤包含在准备安装中,具体如下所示。

  1. Cloud Monitoring 工作区必须在 Google Cloud 项目中创建。如需实现此目的,请点击 Google Cloud 控制台中的 Monitoring 并按照工作流操作。
  2. 您需要启用以下 Stackdriver API:
    1. Stackdriver API
    2. Cloud Monitoring API
    3. Cloud Logging API
  3. 您需要将以下 IAM 角色分配给 Stackdriver 代理使用的服务帐号:
    1. logging.logWriter
    2. monitoring.metricWriter
    3. stackdriver.resourceMetadata.writer

价格

除了标准 Cloud Logging 免费配额,Anthos 还额外增加了 Cloud Logging 免费配额。

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

适用于 GKE On-Prem 的 Prometheus 和 Grafana 的工作原理

每个 GKE On-Prem 集群都是使用默认部署的 Prometheus 和 Grafana 实例创建的。

Prometheus Server 采用高可用性配置,该配置有两个副本在两个单独的节点上运行。资源要求已调整,以支持运行多达 5 个节点的集群,其中每个节点最多可处理 30 个提供自定义指标的 Pod。Prometheus 有一个专用的 PersistentVolume,其磁盘空间已预先分配以保存保留期限为 4 天的数据,另外还有一个额外的安全缓冲区。

管理员控制层面和每个用户集群都有一个可以单独进行配置的专用监控堆栈。每个管理员集群和用户集群都包含一个监控堆栈,该堆栈提供一系列功能:用于监控的 Prometheus Server、用于实现可观测性的 Grafana,以及用于提醒的 Prometheus Alertmanager。

所有监控端点、传输的指标数据和监控 API 均使用 mTLS 和 RBAC 规则通过 Istio 组件进行保护。只有集群管理员可以访问监控数据。

Prometheus 收集的指标

Prometheus 从管理员控制层面和用户集群中收集以下指标和元数据:

  • 资源使用情况,例如 Pod 和节点上的 CPU 利用率。
  • Kubernetes 控制层面指标。
  • 在节点上运行的插件和 Kubernetes 系统组件(例如 kubelet)的指标。
  • 集群状态,例如某个 Deployment 中的 Pod 运行状况。
  • 应用指标。
  • 机器指标,例如网络、熵和 inode。

多集群监控

管理员集群上安装的 Prometheus 和 Grafana 实例经过专门配置,可提供整个 GKE On-Prem 实例(包括管理员集群和每个用户集群)的数据洞见。这将允许您:

  • 使用 Grafana 信息中心访问所有用户集群和管理员集群中的指标。
  • 在 Grafana 信息中心查看各个用户集群的指标;这些指标可用于以全分辨率显示的直接查询。
  • 访问用户集群的节点级层和工作负载指标(工作负载指标仅限于在 kube-system 命名空间中运行的工作负载),以查看汇总查询、信息中心和提醒。
  • 为特定集群配置提醒。