×

了解指标

在 OpenShift Container Platform 4.17 中,集群组件通过抓取通过服务端点公开的指标来监控。您还可以为用户定义的项目配置指标收集。指标使您可以监控集群组件和您自己的工作负载的性能。

您可以使用应用程序级别的 Prometheus 客户端库定义您希望为自己的工作负载提供的指标。

在 OpenShift Container Platform 中,指标通过/metrics规范名称下的 HTTP 服务端点公开。您可以通过对http://<endpoint>/metrics运行curl查询来列出服务的全部可用指标。例如,您可以将路由公开到prometheus-example-app示例应用程序,然后运行以下命令以查看其所有可用指标

$ curl http://<example_app_endpoint>/metrics
示例输出
# HELP http_requests_total Count of all HTTP requests
# TYPE http_requests_total counter
http_requests_total{code="200",method="get"} 4
http_requests_total{code="404",method="get"} 2
# HELP version Version information about this binary
# TYPE version gauge
version{version="v0.1.0"} 1

为用户定义的项目设置指标收集

您可以创建一个ServiceMonitor资源来从用户定义项目中的服务端点抓取指标。这假设您的应用程序使用 Prometheus 客户端库将指标公开到/metrics规范名称。

本节介绍如何在用户定义的项目中部署示例服务,然后创建定义应如何监控该服务的ServiceMonitor资源。

部署示例服务

要测试对用户定义项目中服务的监控,您可以部署示例服务。

先决条件
  • 您可以作为具有cluster-admin集群角色的用户或作为具有命名空间管理员权限的用户访问集群。

步骤
  1. 为服务配置创建 YAML 文件。在此示例中,它称为prometheus-example-app.yaml

  2. 将以下部署和服务配置详细信息添加到文件中

    apiVersion: v1
    kind: Namespace
    metadata:
      name: ns1
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: prometheus-example-app
      name: prometheus-example-app
      namespace: ns1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: prometheus-example-app
      template:
        metadata:
          labels:
            app: prometheus-example-app
        spec:
          containers:
          - image: ghcr.io/rhobs/prometheus-example-app:0.4.2
            imagePullPolicy: IfNotPresent
            name: prometheus-example-app
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: prometheus-example-app
      name: prometheus-example-app
      namespace: ns1
    spec:
      ports:
      - port: 8080
        protocol: TCP
        targetPort: 8080
        name: web
      selector:
        app: prometheus-example-app
      type: ClusterIP

    此配置在用户定义的ns1项目中部署名为prometheus-example-app的服务。此服务公开了自定义的version指标。

  3. 将配置应用到集群

    $ oc apply -f prometheus-example-app.yaml

    服务部署需要一些时间。

  4. 您可以检查 Pod 是否正在运行

    $ oc -n ns1 get pod
    示例输出
    NAME                                      READY     STATUS    RESTARTS   AGE
    prometheus-example-app-7857545cb7-sbgwq   1/1       Running   0          81m

指定如何监控服务

要使用您的服务公开的指标,您必须配置 OpenShift Container Platform 监控以从/metrics端点抓取指标。您可以使用指定如何监控服务的ServiceMonitor自定义资源定义 (CRD) 或指定如何监控 Pod 的PodMonitor CRD 来执行此操作。前者需要一个Service对象,而后者不需要,允许 Prometheus 直接从 Pod 公开的指标端点抓取指标。

此过程将向您展示如何为用户定义项目中的服务创建ServiceMonitor资源。

先决条件
  • 您可以作为具有cluster-admin集群角色或monitoring-edit集群角色的用户访问集群。

  • 您已为用户定义的项目启用监控。

  • 在此示例中,您已在ns1项目中部署了prometheus-example-app示例服务。

    prometheus-example-app示例服务不支持 TLS 身份验证。

步骤
  1. 创建一个名为example-app-service-monitor.yaml的新 YAML 配置文件。

  2. ServiceMonitor资源添加到 YAML 文件。以下示例创建一个名为prometheus-example-monitor的服务监控器,以抓取ns1命名空间中prometheus-example-app服务公开的指标

    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      name: prometheus-example-monitor
      namespace: ns1 (1)
    spec:
      endpoints:
      - interval: 30s
        port: web (2)
        scheme: http
      selector: (3)
        matchLabels:
          app: prometheus-example-app
    1 指定服务运行的用户定义命名空间。
    2 指定 Prometheus 要抓取的端点端口。
    3 配置选择器以根据其元数据标签匹配您的服务。

    用户定义命名空间中的ServiceMonitor资源只能发现同一命名空间中的服务。也就是说,始终忽略ServiceMonitor资源的namespaceSelector字段。

  3. 将配置应用到集群

    $ oc apply -f example-app-service-monitor.yaml

    部署ServiceMonitor资源需要一些时间。

  4. 验证ServiceMonitor资源是否正在运行

    $ oc -n <namespace> get servicemonitor
    示例输出
    NAME                         AGE
    prometheus-example-monitor   81m

