日志和指标

本页面介绍了 Google Distributed Cloud Connected 如何记录有关其运行的各种类型的信息,以及如何查看这些信息。收集某些类型的日志和指标会产生额外费用。如需了解详情,请参阅日志和指标的结算

配置日志记录和监控

您必须先执行以下操作,然后才能开始收集日志和指标:

  1. 使用以下命令启用日志记录 API:

    gcloud services enable opsconfigmonitoring.googleapis.com --project PROJECT_ID
    gcloud services enable logging.googleapis.com --project PROJECT_ID
    gcloud services enable monitoring.googleapis.com --project PROJECT_ID
    

    PROJECT_ID 替换为目标 Google Cloud 项目的 ID。

  2. 授予写入日志和指标所需的角色:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --role roles/opsconfigmonitoring.resourceMetadata.writer \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[kube-system/metadata-agent]"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --role roles/logging.logWriter \
         --member "serviceAccount:PROJECT_ID.svc.id.goog[kube-system/stackdriver-log-forwarder]"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --role roles/monitoring.metricWriter \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[kube-system/gke-metrics-agent]"
    

    PROJECT_ID 替换为目标 Google Cloud 项目的 ID。

日志

本部分列出了 Distributed Cloud 支持的 Cloud Logging 资源类型。如需查看 Distributed Cloud 日志,请使用 Google Cloud 控制台中的日志浏览器。Distributed Cloud 日志记录始终处于启用状态。

Distributed Cloud Connected 记录的资源类型是以下标准 Kubernetes 资源:

  • k8s_container
  • k8s_node

您还可以使用 Cloud Logging API 捕获和检索分布式云连接日志。如需了解如何配置此日志记录机制,请参阅 Cloud Logging 客户端库的相关文档。

指标

本部分列出了 Distributed Cloud 支持的 Cloud Monitoring 指标。如需查看 Distributed Cloud 指标,请使用Google Cloud 控制台中的 Metrics Explorer

Distributed Cloud Connected 集群指标

对于 Distributed Cloud connected 集群,Distributed Cloud connected 提供由 Distributed Cloud connected 节点生成的以下类型的指标:

  • 资源指标提供有关分布式云连接节点和 Pod 性能的信息,例如 CPU 负载和内存用量。
  • 系统应用指标提供有关 Distributed Cloud Connected 系统工作负载的信息,例如 coredns

如需查看这些指标的列表,请参阅 Google Distributed Cloud 和 Google Distributed Cloud 指标

Distributed Cloud connected 不提供与 Distributed Cloud connected 集群关联的 Kubernetes 控制平面生成的指标。

Distributed Cloud Connected 硬件指标

Distributed Cloud connected 通过以下资源类型为 Distributed Cloud connected 硬件提供指标:

  • edgecontainer.googleapis.com/Machine

Machine 资源指标

Distributed Cloud Connected 会为 edgecontainer.googleapis.com/Machine 资源写入以下 Cloud Monitoring API 指标:

指标 说明
/machine/cpu/total_cores
  • 种类:GAUGE
  • 类型:INT
机器上存在的物理处理器核心总数。
/machine/cpu/usage_time
  • 种类:CUMULATIVE
  • 类型:DOUBLE
  • 单位:Seconds
机器上所有核心的累计 CPU 使用时间。类型可以是 workload(客户工作负载)或 system(其他所有内容)。
/machine/cpu/utilization
  • 种类:GAUGE
  • 类型:DOUBLE
机器上的 CPU 利用率百分比。范围为 0 到 1。类型可以是 workload(客户工作负载)或 system(其他所有内容)。
/machine/memory/total_bytes
  • 种类:GAUGE
  • 类型:INT64
机器上总内存的字节数。
/machine/memory/used_bytes
  • 种类:GAUGE
  • 类型:INT64
机器上已用内存的字节数。memory_typeevictable(可由内核回收)或 non-evictable(不可回收)。
/machine/memory/utilization
  • 种类:GAUGE
  • 类型:DOUBLE
机器上的内存利用率百分比。范围为 0 到 1。 memory_typeevictable(可由内核回收)或 non-evictable(不可回收)。
/machine/network/up
  • 种类:GAUGE
  • 类型:BOOL
指示网络接口是否已启动并正在运行。包括主卡、辅助卡和端口。
/machine/network/link_speed
  • 种类:GAUGE
  • 类型:DOUBLE
  • 单位:每秒字节数
主网络接口卡的链路速度。
/machine/network/received_bytes_count
  • 种类:CUMULATIVE
  • 类型:DOUBLE
主要网卡接收的字节数。
/machine/network/sent_bytes_count
  • 种类:CUMULATIVE
  • 类型:DOUBLE
主要网卡已发送的字节数。
/machine/network/connectivity
  • 种类:GAUGE
  • 类型:BOOL
