使用日志记录和监控

本页面介绍如何使用 Stackdriver、Prometheus 和 Grafana 进行日志记录和监控。如需了解有关可用配置选项的摘要,请参阅日志和监控概览

使用 Stackdriver

以下部分介绍了如何将 Stackdriver 用于 GKE On-Prem 集群。

受监控的资源

受监控的资源是 Google 如何表示资源(如集群、节点、Pod 和容器)。如需了解详情,请参阅 Cloud Monitoring 的受监控的资源类型文档。

如需查询日志和指标,您需要了解以下资源标签:

  • project_id:与 GKE On-Prem 集群关联的项目的项目 ID
  • location:要存储 Stackdriver 日志和指标的 GCP 区域。建议选择一个靠近您的本地数据中心的区域。在安装过程中,您在 GKE On-Prem 配置文件的 stackdriver.clusterlocation 字段中提供了此值。
  • cluster_name:您在创建集群时选择的集群名称。

    您可以通过检查 Stackdriver 自定义资源来检索管理员或用户集群的 cluster_name 值:

      kubectl -n kube-system get stackdrivers stackdriver -o yaml | grep 'clusterName:'

访问日志数据

您可以使用 Cloud Console 中的日志浏览器访问日志。例如,要访问容器的日志,请执行以下操作:

  1. 打开项目 Cloud Console 中的日志浏览器
  2. 通过以下方式查找容器的日志:
    1. 点击左上角的日志目录下拉框,然后选择 Kubernetes 容器
    2. 选择集群名称,然后选择命名空间,然后从层次结构中选择容器。

访问指标数据

您可以使用 Metrics Explorer,从 1500 多个指标中进行选择。如需访问 Metrics Explorer,请执行以下操作:

  1. 在 Google Cloud Console 中,选择 Monitoring 或使用如下按钮:

    转到“监控”

  2. 选择资源 > Metrics Explorer

访问 Stackdriver 元数据

通过指标间接使用元数据。当您在 Stackdriver Metrics Explorer 中过滤指标时,会看到按 metadata.systemLabelsmetadata.userLabels 过滤指标的选项。系统标签是 Pod 的节点名称和服务名称等标签。用户标签是在 pod 规范“元数据”部分的 Kubernetes YAML 文件中分配给 pod 的标签。

Prometheus 和 Grafana

以下部分介绍了如何将 Prometheus 和 Grafana 与 GKE On-Prem 集群搭配使用。

启用 Prometheus 和 Grafana

从 GKE On-Prem 1.2 版开始,您可以选择是启用还是停用 Prometheus 和 Grafana。在新的用户集群中,Prometheus 和 Grafana 默认处于停用状态。

  1. 您的用户集群有一个名为 monitoring-sample 的 Monitoring 对象。打开要修改的对象:

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] edit \
       monitoring monitoring-sample --namespace kube-system

    其中,[USER_CLUSTER_KUBECONFIG] 是用户集群的 kubeconfig 文件。

  2. 如需启用 Prometheus 和 Grafana,请将 enablePrometheus 设置为 true。如需停用 Prometheus 和 Grafana,请将 enablePrometheus 设置为 false

    apiVersion: addons.k8s.io/v1alpha1
    kind: Monitoring
    metadata:
     labels:
       k8s-app: monitoring-operator
     name: monitoring-sample
     namespace: kube-system
    spec:
     channel: stable
     ...
     enablePrometheus: true
  3. 关闭修改会话以保存更改。

已知问题

在用户集群中,升级时会自动停用 Prometheus 和 Grafana。不过,配置和指标数据不会丢失。

如需解决此问题,请在升级后打开 monitoring-sample 进行修改,并将 enablePrometheus 设置为 true

从 Grafana 信息中心访问监控指标

Grafana 会显示从您的集群收集的指标。如需查看这些指标,您需要访问 Grafana 的信息中心:

  1. 获取在用户集群的 kube-system 命名空间中运行的 Grafana pod 的名称:

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system get pods

    其中,[USER_CLUSTER_KUBECONFIG] 是用户集群的 kubeconfig 文件。

  2. 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
  3. 在网络浏览器中,转到 http://localhost:50000。加载用户集群的 Grafana 首页信息中心。

  4. 如需访问其他信息中心,请点击页面左上角的首页下拉菜单。

如需查看使用 Grafana 的示例,请参阅创建 Grafana 信息中心