示例服务端点身份验证设置

您可以使用ServiceMonitorPodMonitor自定义资源定义 (CRD) 为用户定义的项目监控配置服务端点的身份验证。

以下示例显示了ServiceMonitor资源的不同身份验证设置。每个示例都显示如何配置相应的Secret对象,其中包含身份验证凭据和其他相关设置。

使用 bearer 令牌的示例 YAML 身份验证

以下示例显示了ns1命名空间中名为example-bearer-authSecret对象的 bearer 令牌设置

示例 bearer 令牌密钥
apiVersion: v1
kind: Secret
metadata:
  name: example-bearer-auth
  namespace: ns1
stringData:
  token: <authentication_token> (1)
1 指定身份验证令牌。

以下示例显示了ServiceMonitor CRD 的 bearer 令牌身份验证设置。此示例使用名为example-bearer-authSecret对象

示例 bearer 令牌身份验证设置
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: prometheus-example-monitor
  namespace: ns1
spec:
  endpoints:
  - authorization:
      credentials:
        key: token (1)
        name: example-bearer-auth (2)
    port: web
  selector:
    matchLabels:
      app: prometheus-example-app
1 包含指定Secret对象中身份验证令牌的密钥。
2 包含身份验证凭据的Secret对象的名称。

不要使用bearerTokenFile配置 bearer 令牌。如果使用bearerTokenFile配置,则会拒绝ServiceMonitor资源。

基本身份验证的示例 YAML

以下示例显示了ns1命名空间中名为example-basic-authSecret对象的 Basic 身份验证设置

示例 Basic 身份验证密钥
apiVersion: v1
kind: Secret
metadata:
  name: example-basic-auth
  namespace: ns1
stringData:
  user: <basic_username> (1)
  password: <basic_password>  (2)
1 指定用于身份验证的用户名。
2 指定用于身份验证的密码。

以下示例显示了ServiceMonitor CRD 的 Basic 身份验证设置。此示例使用名为example-basic-authSecret对象

示例 Basic 身份验证设置
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: prometheus-example-monitor
  namespace: ns1
spec:
  endpoints:
  - basicAuth:
      username:
        key: user (1)
        name: example-basic-auth (2)
      password:
        key: password (3)
        name: example-basic-auth (2)
    port: web
  selector:
    matchLabels:
      app: prometheus-example-app
1 包含指定Secret对象中用户名的密钥。
2 包含 Basic 身份验证的Secret对象的名称。
3 包含指定Secret对象中密码的密钥。

使用 OAuth 2.0 的示例 YAML 身份验证

以下示例显示了ns1命名空间中名为example-oauth2Secret对象的 OAuth 2.0 设置

示例 OAuth 2.0 密钥
apiVersion: v1
kind: Secret
metadata:
  name: example-oauth2
  namespace: ns1
stringData:
  id: <oauth2_id> (1)
  secret: <oauth2_secret> (2)
1 指定 OAuth 2.0 ID。
2 指定 OAuth 2.0 密钥。

以下示例显示了ServiceMonitor CRD 的 OAuth 2.0 身份验证设置。此示例使用名为example-oauth2Secret对象

示例 OAuth 2.0 身份验证设置
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: prometheus-example-monitor
  namespace: ns1
spec:
  endpoints:
  - oauth2:
      clientId:
        secret:
          key: id (1)
          name: example-oauth2 (2)
      clientSecret:
        key: secret (3)
        name: example-oauth2 (2)
      tokenUrl: https://example.com/oauth2/token (4)
    port: web
  selector:
    matchLabels:
      app: prometheus-example-app
1 包含指定Secret对象中 OAuth 2.0 ID 的密钥。
2 包含 OAuth 2.0 凭据的Secret对象的名称。
3 包含指定Secret对象中 OAuth 2.0 密钥的密钥。
4 用于使用指定的clientIdclientSecret获取令牌的 URL。

查看可用指标列表

作为集群管理员或具有所有项目查看权限的用户,您可以查看集群中可用的指标列表并以 JSON 格式输出列表。

先决条件
  • 您是集群管理员,或者您可以作为具有cluster-monitoring-view集群角色的用户访问集群。

  • 您已安装 OpenShift Container Platform CLI (oc)。

  • 您已获得 Thanos Querier 的 OpenShift Container Platform API 路由。

  • 您可以使用oc whoami -t命令获取 bearer 令牌。

    您只能使用 bearer 令牌身份验证来访问 Thanos Querier API 路由。

