首页 / 平台管理 / 应用商店管理 / Operators / 使用 Operator / Prometheus / 使用指导

使用指导

使用 Prometheus 实现系统监控和告警:包括依次创建 Prometheus 实例、ServiceMonitor 实例、PodMonitor 实例、PrometheusRule 实例,以及 AlertManager 实例。

前提条件

已部署 Prometheus Operator,具体请参考 安装 Operator

操作步骤

  1. 在左侧导航栏中,单击 应用商店管理 > Operators

  2. 已部署 Operators 页签中,单击 prometheus-operator

  3. 单击实例卡片中的 创建实例

  4. 参考说明配置相关参数。

    提示:为确保创建成功的实例能够互相访问,建议以下实例均创建在相同的命名空间下,尤其是 Prometheus 实例和 Alertmanager 实例。

Prometheus Operator 管理资源实例的流程,如下图所示。

Prometheus 实例

参数说明

创建 Prometheus 实例的常用参数说明参见下表。

更多参数说明请参考 Prometheus CRD

参数 是否必填 说明
baseImage Prometheus 实例的镜像地址。例如:192.168.16.52:60080/ait/prometheus
version Prometheus 实例的镜像版本。例如:v2.10.0
tag Prometheus 实例的镜像版本。
说明:若输入,该参数的值会覆盖 version 的值。
replicas Prometheus 实例运行的 Pod 个数。
serviceAccountName Prometheus 实例的服务账号。
ruleSelector 标签选择器,用于为 Prometheus 实例匹配 PrometheusRule。值为 Prometheus 待匹配的 PrometheusRule 的标签(label)。
仅当 PrometheusRule 的 label 能够被 Prometheus 的 ruleSelector 匹配到时,PrometheusRule 才能被同步到 Prometheus。
serviceMonitorSelector 标签选择器,用于为 Prometheus 实例匹配 ServiceMonitor。值为 Prometheus 待匹配的 ServiceMonitor 的标签(label)。
仅当 ServiceMonitor 的 label 能够被 Prometheus 的 serviceMonitorSelector 匹配到时,ServiceMonitor 才能被同步到 Prometheus。
storage Prometheus 实例的存储类型。支持选择:
emptyDir:空卷,挂载到 Pod 中的容器。Pod 删除时该卷也会被删除;
volumeClaimTemplate:卷申请模板,当有状态副本集(StatefulSet)使用 VolumeClaimTemplate 创建一个 PersistentVolume 时,会为每个 Pod 分配并创建一个有编号的持久卷声明(PVC)。YAML 示例如下图所示。

YAML 示例:

apiVersion: monitoring.coreos.com/v1
kind: Alertmanager
metadata:
  name: alertmanager-main
  namespace: monitoring
spec:
  baseImage: 192.168.16.52:60080/ait/alertmanager
  replicas: 1
  securityContext: {}
  version: v0.17.0

使用指导

创建 Prometheus 实例后,Operator 会自动在实例所在命名空间中创建一个名称为 prometheus-{Prometheu 实例名称} 的有状态副本集(StatefulSet),当该有状态副本集的状态为 运行中 时,则 Prometheus 运行正常。

在实例所在命名空间中,创建一个 typeNodePort 的内部路由(Service)后,即可通过 {实例所在集群的任意节点的 IP}:{nodePort 值} 访问 Prometheus 的 Web 页面。内部路由的 YAML 示例如下:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: prometheus
  name: prometheus-web
  namespace: monitoring   ## Prometheus 实例所在命名空间名称。
spec:
  ports:
  - name: web
    nodePort: 30800
    port: 9090
    protocol: TCP
    targetPort: 9090
  selector:
    app: prometheus
  sessionAffinity: None
  type: NodePort

ServiceMonitor 实例

参数说明

创建 ServiceMonitor 实例的常用参数说明参见下表。

更多参数说明请参考 ServiceMonitor CRD

参数 是否必填 说明
namespaceSelector 标签选择器,为 ServiceMonitor 实例匹配指定命名空间下的 Endpoint。值为 ServiceMonitor 待匹配的 Endpoint 所在命名空间的标签(label)。
仅当命名空间的 label 能够被 ServiceMonitor 的 namespaceSelector 匹配到时,ServiceMonitor 才能使用该命名空间下的 Endpoint。
selector 标签选择器,为 ServiceMonitor 实例匹配指定命名空间下的 Endpoint。值为 ServiceMonitor 待匹配的 Endpoint 的标签(label)。
仅当 Endpoint 的 label 能够被 ServiceMonitor 的 selector 匹配到时,ServiceMonitor 才能使用该 Endpoint。
jobLabel Prometheus 采集到的 metrics(监控指标)的 job label,一般用于标识 metrics 是由谁采集的。
endpoints 定义了 Prometheus 中一个抓取指标的配置信息。

YAML 示例:

