本页面介绍如何使用 Stackdriver、Prometheus 和 Grafana 进行日志记录和监控。如需了解有关可用配置选项的摘要,请参阅日志和监控概览。
使用 Stackdriver
以下部分介绍了如何将 Stackdriver 用于 GKE On-Prem 集群。
受监控的资源
受监控的资源是 Google 如何表示资源(如集群、节点、Pod 和容器)。如需了解详情,请参阅 Cloud Monitoring 的受监控的资源类型文档。
如需查询日志和指标,您需要了解以下资源标签:
project_id
:与 GKE On-Prem 集群关联的项目的项目 ID。location
:要存储 Stackdriver 日志的 GCP 区域。建议选择一个靠近您的本地数据中心的区域。您在安装期间提供了此值。cluster_name
:您在创建集群时选择的集群名称。您可以通过检查 Stackdriver 自定义资源来检索管理员或用户集群的
cluster_name
值:kubectl -n kube-system get stackdrivers stackdriver -o yaml | grep 'clusterName:'
访问日志数据
您可以使用 Google Cloud 控制台中的日志浏览器访问日志。例如,要访问容器的日志,请执行以下操作:
- 打开项目 Google Cloud 控制台中的日志浏览器。
- 通过以下方式查找容器的日志:
- 点击左上角的日志目录下拉框,然后选择 Kubernetes 容器。
- 选择集群名称,然后选择命名空间,然后从层次结构中选择容器。
访问指标数据
您可以使用 Metrics Explorer,从 3000 多个指标中进行选择。 要访问 Metrics Explorer,请执行以下操作:
在 Google Cloud Console 中,选择 Monitoring 或使用如下按钮:
选择资源 > Metrics Explorer。
访问 Stackdriver 元数据
通过指标间接使用元数据。当您在 Stackdriver Metrics Explorer 中过滤指标时,会看到按 metadata.systemLabels
和 metadata.userLabels
过滤指标的选项。系统标签是 Pod 的节点名称和服务名称等标签。用户标签是在 pod 规范“元数据”部分的 Kubernetes YAML 文件中分配给 pod 的标签。
Prometheus 和 Grafana
以下部分介绍了如何将 Prometheus 和 Grafana 与 GKE On-Prem 集群搭配使用。
从 Grafana 信息中心访问监控指标
Grafana 会显示从您的集群收集的指标。如需查看这些指标,您需要访问 Grafana 的信息中心:
获取在用户集群的
kube-system
命名空间中运行的 Grafana pod 的名称:kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system get pods
其中,[USER_CLUSTER_KUBECONFIG] 是用户集群的 kubeconfig 文件。
Grafana pod 中的容器侦听 TCP 端口 3000。您可以将本地端口转发到 pod 中的端口 3000,以便通过网络浏览器查看 Grafana 的信息中心。
例如,假设 pod 的名称为
grafana-0
。如需将端口 50000 转发到 pod 中的端口 3000,请输入以下命令:kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system port-forward grafana-0 50000:3000
在网络浏览器中,转到
http://localhost:50000
。加载用户集群的 Grafana 首页信息中心。如需访问其他信息中心,请点击页面左上角的首页下拉菜单。
如需查看使用 Grafana 的示例,请参阅创建 Grafana 信息中心。
访问提醒
Prometheus Alertmanager 会从 Prometheus 服务器收集提醒。您可以在 Grafana 信息中心查看这些提醒。如需查看提醒,您需要访问信息中心:
alertmanger-0
pod 中的容器侦听 TCP 端口 9093。将本地端口转发到 pod 中的 9093 端口:kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] port-forward \ -n kube-system alertmanager-0 50001:9093
在网络浏览器中,转到
http://localhost:50001
。
更改 Prometheus Alertmanager 配置
您可以通过修改用户集群的 monitoring.yaml
文件来更改 Prometheus Alertmanager 的默认配置。如果您希望将提醒指向特定目标位置,而不是将其保留在信息中心,则应执行此操作。您可以在 Prometheus 的配置文档中了解如何配置 Alertmanager。
如需更改 Alertmanager 配置,请执行以下步骤:
制作用户集群的
monitoring.yaml
清单文件的副本:kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system \ get monitoring monitoring-sample -o yaml > monitoring.yaml
如需配置 Alertmanager,请更改
spec.alertmanager.yml
下的字段。完成后,保存已更改的清单。将清单应用到您的集群:
kubectl apply --kubeconfig [USER_CLUSTER_KUBECONIFG] -f monitoring.yaml
扩缩 Prometheus 资源
默认监控配置最多支持五个节点。对于较大的集群,您可以调整 Prometheus Server 资源。建议每个集群节点使用 50 个毫核的 CPU 和 500Mi 内存。请确保您的集群包含两个节点,每个节点都有足够的资源来容纳 Prometheus。如需了解详情,请参阅调整用户集群的大小。
如需更改 Prometheus Server 资源,请执行以下步骤:
制作用户集群的
monitoring.yaml
清单文件的副本:kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system get monitoring monitoring-sample -o yaml > monitoring.yaml
如需替换资源,请更改
spec.resourceOverride
下的字段。完成后,保存已更改的清单。示例:spec: resourceOverride: - component: Prometheus resources: requests: cpu: 300m memory: 3000Mi limits: cpu: 300m memory: 3000Mi
将清单应用到您的集群:
kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] apply -f monitoring.yaml
创建 Grafana 信息中心
您已经部署了一个公开指标的应用,验证该指标是否已公开,并验证 Prometheus 是否会抓取该指标。现在,您可以将应用级指标添加到自定义 Grafana 信息中心。
如需创建 Grafana 信息中心,请执行以下步骤:
- 如有必要,请访问 Grafana。
- 在首页信息中心内,点击页面左上角的首页下拉菜单。
- 在右侧菜单中,点击新信息中心。
- 在新面板部分中,点击图表。系统会显示一个空的图表信息中心。
- 点击面板标题,然后点击修改。底部的图表面板将打开并显示指标标签页。
- 从数据源下拉菜单中选择用户。点击添加查询,然后在搜索字段中输入
foo
。 - 点击屏幕右上角的返回信息中心按钮。此时会显示您的信息中心。
- 如需保存信息中心,请点击屏幕右上角的保存信息中心。为信息中心选择一个名称,然后点击保存。
停用集群内监控
要停用集群内监控,请输入以下命令:
kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system delete monitoring monitoring-sample
示例:将应用级指标添加到 Grafana 信息中心
以下部分将引导您逐步添加应用的指标。在此部分中,您需要完成以下任务:
- 部署一个示例应用以公开名为
foo
的指标。 - 验证 Prometheus 是否会公开并抓取该指标。
- 创建一个自定义 Grafana 信息中心。
部署示例应用
示例应用在单个 pod 中运行。pod 的容器公开了 foo
指标,其常量值为 40
。
创建以下 pod 清单 pro-pod.yaml
:
apiVersion: v1
kind: Pod
metadata:
name: prometheus-example
annotations:
prometheus.io/scrape: 'true'
prometheus.io/port: '8080'
prometheus.io/path: '/metrics'
spec:
containers:
- image: k8s.gcr.io/prometheus-dummy-exporter:v0.1.0
name: prometheus-example
command:
- /bin/sh
- -c
- ./prometheus_dummy_exporter --metric-name=foo --metric-value=40 --port=8080
然后将 pod 清单应用到您的用户集群:
kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] apply -f pro-pod.yaml
验证指标是否已公开并已抓取
prometheus-example
pod 中的容器侦听 TCP 端口 8080。将本地端口转发到 pod 中的端口 8080:kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] port-forward prometheus-example 50002:8080
如需验证应用是否公开指标,请运行以下命令:
curl localhost:50002/metrics | grep foo
该命令返回以下输出:
# HELP foo Custom metric # TYPE foo gauge foo 40
prometheus-0
pod 中的容器侦听 TCP 端口 9090。将本地端口转发到 pod 中的端口 9090:kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] port-forward prometheus-0 50003:9090
如需验证 Prometheus 是否正在抓取指标,请转到 http://localhost:50003/targets,此网址应该会将您转到
prometheus-io-pods
目标组下的prometheus-0
pod。如需查看 Prometheus 格式的指标,请转到 http://localhost:50003/graph。在搜索字段中输入
foo
,然后点击执行。该页面应该会显示相应指标。