步骤
  1. 如果您尚未获得 Thanos Querier 的 OpenShift Container Platform API 路由,请运行以下命令

    $ oc get routes -n openshift-monitoring thanos-querier -o jsonpath='{.status.ingress[0].host}'
  2. 通过运行以下命令从 Thanos Querier API 路由检索 JSON 格式的指标列表。此命令使用oc使用 bearer 令牌进行身份验证。

    $ curl -k -H "Authorization: Bearer $(oc whoami -t)" https://<thanos_querier_route>/api/v1/metadata (1)
    1 <thanos_querier_route>替换为 Thanos Querier 的 OpenShift Container Platform API 路由。

查询指标

OpenShift Container Platform 监控仪表板使您可以运行 Prometheus 查询语言 (PromQL) 查询以检查图表上可视化的指标。此功能提供有关集群状态以及您正在监控的任何用户定义工作负载的信息。

作为集群管理员,您可以查询所有核心 OpenShift Container Platform 和用户定义项目的指标。

作为开发人员,您必须在查询指标时指定项目名称。您必须拥有查看所选项目指标所需的权限。

作为集群管理员查询所有项目的指标

作为集群管理员或具有所有项目查看权限的用户,您可以访问指标 UI 中所有默认 OpenShift Container Platform 和用户定义项目的指标。

指标 UI 包含预定义查询,例如所有项目的 CPU、内存、带宽或网络数据包。您还可以运行自定义 Prometheus 查询语言 (PromQL) 查询。

先决条件
  • 您拥有集群管理员角色cluster-admin,或者拥有所有项目的查看权限,因此可以访问集群。

  • 您已安装 OpenShift CLI(oc)。

步骤
  1. 在 OpenShift Container Platform Web 控制台的**管理员**视角中,点击**监控**,然后转到**指标**选项卡。

  2. 要添加一个或多个查询,请执行以下任一操作:

    选项 描述

    选择现有查询。

    从**选择查询**下拉列表中选择现有查询。

    创建自定义查询。

    将您的 Prometheus 查询语言 (PromQL) 查询添加到**表达式**字段。

    在您键入 PromQL 表达式时,自动完成建议会显示在一个下拉列表中。这些建议包括函数、指标、标签和时间标记。使用键盘箭头选择其中一个建议项,然后按 Enter 键将该项添加到您的表达式中。将鼠标指针悬停在建议项上可以查看该项的简短描述。

    添加多个查询。

    点击**添加查询**。

    复制现有查询。

    点击查询旁边的选项菜单 kebab,然后选择**复制查询**。

    禁用查询的运行。

    点击查询旁边的选项菜单 kebab,然后选择**禁用查询**。

  3. 要运行您创建的查询,请点击**运行查询**。查询的指标将可视化地显示在图表上。如果查询无效,UI 会显示错误消息。

    • 绘制时间序列图时,处理大量数据的查询可能会超时或使浏览器过载。为避免这种情况,请点击**隐藏图表**并仅使用指标表来校准您的查询。然后,在找到可行的查询后,启用图表以绘制图表。

    • 默认情况下,查询表显示展开视图,其中列出了每个指标及其当前值。点击向下箭头˅以最小化查询的展开视图。

  4. 可选:页面 URL 现在包含您运行的查询。要将来再次使用此查询集,请保存此 URL。

  5. 浏览可视化指标。最初,图表上会显示所有已启用查询的所有指标。通过执行以下任一操作来选择显示哪些指标:

    选项 描述

    隐藏查询中的所有指标。

    点击查询的选项菜单 kebab,然后点击**隐藏所有序列**。

    隐藏特定指标。

    转到查询表,然后点击指标名称附近的彩色方块。

    放大图表并更改时间范围。

    执行以下任一操作:

    • 通过水平点击并拖动图表来直观地选择时间范围。

    • 使用菜单选择时间范围。

    重置时间范围。

    点击**重置缩放**。

    显示特定时间点所有查询的输出。

    将鼠标悬停在您感兴趣的点上。查询输出将显示在一个弹出框中。

    隐藏图表。

    点击**隐藏图表**。

其他资源

开发人员查询用户定义项目的指标

您可以作为开发人员或拥有项目查看权限的用户访问用户定义项目的指标。

指标 UI 包括预定义查询,例如 CPU、内存、带宽或网络数据包。这些查询仅限于所选项目。您还可以为该项目运行自定义 Prometheus 查询语言 (PromQL) 查询。

开发人员只能使用**开发人员**视角,而不能使用**管理员**视角。作为开发人员,您一次只能查询一个项目的指标。

先决条件
  • 您可以访问集群,前提是您是开发人员,或者您拥有正在查看其指标的项目的查看权限。

  • 您已为用户定义的项目启用监控。

  • 您已在用户定义的项目中部署了一个服务。

  • 您已为该服务创建了一个ServiceMonitor自定义资源定义 (CRD) 来定义如何监控该服务。

