指标管理

平台的监控系统基于 Prometheus / VictoriaMetrics 收集的指标。本文档将指导您如何管理这些指标。

目录

查看平台组件暴露的指标

平台内集群组件的监控方式是通过 ServiceMonitor 抽取暴露的指标。平台中的指标均通过 /metrics 端点公开。您可以使用以下示例命令查看平台中某个组件暴露的指标:

curl -s http://<Component IP>:<Component metrics port>/metrics | grep 'TYPE\|HELP'

示例输出:

# HELP controller_runtime_active_workers Number of currently used workers per controller
# TYPE controller_runtime_active_workers gauge
# HELP controller_runtime_max_concurrent_reconciles Maximum number of concurrent reconciles per controller
# TYPE controller_runtime_max_concurrent_reconciles gauge
# HELP controller_runtime_reconcile_errors_total Total number of reconciliation errors per controller
# TYPE controller_runtime_reconcile_errors_total counter
# HELP controller_runtime_reconcile_time_seconds Length of time per reconciliation per controller

查看 Prometheus / VictoriaMetrics 存储的所有指标

您可以查看集群中可用的指标列表,帮助您基于这些指标编写所需的 PromQL。

前提条件

  1. 您已获取用户 Token

  2. 您已获取平台地址

操作步骤

运行以下命令,使用 curl 获取指标列表:

curl -k -X 'GET' -H 'Authorization: Bearer <Your token>' 'https://<Your platform access address>/v2/metrics/<Your cluster name>/prometheus/label/__name__/values'

示例输出:

{
  "status": "success",
  "data": [
    "ALERTS",
  "ALERTS_FOR_STATE",
  "advanced_search_cached_resources_count",
  "alb_error",
  "alertmanager_alerts",
  "alertmanager_alerts_invalid_total",
  "alertmanager_alerts_received_total",
  "alertmanager_cluster_enabled"]
}

查看平台定义的所有内置指标

为了简化用户使用,平台内置了大量常用指标。您在配置告警或监控面板时可以直接使用这些指标,无需自行定义。以下将介绍如何查看这些指标。

前提条件

  1. 您已获取用户 Token

  2. 您已获取平台地址

操作步骤

运行以下命令,使用 curl 获取指标列表:

curl -k -X 'GET' -H 'Authorization: Bearer <Your token>' 'https://<Your platform access address>/v2/metrics/<Your cluster name>/indicators'

示例输出:

[
  {
  "alertEnabled": true, 
  "annotations": {
   "cn": "计算组件中容器的 CPU 利用率",
   "descriptionEN": "Cpu utilization for pods in workload",
   "descriptionZH": "计算组件中容器的 CPU 利用率",
   "displayNameEN": "CPU utilization of the pods",
   "displayNameZH": "计算组件中容器的 CPU 利用率",
   "en": "Cpu utilization for pods in workload",
   "features": "SupportDashboard", 
   "summaryEN": "CPU usage rate {{.externalLabels.comparison}}{{.externalLabels.threshold}} of Pod ({{.labels.pod}})",
   "summaryZH": "Pod ({{.labels.pod}}) 的 CPU 使用率 {{.externalLabels.comparison}}{{.externalLabels.threshold}}"
  },
  "displayName": "计算组件中容器的 CPU 利用率",
  "kind": "workload",
  "multipleEnabled": true,  
  "name": "workload.pod.cpu.utilization",
  "query": "avg by (kind,name,namespace,pod) (avg by (kind,name,namespace,pod,container)(cpaas_advanced_container_cpu_usage_seconds_total_irate5m{kind=~\"{{.kind}}\",name=~\"{{.name}}\",namespace=~\"{{.namespace}}\",container!=\"\",container!=\"POD\"}) / avg by (kind,name,namespace,pod,container)(cpaas_advanced_kube_pod_container_resource_limits{kind=~\"{{.kind}}\",name=~\"{{.name}}\",namespace=~\"{{.namespace}}\",resource=\"cpu\"}))", 
  "summary": "Pod ({{.labels.pod}}) 的 CPU 使用率 {{.externalLabels.comparison}}{{.externalLabels.threshold}}",
  "type": "metric",
  "unit": "%",
  "legend": "{{.namespace}}/{{.pod}}",
  "variables": [ 
   "namespace",
   "name",
   "kind"
  ]
 }
]
  1. 该指标是否支持用于配置告警
  2. 该指标是否支持用于监控面板
  3. 该指标是否支持用于配置多资源告警
  4. 该指标定义的 PromQL 语句
  5. 该指标 PromQL 语句中可使用的变量