访问提醒

Prometheus Alertmanager 会从 Prometheus 服务器收集提醒。您可以在 Grafana 信息中心查看这些提醒。如需查看提醒,您需要访问信息中心:

  1. alertmanger-0 pod 中的容器侦听 TCP 端口 9093。将本地端口转发到 pod 中的 9093 端口:

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] port-forward \
       -n kube-system alertmanager-0 50001:9093
  2. 在网络浏览器中,转到 http://localhost:50001

更改 Prometheus Alertmanager 配置

您可以通过修改用户集群的 monitoring.yaml 文件来更改 Prometheus Alertmanager 的默认配置。如果您希望将提醒指向特定目标位置,而不是将其保留在信息中心,则应执行此操作。您可以在 Prometheus 的配置文档中了解如何配置 Alertmanager。

如需更改 Alertmanager 配置,请执行以下步骤:

  1. 制作用户集群的 monitoring.yaml 清单文件的副本:

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system \
       get monitoring monitoring-sample -o yaml > monitoring.yaml
  2. 如需配置 Alertmanager,请更改 spec.alertmanager.yml 下的字段。完成后,保存已更改的清单。

  3. 将清单应用到您的集群:

    kubectl apply --kubeconfig [USER_CLUSTER_KUBECONIFG] -f monitoring.yaml

扩缩 Prometheus 资源

默认监控配置最多支持五个节点。对于较大的集群,您可以调整 Prometheus Server 资源。建议每个集群节点使用 50 个毫核的 CPU 和 500Mi 内存。请确保您的集群包含两个节点,每个节点都有足够的资源来容纳 Prometheus。如需了解详情,请参阅调整用户集群的大小

如需更改 Prometheus Server 资源,请执行以下步骤:

  1. 制作用户集群的 monitoring.yaml 清单文件的副本:

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system get monitoring monitoring-sample -o yaml > monitoring.yaml
  2. 如需替换资源,请更改 spec.resourceOverride 下的字段。完成后,保存已更改的清单。示例:

    spec:
      resourceOverride:
      - component: Prometheus
        resources:
          requests:
            cpu: 300m
            memory: 3000Mi
          limits:
            cpu: 300m
            memory: 3000Mi
    
  3. 将清单应用到您的集群:

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] apply -f monitoring.yaml

创建 Grafana 信息中心

您已经部署了一个公开指标的应用,验证该指标是否已公开,并验证 Prometheus 是否会抓取该指标。现在,您可以将应用级指标添加到自定义 Grafana 信息中心。

如需创建 Grafana 信息中心,请执行以下步骤:

  1. 如有必要,请访问 Grafana
  2. 在首页信息中心内,点击页面左上角的首页下拉菜单。
  3. 在右侧菜单中,点击新信息中心
  4. 新面板部分中,点击图表。系统会显示一个空的图表信息中心。
  5. 点击面板标题,然后点击修改。底部的图表面板将打开并显示指标标签页。
  6. 数据源下拉菜单中选择用户。点击添加查询,然后在搜索字段中输入 foo
  7. 点击屏幕右上角的返回信息中心按钮。此时会显示您的信息中心。
  8. 如需保存信息中心,请点击屏幕右上角的保存信息中心。为信息中心选择一个名称,然后点击保存

停用集群内监控

要停用集群内监控,请输入以下命令:

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

验证指标是否已公开并已抓取

  1. prometheus-example pod 中的容器侦听 TCP 端口 8080。将本地端口转发到 pod 中的端口 8080:

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] port-forward prometheus-example 50002:8080
  2. 如需验证应用是否公开指标,请运行以下命令:

    curl localhost:50002/metrics | grep foo
    

    该命令返回以下输出:

    # HELP foo Custom metric
    # TYPE foo gauge
    foo 40
  3. prometheus-0 pod 中的容器侦听 TCP 端口 9090。将本地端口转发到 pod 中的端口 9090:

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] port-forward prometheus-0 50003:9090
  4. 如需验证 Prometheus 是否正在抓取指标,请转到 http://localhost:50003/targets,此网址应该会将您转到 prometheus-io-pods 目标组下的 prometheus-0 pod。

  5. 如需查看 Prometheus 格式的指标,请转到 http://localhost:50003/graph。在搜索字段中输入 foo,然后点击执行。该页面应该会显示相应指标。