5.3. 使用 CLI 访问监控 API


在 OpenShift Container Platform 中,您可以从命令行界面(CLI)访问一些监控组件的 Web 服务 API。

重要

在某些情况下,访问 API 端点可能会降低集群的性能和可扩展性,特别是在使用端点来检索、发送或查询大量指标数据时。

要避免这些问题,请考虑以下建议:

  • 避免频繁查询端点。将查询限制为每 30 秒最多一个。
  • 不要通过 Prometheus 的 /federate 端点检索所有指标数据。只有在您要检索有限、聚合的数据集时才会查询端点。例如,检索每个请求数量少于 1,000 个样本,有助于最大程度降低性能下降的风险。

5.3.1. 关于访问监控 Web 服务 API

您可以从命令行直接访问以下监控堆栈组件的 Web 服务 API 端点:

  • Prometheus
  • Alertmanager
  • Thanos Ruler
  • Thanos querier
重要

要访问 Thanos Ruler 和 Thanos Querier 服务 API,请求的帐户必须具有命名空间资源的 get 权限,这些资源可通过向帐户授予 cluster-monitoring-view 集群角色来完成。

当您访问监控组件的 Web 服务 API 端点时,请注意以下限制:

  • 您只能使用 bearer 令牌身份验证来访问 API 端点。
  • 您只能访问路由的 /api 路径中的端点。如果您试图在 Web 浏览器中访问 API 端点,则会出现一个 Application is not available 的错误。要在网页浏览器中访问监控功能,请使用 OpenShift Container Platform Web 控制台查看监控仪表板。

5.3.2. 访问监控 Web 服务 API

以下示例演示了如何查询服务 API 接收器以获取核心平台监控中使用的 Alertmanager 服务。您可以使用类似的方法访问核心平台 Prometheus 的 prometheus-k8s 服务,以及 Thanos Ruler 的 thanos-ruler 服务。

先决条件

  • 您已登录到与 openshift-monitoring 命名空间中的 monitoring-alertmanager-edit 角色绑定的帐户。
  • 已登陆到一个有权获取 Alertmanager API 路由的帐户。

    注意

    如果您的帐户没有获取 Alertmanager API 路由的权限,集群管理员可以提供路由的 URL。

流程

  1. 运行以下命令来提取身份验证令牌:

    $ TOKEN=$(oc whoami -t)
  2. 运行以下命令提取 alertmanager-main API 路由 URL:

    $ HOST=$(oc -n openshift-monitoring get route alertmanager-main -ojsonpath='{.status.ingress[].host}')
  3. 运行以下命令,查询 Alertmanager 的服务 API 接收器:

    $ curl -H "Authorization: Bearer $TOKEN" -k "https://$HOST/api/v2/receivers"

5.3.3. 使用 Prometheus 的联邦端点查询指标

您可以使用 Prometheus 的联邦端点从集群外的网络位置提取平台和用户定义的指标。为此,请通过 OpenShift Container Platform 路由访问集群的 Prometheus /federate 端点。

重要

使用联邦时检索指标数据的延迟。这个延迟可能会影响提取指标的准确性和时间表。

使用联邦端点也可以降低集群的性能和可扩展性,特别是在使用联邦端点来获取大量指标数据时。要避免这些问题,请遵循以下建议:

  • 不要尝试通过 Prometheus 的联邦端点检索所有指标数据。只有在您要检索有限、聚合的数据集时才会查询。例如,检索每个请求数量少于 1,000 个样本,有助于最大程度降低性能下降的风险。
  • 避免频繁查询 Prometheus 的联邦端点。将查询限制为每 30 秒最多一个。

如果您需要在集群外转发大量数据,请使用远程写入。如需更多信息,请参阅配置远程写入存储部分。

