使用日志记录和监控

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

使用 Stackdriver

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

受监控的资源

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

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

  • project_id:与 GKE On-Prem 集群关联的项目的项目 ID
  • location:您在安装期间提供的集群位置。
  • cluster_name:您在创建集群时选择的集群名称。

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

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

访问日志数据

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

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

访问指标数据

您可以通过 Google Cloud 控制台中的 Metrics Explorer 访问指标。您可以从 3000 多个指标中进行选择。

访问 Stackdriver 元数据

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

Prometheus 和 Grafana

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

从 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,然后点击执行。该页面应该会显示相应指标。