×

理解指标

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

您可以通过在应用程序级别使用 Prometheus 客户端库来定义您想要为自己的工作负载提供的指标。

在 OpenShift Dedicated 中,指标通过 /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 Dedicated 监控以从/metrics端点抓取指标。您可以使用指定应如何监控服务的ServiceMonitor自定义资源定义 (CRD) 或指定应如何监控 Pod 的PodMonitor CRD 来执行此操作。前者需要一个Service对象,而后者不需要,允许 Prometheus 直接从 Pod 公开的指标端点抓取指标。

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

先决条件
  • 您可以作为具有dedicated-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身份验证设置。

基本身份验证密钥示例
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对象。

基本身份验证设置示例
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。

查询指标

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

作为dedicated-admin,您可以一次查询一个或多个命名空间以获取有关用户定义项目的指标。

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

以集群管理员身份查询所有项目的指标

作为dedicated-admin或拥有所有项目查看权限的用户,您可以访问指标UI中所有默认OpenShift Dedicated和用户定义项目的指标。

只有专用管理员才能访问OpenShift Dedicated监控提供的第三方UI。

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

先决条件
  • 您可以作为具有dedicated-admin角色或对所有项目具有查看权限的用户访问集群。

  • 您已安装OpenShift CLI (oc)。

步骤
  1. 在OpenShift Dedicated Web控制台的**管理员**视角中,单击**观察**并转到**指标**选项卡。

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

    选项 描述

    选择现有查询。

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

    创建自定义查询。

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

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

    添加多个查询。

    点击**添加查询**。

    复制现有查询。

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

    禁用运行查询。

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

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

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

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

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

  5. 探索可视化指标。最初,绘图上会显示所有已启用查询中的所有指标。通过执行以下任何操作来选择显示哪些指标

    选项 描述

    隐藏查询中的所有指标。

    点击查询的选项菜单 kebab 并点击隐藏所有序列

    隐藏特定指标。

    转到查询表,并点击指标名称旁边的彩色方块。

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

    执行以下操作之一

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

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

    重置时间范围。

    点击重置缩放

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

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

    隐藏绘图。

    点击隐藏图表

其他资源

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

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

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

开发人员只能使用开发人员视角,而不能使用管理员视角。作为开发人员,您一次只能查询一个项目的指标。开发人员无法访问 OpenShift Dedicated 监控提供的第三方 UI。

先决条件
  • 您可以作为开发人员或具有您正在查看其指标的项目的查看权限的用户访问集群。

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

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

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

步骤
  1. 在 OpenShift Dedicated Web 控制台的开发人员视角中,点击观察并转到指标选项卡。

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

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

    选项 描述

    选择现有查询。

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

    创建自定义查询。

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

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

    添加多个查询。

    点击**添加查询**。

    复制现有查询。

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

    禁用运行查询。

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

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

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

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

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

  6. 探索可视化指标。最初,绘图上会显示所有已启用查询中的所有指标。通过执行以下任何操作来选择显示哪些指标

    选项 描述

    隐藏查询中的所有指标。

    点击查询的选项菜单 kebab 并点击隐藏所有序列

    隐藏特定指标。

    转到查询表,并点击指标名称旁边的彩色方块。

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

    执行以下操作之一

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

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

    重置时间范围。

    点击重置缩放

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

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

    隐藏绘图。

    点击隐藏图表

其他资源

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

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

指标目标页面显示用户定义项目的指标。

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

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

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

    • 正在抓取的服务端点 URL

    • 正在监控的 ServiceMonitor 组件

    • 目标的启动停止状态

    • 命名空间

    • 上次抓取时间

    • 上次抓取的持续时间

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

    选项 描述

    按状态和来源筛选目标。

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

    提供以下筛选选项

    • 状态筛选器

      • 启动。目标当前处于启动状态,并且正在积极抓取指标。

      • 停止。目标当前处于停止状态,并且未抓取指标。

    • 来源筛选器

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

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

    按名称或标签搜索目标。

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

    对目标进行排序。

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

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

    • 正在抓取指标的端点 URL

    • 目标当前的启动停止状态

    • 指向命名空间的链接

    • 指向 ServiceMonitor 详细信息的链接

    • 附加到目标的标签

    • 上次抓取指标的时间