指示主网卡是否已连接到互联网。
/machine/disk/total_bytes
  • 种类:GAUGE
  • 类型:INT64
机器上总磁盘空间的字节数。
/machine/disk/used_bytes
  • 种类:GAUGE
  • 类型:INT64
相应机器上已用磁盘空间的字节数。
/machine/disk/utilization
  • 种类:GAUGE
  • 类型:DOUBLE
机器上的磁盘空间利用率百分比。范围为 0 到 1。
/machine/restart_count
  • 种类:CUMULATIVE
  • 类型:INT
机器的重启次数。
/machine/uptime
  • 种类:GAUGE
  • 类型:INT
  • 单位:Seconds
自上次重新启动以来,机器的正常运行时间。
/machine/connected
  • 种类:GAUGE
  • 类型:INT64
指示设备是否已连接到 Google Cloud。

虚拟机备份操作指标

Distributed Cloud Connected 会收集并导出以下与虚拟机备份代理相关的指标:

指标 说明
gdc_backup_backups_completed
  • 种类:COUNTER
成功完成的虚拟机备份数量。
gdc_backup_backups_latency
  • 种类:HISTOGRAM
虚拟机备份的延迟时间(以分钟为单位)。
gdc_backup_volume_backups_created
  • 种类:COUNTER
迄今为止创建的卷备份数量。
gdc_backup_volume_backups_completed
  • 种类:COUNTER
迄今为止已完成的卷备份数量。
gdc_backup_restores_completed
  • 种类:COUNTER
迄今为止已完成的虚拟机恢复次数。
gdc_backup_restores_latency
  • 种类:HISTOGRAM
虚拟机恢复的延迟时间(以分钟为单位)。
gdc_backup_volume_restores_created
  • 种类:COUNTER
迄今为止创建的卷恢复数量。
gdc_backup_volume_restores_completed
  • 种类:COUNTER
迄今为止已完成的卷恢复次数。

Distributed Cloud connected 会收集并导出以下与虚拟机备份控制平面相关的指标:

指标 说明
gdc_backup_controlplane_live
  • 种类:GAUGE
指示备份控制平面是否正常运行。
gdc_backup_backup_repositories_attached
  • 种类:GAUGE
已附加的备份代码库的数量。
gdc_backup_backups_created
  • 种类:COUNTER
迄今为止创建的虚拟机备份数量。
gdc_backup_backups_deleted
  • 种类:COUNTER
迄今为止已删除的虚拟机备份数量。
gdc_backup_restores_created
  • 种类:COUNTER
迄今为止创建的虚拟机恢复的数量。
gdc_gdc_backup_backups_pile_up
  • 种类:GAUGE
指示备份方案是否已达到正在进行的备份数量上限。

Distributed Cloud connected 会收集并导出以下与虚拟机备份功能结算相关的指标:

指标 说明
metering_protected_resources_total
  • 来源:虚拟机备份代理
  • 种类:COUNTER
迄今为止已备份的虚拟机总数。
metering_deleted_resources_total
  • 来源:虚拟机备份控制平面
  • 种类:COUNTER
截至目前已删除的虚拟机备份总数。

导出自定义应用日志和指标

Distributed Cloud Connected 会自动导出在 Distributed Cloud Connected 工作负载上运行的应用的日志。如需导出在连接到 Distributed Cloud 的工作负载上运行的应用的指标,您必须按照下一部分中的说明对其进行注释。

为工作负载添加注解以启用指标导出

如需从应用中收集自定义指标,请将以下注释添加到应用的 Service 或 Deployment 清单中:

  • prometheus.io/scrape: "true"
  • prometheus.io/path: "ENDPOINT_PATH"。将 ENDPOINT_PATH 替换为目标应用的指标端点的完整路径。
  • prometheus.io/port: "PORT_NUMBER":应用的指标端点监听连接的端口。

运行一个示例应用

在本部分中,您将创建一个应用,用于编写自定义日志并公开自定义指标端点。

  1. 将以下 Service 和 Deployment 清单保存到名为 my-app.yaml 的文件中。请注意,服务具有注解 prometheus.io/scrape: "true"

    kind: Service
    apiVersion: v1
    metadata:
      name: "monitoring-example"
      namespace: "default"
      annotations:
        prometheus.io/scrape: "true"
    spec:
      selector:
        app: "monitoring-example"
      ports:
        - name: http
          port: 9090
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: "monitoring-example"
      namespace: "default"
      labels:
        app: "monitoring-example"
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: "monitoring-example"
      template:
        metadata:
          labels:
            app: "monitoring-example"
        spec:
          containers:
          - image: gcr.io/google-samples/prometheus-dummy-exporter:latest
            name: prometheus-example-exporter
            imagePullPolicy: Always
            command:
            - /bin/sh
            - -c
            - ./prometheus-dummy-exporter --metric-name=example_monitoring_up --metric-value=1 --port=9090
            resources:
              requests:
                cpu: 100m
    
  2. 创建 Deployment 和 Service:

    kubectl --kubeconfig apply -f my-app.yaml

