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 和标准本地基础架构上运行的应用,您可以考虑使用其他解决方案来端到端查看这些应用。
如需详细了解架构、配置以及默认复制到 Google Cloud 项目的数据,请参阅 Google Distributed Cloud 的 Logging 和 Monitoring 的工作原理。
如需详细了解 Logging,请参阅 Cloud Logging 文档。
如需详细了解 Monitoring,请参阅 Cloud Monitoring 文档。
如需了解如何在舰队级别查看和使用 Google Distributed Cloud 的 Cloud Monitoring 资源利用率指标,请参阅使用 Google Kubernetes Engine (GKE) Enterprise 版本概览。
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
密钥中的客户端密钥和证书对来自 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 小时时,日志会被丢弃。Metadata Agent (
stackdriver-metadata-agent-
)。一种部署,用于将 Pod、Deployment 或节点等 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 Cloud Managed Service for Prometheus 在 Google Distributed Cloud 中默认启用。
如需停用 Google Cloud Managed Service for Prometheus,请执行以下操作:
打开名为
stackdriver
的 Stackdriver 对象进行修改:kubectl --kubeconfig CLUSTER_KUBECONFIG --namespace kube-system \ edit stackdriver stackdriver
添加
enableGMPForSystemMetrics
特性门控,并将其设置为false
:apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: featureGates: enableGMPForSystemMetrics: false
关闭修改会话。
查看指标数据
将 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 信息中心。如需安装示例信息中心,请执行以下操作:
下载示例 JSON 文件:
git clone https://github.com/GoogleCloudPlatform/anthos-samples.git cd anthos-samples/gmp-grafana-dashboards
如果您的 Grafana 数据源创建时使用了与
Managed Service for Prometheus
不同的名称,请更改所有 JSON 文件中的datasource
字段:sed -i "s/Managed Service for Prometheus/[DATASOURCE_NAME]/g" ./*.json
将 [DATASOURCE_NAME] 替换为 Grafana 中指向 Prometheus
frontend
服务的数据源名称。通过浏览器访问 Grafana 界面,然后在信息中心菜单下选择 + 导入。
上传 JSON 文件,或复制并粘贴文件内容,然后选择 Load。文件内容成功加载后,选择 Import。您还可以根据需要在导入之前更改信息中心名称和 UID。
如果您的 Google Distributed Cloud 和数据源配置正确,则导入的信息中心应该会成功加载。例如,以下屏幕截图显示了
cluster-capacity.json
配置的信息中心。
其他资源
如需详细了解 Google Cloud Managed Service for Prometheus,请参阅以下内容:
配置 Stackdriver 组件资源
当您创建集群时,Google Distributed Cloud 会自动创建 Stackdriver 自定义资源。您可以在自定义资源中修改规范,以替换 Stackdriver 组件的 CPU 和内存请求及限制的默认值,也可以单独替换优化的指标默认设置。
替换 Stackdriver 组件的默认 CPU 及内存请求和限制
pod 密度较高的集群引入了较高的日志记录和监控开销。在极端情况下,Stackdriver 组件可能会报告接近 CPU 和内存利用率限制,资源限制甚至可能导致持续重启。在这种情况下,如需替换 Stackdriver 组件的 CPU 和内存请求以及限制的默认值,请按以下步骤操作:
运行以下命令,在命令行编辑器中打开您的 Stackdriver 自定义资源:
kubectl -n kube-system edit stackdriver stackdriver
在 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
如需保存对 Stackdriver 自定义资源的更改,请保存并退出命令行编辑器。
检查 Pod 的运行状况:
kubectl -n kube-system get pods -l "managed-by=stackdriver"
健康的 Pod 的响应如下所示:
gke-metrics-agent-4th8r 1/1 Running 1 40h
检查组件的 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 |
如需停用优化指标默认设置(不推荐),请执行以下操作:
在命令行编辑器中打开 Stackdriver 自定义资源:
kubectl -n kube-system edit stackdriver stackdriver
将
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
保存更改并退出命令行编辑器。
指标服务器
Metrics Server 是各种自动扩缩流水线的容器资源指标的来源。Metrics Server 会从 kubelet 检索指标,并通过 Kubernetes Metrics API 公开这些指标。然后,HPA 和 VPA 将使用这些指标来确定何时触发自动扩缩。Metrics Server 使用插件调整器进行扩缩。
在高 Pod 密度导致过多日志记录和监控开销的极端情况下,资源限制可能导致 Metrics Server 停止并重新启动。在这种情况下,您可以通过修改 gke-managed-metrics-server 命名空间中的 metrics-server-config
configmap 并更改 cpuPerNode
和 memoryPerNode
的值,为指标服务器分配更多资源。
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 搭配使用中,具体如下列出:
- Cloud Monitoring 工作区必须在 Cloud 项目中创建。如需实现此目的,请点击 Google Cloud 控制台中的 Monitoring 并按照工作流操作。
您需要启用以下 Stackdriver API:
您需要将以下 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 版本的系统日志和指标包括以下内容:
- 管理员集群中所有组件的日志和指标
- 用户集群的以下命名空间中组件的日志和指标:
kube-system
、gke-system
、gke-connect
、knative-serving
、istio-system
、monitoring-system
、config-management-system
、gatekeeper-system
、cnrm-system
如需了解详情,请参阅 Google Cloud 可观测性的价格。
如需了解 Cloud Logging 指标的赠送金额,请与销售人员联系了解价格。