先决条件

  • 已安装 OpenShift CLI(oc)。
  • 您可以使用具有 cluster-monitoring-view 集群角色的用户,或者获取了对 命名空间 资源具有 get 权限的 bearer 令牌来访问集群。

    注意

    您只能使用 bearer 令牌身份验证来访问 Prometheus 联邦端点。

  • 已登陆到一个有权获取 Prometheus 联邦路由的帐户。

    注意

    如果您的帐户没有获取 Prometheus 联邦路由的权限,集群管理员可以提供路由的 URL。

流程

  1. 运行以下命令来检索 bearer 令牌:

    $ TOKEN=$(oc whoami -t)
  2. 运行以下命令来获取 Prometheus 联邦路由 URL:

    $ HOST=$(oc -n openshift-monitoring get route prometheus-k8s-federate -ojsonpath='{.status.ingress[].host}')
  3. 查询 /federate 路由的指标。以下示例命令 up 指标 :

    $ curl -G -k -H "Authorization: Bearer $TOKEN" https://$HOST/federate --data-urlencode 'match[]=up'

    输出示例

    # TYPE up untyped
    up{apiserver="kube-apiserver",endpoint="https",instance="10.0.143.148:6443",job="apiserver",namespace="default",service="kubernetes",prometheus="openshift-monitoring/k8s",prometheus_replica="prometheus-k8s-0"} 1 1657035322214
    up{apiserver="kube-apiserver",endpoint="https",instance="10.0.148.166:6443",job="apiserver",namespace="default",service="kubernetes",prometheus="openshift-monitoring/k8s",prometheus_replica="prometheus-k8s-0"} 1 1657035338597
    up{apiserver="kube-apiserver",endpoint="https",instance="10.0.173.16:6443",job="apiserver",namespace="default",service="kubernetes",prometheus="openshift-monitoring/k8s",prometheus_replica="prometheus-k8s-0"} 1 1657035343834
    ...

5.3.4. 从集群外部访问自定义应用程序的指标

在使用用户定义的项目监控您自己的服务时,您可以从集群外部查询 Prometheus 指标。使用 thanos-querier 路由从集群外部访问这些数据。

此访问仅支持使用 bearer 令牌进行身份验证。

先决条件

  • 您已按照用户定义的项目启用监控部署了自己的服务。
  • 您可以使用 cluster-monitoring-view 集群角色登录到帐户,它提供访问 Thanos Querier API 的权限。
  • 已登陆到一个有权获取 Thanos Querier API 路由的帐户。

    注意

    如果您的帐户没有权限获取 Thanos Querier API 路由,集群管理员可以提供路由的 URL。

流程

  1. 运行以下命令,提取身份验证令牌以连接到 Prometheus:

    $ TOKEN=$(oc whoami -t)
  2. 运行以下命令,提取 thanos-querier API 路由 URL:

    $ HOST=$(oc -n openshift-monitoring get route thanos-querier -ojsonpath='{.status.ingress[].host}')
  3. 使用以下命令,将命名空间设置为运行服务的命名空间:

    $ NAMESPACE=ns1
  4. 运行以下命令,在命令行中查询您自己的服务的指标:

    $ curl -H "Authorization: Bearer $TOKEN" -k "https://$HOST/api/v1/query?" --data-urlencode "query=up{namespace='$NAMESPACE'}"

    输出显示 Prometheus 提取的每个应用程序 pod 的状态:

    格式的示例输出

    {
      "status": "success",
      "data": {
        "resultType": "vector",
        "result": [
          {
            "metric": {
              "__name__": "up",
              "endpoint": "web",
              "instance": "10.129.0.46:8080",
              "job": "prometheus-example-app",
              "namespace": "ns1",
              "pod": "prometheus-example-app-68d47c4fb6-jztp2",
              "service": "prometheus-example-app"
            },
            "value": [
              1591881154.748,
              "1"
            ]
          }
        ],
      }
    }

    注意
    • 格式的示例输出使用过滤工具(如 jq )来提供格式化的缩进 JSON。有关使用 jq 的更多信息,请参阅 jq Manual
    • 命令会请求 Thanos Querier 服务的一个即时查询端点,它会在某个时间点评估选择器。

5.3.5. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.