集成外部指标

除了平台内置指标外,您还可以通过 ServiceMonitorPodMonitor 集成您的应用或第三方应用暴露的指标。本节以在同一集群中以 pod 形式安装的 Elasticsearch Exporter 为例进行说明。

前提条件

您已安装应用并通过指定接口暴露指标。本文档假设您的应用安装在 cpaas-system 命名空间,并暴露了 http://<elasticsearch-exporter-ip>:9200/_prometheus/metrics 端点。

操作步骤

  1. 创建 Service/Endpoint 以供 Exporter 暴露指标
apiVersion: v1
kind: Service
metadata:
  labels:
    chart: elasticsearch
    service_name: cpaas-elasticsearch
  name: cpaas-elasticsearch
  namespace: cpaas-system
spec:
  clusterIP: 10.105.125.99
  ports:
  - name: cpaas-elasticsearch
    port: 9200
    protocol: TCP
    targetPort: 9200
  selector:
    service_name: cpaas-elasticsearch
  sessionAffinity: None
  type: ClusterIP
  1. 创建 ServiceMonitor 对象描述您的应用暴露的指标:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    app: cpaas-monitor
    chart: cpaas-monitor
    heritage: Helm
    prometheus: kube-prometheus
    release: cpaas-monitor
  name: cpaas-elasticsearch-Exporter
  namespace: cpaas-system
spec:
  jobLabel: service_name
  namespaceSelector:
    any: true
  selector:
    matchExpressions:
    - key: service_name
      operator: Exists
  endpoints:
  - port: cpaas-elasticsearch
    path: /_prometheus/metrics
    interval: 60s
    honorLabels: true
    basicAuth:
      password:
        key: ES_PASSWORD
        name: acp-config-secret
      username:
        key: ES_USER
        name: acp-config-secret
  1. ServiceMonitor 应同步到哪个 Prometheus;operator 会根据 Prometheus CR 的 serviceMonitorSelector 配置监听对应的 ServiceMonitor 资源。如果 ServiceMonitor 的标签不匹配 Prometheus CR 的 serviceMonitorSelector 配置,则该 ServiceMonitor 不会被 operator 监控。
  2. operator 会根据 Prometheus CR 的 serviceMonitorNamespaceSelector 配置监听哪些命名空间的 ServiceMonitor;如果 ServiceMonitor 不在 Prometheus CR 的 serviceMonitorNamespaceSelector 中,则该 ServiceMonitor 不会被 operator 监控。
  3. Prometheus 收集的指标会添加一个 job 标签,值为对应 jobLabel 的 service 标签值。
  4. ServiceMonitor 根据 namespaceSelector 配置匹配对应的 Service。
  5. ServiceMonitor 根据 selector 配置匹配 Service。
  6. ServiceMonitor 根据 port 配置匹配 Service 的端口。
  7. 访问 Exporter 的路径,默认为 /metrics。
  8. Prometheus 抓取 Exporter 指标的间隔。
  9. 如果访问 Exporter 路径需要认证,则需添加认证信息;也支持 bearer token、tls 认证等方式。
  1. 检查 ServiceMonitor 是否被 Prometheus 监控

访问监控组件的 UI,查看是否存在 job cpaas-elasticsearch-exporter

  • Prometheus UI 地址:https://<Your platform access address>/clusters/<Cluster name>/prometheus-0/targets
  • VictoriaMetrics UI 地址:https://<Your platform access address>/clusters/<Cluster name>/vmselect/vmui/?#/metrics