查看应用日志

控制台

  1. 在 Google Cloud 控制台中,前往 Logs Explorer 页面。

    转到日志浏览器

  2. 点击资源

  3. 所有资源类型列表中,选择 Kubernetes Container

  4. 对于集群名称,请选择用户集群的名称。

  5. 对于命名空间名称,请选择 default

  6. 点击添加,然后点击运行查询

  7. 查询结果部分,您可以查看来自 monitoring-example Deployment 的日志条目。例如:

    {
      "textPayload": "2020/11/14 01:24:24 Starting to listen on :9090\n",
      "insertId": "1oa4vhg3qfxidt",
      "resource": {
        "type": "k8s_container",
        "labels": {
          "pod_name": "monitoring-example-7685d96496-xqfsf",
          "cluster_name": ...,
          "namespace_name": "default",
          "project_id": ...,
          "location": "us-west1",
          "container_name": "prometheus-example-exporter"
        }
      },
      "timestamp": "2020-11-14T01:24:24.358600252Z",
      "labels": {
        "k8s-pod/pod-template-hash": "7685d96496",
        "k8s-pod/app": "monitoring-example"
      },
      "logName": "projects/.../logs/stdout",
      "receiveTimestamp": "2020-11-14T01:24:39.562864735Z"
    }
    

gcloud

  1. 使用 gcloud logging read 命令:

    gcloud logging read 'resource.labels.project_id="PROJECT_ID" AND \
        resource.type="k8s_container" AND resource.labels.namespace_name="default"'

    PROJECT_ID 替换为您的项目 ID。

  2. 在输出中,您可以看到来自 monitoring-example Deployment 的日志条目。例如:

    insertId: 1oa4vhg3qfxidt
    labels:
      k8s-pod/app: monitoring-example
      k8s- pod/pod-template-hash: 7685d96496
    logName: projects/.../logs/stdout
    receiveTimestamp: '2020-11-14T01:24:39.562864735Z'
    resource:
      labels:
        cluster_name: ...
        container_name: prometheus-example-exporter
        location: us-west1
        namespace_name: default
        pod_name: monitoring-example-7685d96496-xqfsf
        project_id: ...
      type: k8s_container
    textPayload: |
      2020/11/14 01:24:24 Starting to listen on :9090
    timestamp: '2020-11-14T01:24:24.358600252Z'
    

查看应用指标

您的示例应用将公开一个名为 example_monitoring_up 的自定义指标。您可以在 Google Cloud 控制台中查看该指标的值。

  1. 在 Google Cloud 控制台中,前往 Metrics Explorer 页面。

    转到 Metrics Explorer

  2. 对于资源类型,请选择 Kubernetes Pod

  3. 对于指标,请选择 external/prometheus/example_monitoring_up

  4. 在图表中,您可以看到 example_monitoring_up 的重复值为 1。

使用 Prometheus 收集指标

Distributed Cloud connected 支持 Prometheus 指标解决方案,用于收集 Distributed Cloud connected 工作负载的指标。

为此,当您创建 Distributed Cloud Connected 集群时,Distributed Cloud Connected 会创建一个名为 prom-monitoring 的非受管命名空间。我们建议您使用此命名空间来部署 Prometheus。您还可以将所需的资源从 prom-monitoring 命名空间复制到您选择的命名空间,并在该命名空间中部署 Prometheus。

配置 Prometheus 指标抓取

如需使用 Prometheus 收集 Distributed Cloud 连接的指标,您必须配置 Prometheus 指标抓取。为此,请在 Prometheus Pod 中装载 prometheus-scrape-config ConfigMap,并将 ConfigMap 中的抓取配置添加到 Prometheus 配置中。例如:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: prometheus-local-rolebinding
  namespace: prom-monitoring
subjects:
- kind: ServiceAccount
  name: prometheus-scrape
  namespace: prom-monitoring
roleRef:
  kind: ClusterRole
  name: gke-metrics-agent
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
  namespace: prom-monitoring