---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    k8s-app: prometheus
    prometheus: kube-prometheus
  name: servicemonitor-example
  namespace: monitoring
spec:
  endpoints:
  - honorLabels: true
    honorTimestamps: true
    interval: 30s
    path: /metrics
    port: http
  jobLabel: prometheus-operator
  namespaceSelector:
    any: true
  sampleLimit: 10000
  selector:
    matchLabels:
      k8s-app: prometheus-operator

使用指导

前提条件:如需通过 ServiceMonitor 获取 prometheus-operator 的指标,需要先在 ServiceMonitor 实例所在命名空间中为 prometheus-operator 创建一个内部路由(Service)。内部路由的 YAML 示例如下:

apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: prometheus-operator
  name: prometheus-operator
  namespace: monitoring     ## ServiceMonitor 实例所在命名空间名称
spec:
  ports:
  - name: http
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    k8s-app: prometheus-operator    ## Kubernets 服务的名称,此处以 prometheus-operator 为例
  sessionAffinity: None
  type: ClusterIP

请参考以下操作,验证 SeviceMonitor 实例是否创建成功并已连接到 Prometheus。

如果以上操作结果均正常,表明通过 ServiceMonitor 实例成功采集到了对应 Exporter(提供监控数据的程序)数据。

PodMonitor 实例

参数说明

创建 PodMonitor 实例的常用参数说明参见下表。

更多参数说明请参考 PodMonitor CRD

参数 是否必填 说明
namespaceSelector 标签选择器,为 PodMonitor 实例匹配指定命名空间下的 Endpoint。值为 PodMonitor 待匹配的 Endpoint 所在命名空间的标签(label)。
仅当命名空间的 label 能够被 PodMonitor 的 namespaceSelector 匹配到时,PodMonitor 才能使用该命名空间下的 Endpoint。
selector 标签选择器,为 PodMonitor 实例匹配指定命名空间下的 Endpoint。值为 PodMonitor 待匹配的 Endpoint 的标签(label)。
仅当 Endpoint 的 label 能够被 PodMonitor 的 selector 匹配到时,PodMonitor 才能使用该 Endpoint。
jobLabel Prometheus 采集到的 metrics(监控指标)的 job label,一般用于标识 metrics 是由谁采集的。
endpoints 定义了 Prometheus 中一个抓取指标的配置信息。

YAML 示例:

apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  labels:
    k8s-app: prometheus
    prometheus: kube-prometheus
  name: podmonitor-example
  namespace: monitoring
spec:
  jobLabel: prometheus
  namespaceSelector:
    matchNames:
    - monitoring
  podMetricsEndpoints:
  - interval: 30s
    path: /metrics
    port: web
  sampleLimit: 10000
  selector:
    matchLabels:
      app: prometheus

使用指导

请参考以下操作,验证 PodMonitor 实例是否创建成功并已连接到 Prometheus。

如果以上操作结果均正常,表明通过 ServiceMonitor 实例成功采集到了对应 Exporter(提供监控数据的程序)数据。

PrometheusRule 实例

参数说明

创建 PrometheusRule 实例的常用参数说明参见下表。

更多参数说明请参考 PrometheusRule CRD

参数 是否必填 说明
groups[].name PrometheusRule 的分组名称。
groups[].rules[] PrometheusRule 分组中的规则定义,支持 alerting rule、 recording rule。

YAML 示例:

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  labels:
    prometheus: kube-prometheus
    role: alert-rules
  name: prometheus-example-rules
  namespace: monitoring
spec:
  groups:
  - name: ./example.rules
    rules:
    - alert: TargetUP     ## alerting rule
      annotations:
        aAnnotation: aValue
      expr: up == 1
      for: 60s
      labels:
        aLabel: aValue

recording rule 示例:

- expr: avg(node_cpu_utilization)
  record: cluster_cpu_utilization

使用指导

请参考以下操作,验证 PrometheusRule 实例是否创建成功并已连接到 Prometheus。

Alertmanager 实例

参数说明

使用指导

创建 AlertManager 实例后,Operator 会自动在实例所在命名空间中创建一个名称为 alertmanager-{alertmanager 实例名称} 的有状态副本集(StatefulSet),当该有状态副本集的状态为 运行中 时,则 Alertmanager 运行正常。

在实例所在命名空间中,创建一个 typeNodePort 的内部路由(Service)后,即可通过 {实例所在集群的任意节点的 IP}:{nodePort 值} 访问 Alertmanager 的 Web 页面。内部路由 YAML 示例如下:

apiVersion: v1
kind: Service
metadata:
  name: alertmanager-web
  namespace: monitoring
spec:
  ports:
  - name: web
    nodePort: 30801
    port: 9093
    protocol: TCP
    targetPort: 9093
  selector:
    app: alertmanager
  sessionAffinity: None
  type: NodePort

当 Prometheus 有告警被触发时,会发送告警至 AlertManager,在 AlertManager 中可查看告警信息,如下图所示。