步骤
  1. 在 OpenShift Container Platform Web 控制台的**开发人员**视角中,点击**监控**,然后转到**指标**选项卡。

  2. 在**项目:**列表中选择您要查看其指标的项目。

  3. 要添加一个或多个查询,请执行以下任一操作:

    选项 描述

    选择现有查询。

    从**选择查询**下拉列表中选择现有查询。

    创建自定义查询。

    将您的 Prometheus 查询语言 (PromQL) 查询添加到**表达式**字段。

    在您键入 PromQL 表达式时,自动完成建议会显示在一个下拉列表中。这些建议包括函数、指标、标签和时间标记。使用键盘箭头选择其中一个建议项,然后按 Enter 键将该项添加到您的表达式中。将鼠标指针悬停在建议项上可以查看该项的简短描述。

    添加多个查询。

    点击**添加查询**。

    复制现有查询。

    点击查询旁边的选项菜单 kebab,然后选择**复制查询**。

    禁用查询的运行。

    点击查询旁边的选项菜单 kebab,然后选择**禁用查询**。

  4. 要运行您创建的查询,请点击**运行查询**。查询的指标将可视化地显示在图表上。如果查询无效,UI 会显示错误消息。

    • 绘制时间序列图时,处理大量数据的查询可能会超时或使浏览器过载。为避免这种情况,请点击**隐藏图表**并仅使用指标表来校准您的查询。然后,在找到可行的查询后,启用图表以绘制图表。

    • 默认情况下,查询表显示展开视图,其中列出了每个指标及其当前值。点击向下箭头˅以最小化查询的展开视图。

  5. 可选:页面 URL 现在包含您运行的查询。要将来再次使用此查询集,请保存此 URL。

  6. 浏览可视化指标。最初,图表上会显示所有已启用查询的所有指标。通过执行以下任一操作来选择显示哪些指标:

    选项 描述

    隐藏查询中的所有指标。

    点击查询的选项菜单 kebab,然后点击**隐藏所有序列**。

    隐藏特定指标。

    转到查询表,然后点击指标名称附近的彩色方块。

    放大图表并更改时间范围。

    执行以下任一操作:

    • 通过水平点击并拖动图表来直观地选择时间范围。

    • 使用菜单选择时间范围。

    重置时间范围。

    点击**重置缩放**。

    显示特定时间点所有查询的输出。

    将鼠标悬停在您感兴趣的点上。查询输出将显示在一个弹出框中。

    隐藏图表。

    点击**隐藏图表**。

其他资源

获取有关指标目标的详细信息

在 OpenShift Container Platform Web 控制台的**管理员**视角中,您可以使用**指标目标**页面查看、搜索和过滤当前目标用于抓取的端点,这有助于您识别和解决问题。例如,您可以查看目标端点的当前状态,以查看 OpenShift Container Platform Monitoring 何时无法从目标组件抓取指标。

**指标目标**页面显示默认 OpenShift Container Platform 项目和用户定义项目的指标目标。

先决条件
  • 您拥有要查看其指标目标的项目的管理员权限。

步骤
  1. 在**管理员**视角中,选择**监控**→**目标**。**指标目标**页面将打开,其中列出了所有正在抓取指标的服务端点目标。

    此页面显示有关默认 OpenShift Container Platform 项目和用户定义项目的指标目标的详细信息。此页面列出了每个目标的以下信息:

    • 正在抓取的服务端点 URL

    • 正在监控的 ServiceMonitor 组件

    • 目标的**正常**或**异常**状态

    • 命名空间

    • 上次抓取时间

    • 上次抓取的持续时间

  2. 可选:指标目标列表可能很长。要查找特定目标,请执行以下任一操作:

    选项 描述

    按状态和来源过滤目标。

    在**筛选器**列表中选择筛选器。

    提供以下筛选选项:

    • **状态**筛选器

      • 运行中。目标当前运行中,并且正在积极抓取指标。

      • 已停止。目标当前已停止,并且未抓取指标。

    • 来源 筛选器

      • 平台。平台级目标仅与 AWS 项目上的默认 Red Hat OpenShift Service 相关。这些项目提供 AWS 上的核心 Red Hat OpenShift Service 功能。

      • 用户。用户目标与用户定义的项目相关。这些项目是用户创建的,可以自定义。

    按名称或标签搜索目标。

    在搜索框旁边的文本标签字段中输入搜索词。

    对目标进行排序。

    点击端点状态命名空间上次抓取抓取时长列标题中的一个或多个。

  3. 点击目标的端点列中的 URL,即可导航到其目标详情页面。此页面提供有关目标的信息,包括:

    • 正在抓取指标的端点 URL

    • 目标当前的运行中已停止状态

    • 指向命名空间的链接

    • 指向 ServiceMonitor 详情的链接

    • 附加到目标的标签

    • 上次抓取目标指标的时间