data:
  prometheus.yml: |
    global:
      scrape_interval: 5s
      evaluation_interval: 5s
    rule_files:
    scrape_config_files:
    - /etc/prometheus/scrape/*.yml
---
apiVersion: v1
kind: Service
metadata:
  name: prometheus
  namespace: prom-monitoring
spec:
  selector:
    app: prom-monitoring
  ports:
  - port: 9090
    targetPort: 9090
  type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus-deployment
  namespace: prom-monitoring
  labels:
    app: prom-monitoring
spec:
  replicas: 1
  selector:
    matchLabels:
      app: prom-monitoring
  template:
    metadata:
      labels:
        app: prom-monitoring
    spec:
      serviceAccountName: prometheus-scrape
      containers:
        - name: prometheus
          image: prom/prometheus:main
          args:
            - "--config.file=/etc/prometheus/prometheus.yml"
            - "--storage.tsdb.path=/prometheus/"
          ports:
            - containerPort: 9090
          volumeMounts:
            - name: prometheus-config-volume
              mountPath: /etc/prometheus/
            - name: prometheus-scrape-config-volume
              mountPath: /etc/prometheus/scrape/
            - name: prometheus-storage-volume
              mountPath: /prometheus/
            - name: prometheus-scrape-token
              mountPath: /var/run/secrets/kubernetes.io/stackdriver-prometheus-scrape
            - name: stackdriver-prometheus-scrape-cert
              mountPath: /certs/stackdriver-prometheus-scrape
            - name: stackdriver-prometheus-etcd-scrape
              mountPath: /stackdriver-prometheus-etcd-scrape
      volumes:
        - name: prometheus-storage-volume
          emptyDir: {}
        - name: prometheus-config-volume
          configMap:
            defaultMode: 420
            name: prometheus-config
        - name: prometheus-scrape-config-volume
          configMap:
            defaultMode: 420
            name: prometheus-scrape-config
        - name: prometheus-scrape-token
          secret:
            defaultMode: 420
            secretName: prometheus-scrape
        - name: stackdriver-prometheus-scrape-cert
          secret:
            defaultMode: 420
            optional: true
            secretName: stackdriver-prometheus-scrape-cert
        - name: stackdriver-prometheus-etcd-scrape
          secret:
            defaultMode: 420
            optional: true
            secretName: stackdriver-prometheus-etcd-scrape

如需使用 Prometheus 收集工作负载指标,您必须向执行目标工作负载的服务和 Pod 添加注释,如下所示:

  • 如需将指标同时发送到 Cloud Monitoring 和 Prometheus,请使用导出自定义日志和指标中所述的注释。

  • 如需仅将指标发送到 Prometheus,请使用以下注释:

prometheus.io/unmanaged_scrape: "true"
prometheus.io/unmanaged_path: "ENDPOINT_PATH"
prometheus.io/unmanaged_port: "PORT_NUMBER"

使用 Kafka 收集日志

Distributed Cloud Connected 支持 Apache Kafka 解决方案,用于收集在 Distributed Cloud Connected 部署上运行的工作负载的日志。

您必须先拥有可正常运行的 Kafka 部署,然后才能完成本部分中的步骤。您的 Kafka 代理必须以 PLAINTEXT 模式播发其监听器。不支持 SSL/SASL 相关变量。

如需为 Kafka 日志记录配置集群,您必须创建一个 JSON 文件,用于配置要在集群上运行的插件。使用 --system-addons-config 标志创建集群时,请指定此文件。如果您需要修改 Kafka 配置,则必须删除并重新创建具有新 Kafka 设置的集群。

将以下部分添加到系统插件配置文件中:

{
        "systemAddonsConfig": {
          "unmanagedKafkaConfig": {
            "brokers": "BROKERS",
            "topics": "TOPICS"
     "topic_key": "TOPIC_KEY, 
          }
      }
}

替换以下内容:

  • BROKERS:以英文逗号分隔的代理 IP 地址和端口对列表,采用 ip_address:port 格式。
  • TOPICS:以英文逗号分隔的 Kafka 主题列表。
  • TOPIC_KEY:Kafka 主题键;这样一来,如果存在多个主题,Kafka 就可以选择一个主题。

如果您在创建 Distributed Cloud 连接集群后发现 Kafka 未收集日志,请检查以下各项:

  • 服务器端:检查 Kafka 部署中的错误日志,看看是否有问题迹象。
  • 客户端与 Google 支持团队联系,以检索和检查系统 Pod 日志。

收集原始工作负载日志以供外部处理

您可以配置连接的 Distributed Cloud,以将原始(未处理且未标记)工作负载 Pod 日志导出到 /var/logs/export,从而使用您自己的日志收集器进行日志处理。

如需配置原始工作负载日志导出,请创建具有以下内容的 LogExport 自定义资源,然后将其应用于您的集群:

apiVersion: gdc.addons.gke.io/v1
kind: LogExport
metadata:
  name: my-log-export
spec:
  namespaces:
  - namespace1
  - namespace2
  - namespace3

namespaces 字段中,列出您要导出原始 Pod 日志的工作负载命名空间。 该字段不接受系统命名空间,例如管理命名空间限制中列出的命名空间。

后续步骤