Installing Red Hat OpenShift Cluster Observability Operator


Red Hat OpenShift Cluster Observability Operator 1-latest

安装和配置 Cluster Observability Operator。

Red Hat OpenShift Documentation Team

摘要

本文档提供有关安装 Cluster Observability Operator 的信息,并将其配置为监控服务。

第 1 章 安装 Cluster Observability Operator

作为集群管理员,您可以使用 OpenShift Container Platform Web 控制台从 OperatorHub 安装或删除 Cluster Observability Operator (COO)。OperatorHub 是一个用户界面,可与 Operator Lifecycle Manager (OLM) 结合使用,它在集群中安装和管理 Operator。

使用 OpenShift Container Platform Web 控制台从 OperatorHub 安装 Cluster Observability Operator (COO)。

先决条件

  • 您可以使用具有 cluster-admin 集群角色的用户身份访问集群。
  • 已登陆到 OpenShift Container Platform Web 控制台。

流程

  1. 在 OpenShift Container Platform Web 控制台中,点击 OperatorsOperatorHub
  2. Filter by keyword 框中键入 cluster observability operator
  3. 在结果列表中点 Cluster Observability Operator
  4. 阅读 Operator 信息并配置以下安装设置:

    • Update channelstable
    • 版本1.0.0 或更高版本
    • Installation modeAll namespaces on the cluster (default)
    • Installed NamespaceOperator recommended Namespace: openshift-cluster-observability-operator
    • 选择 Enable Operator recommended cluster monitoring on this Namespace
    • Update approvalAutomatic
  5. 可选: 您可以更改安装设置以满足您的要求。例如,您可以选择订阅不同的更新频道,安装一个旧的 Operator 发行版本,或者需要手动批准对 Operator 的新版本进行更新。
  6. Install

验证

  • 进入 OperatorsInstalled Operators,并验证 Cluster Observability Operator 条目是否出现在列表中。

如果使用 OperatorHub 安装 Cluster Observability Operator (COO),您可以在 OpenShift Container Platform Web 控制台中卸载它。

先决条件

  • 您可以使用具有 cluster-admin 集群角色的用户身份访问集群。
  • 已登陆到 OpenShift Container Platform Web 控制台。

流程

  1. 进入 OperatorsInstalled Operators
  2. 在列表中找到 Cluster Observability Operator 条目。
  3. 在这个条目中点 kebab 并选择 Uninstall Operator

验证

  • 进入 OperatorsInstalled Operators,验证 Cluster Observability Operator 条目是否不再出现在列表中。

您可以通过配置由 Cluster Observability Operator (COO) 管理的监控堆栈来监控服务的指标。

要测试监控服务,请按照以下步骤执行:

  • 部署定义服务端点的示例服务。
  • 创建一个 ServiceMonitor 对象,用于指定服务如何被 COO 监控。
  • 创建 MonitoringStack 对象来发现 ServiceMonitor 对象。

2.1. 为 Cluster Observability Operator 部署示例服务

此配置会在用户定义的 ns1-coo 项目中部署一个名为 prometheus-coo-example-app 的示例服务。该服务会公开自定义 version 指标。

先决条件

  • 您可以使用具有 cluster-admin 集群角色或具有命名空间管理权限的用户身份访问集群。

流程

  1. 创建名为 prometheus-coo-example-app.yaml 的 YAML 文件,其中包含命名空间、部署和服务的以下配置详情:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: ns1-coo
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: prometheus-coo-example-app
      name: prometheus-coo-example-app
      namespace: ns1-coo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: prometheus-coo-example-app
      template:
        metadata:
          labels:
            app: prometheus-coo-example-app
        spec:
          containers:
          - image: ghcr.io/rhobs/prometheus-example-app:0.4.2
            imagePullPolicy: IfNotPresent
            name: prometheus-coo-example-app
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: prometheus-coo-example-app
      name: prometheus-coo-example-app
      namespace: ns1-coo
    spec:
      ports:
      - port: 8080
        protocol: TCP
        targetPort: 8080
        name: web
      selector:
        app: prometheus-coo-example-app
      type: ClusterIP
    Copy to Clipboard Toggle word wrap
  2. 保存该文件。
  3. 运行以下命令,将配置应用到集群:

    $ oc apply -f prometheus-coo-example-app.yaml
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令验证 pod 是否正在运行,并观察输出:

    $ oc -n ns1-coo get pod
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                                      READY     STATUS    RESTARTS   AGE
    prometheus-coo-example-app-0927545cb7-anskj   1/1       Running   0          81m
    Copy to Clipboard Toggle word wrap

要使用您在 "Deploying a sample service for Cluster Observability Operator" 部分创建的样本服务公开的指标,您必须将监控组件配置为从 /metrics 端点中提取指标。

您可以使用一个 ServiceMonitor 对象来创建此配置,指定如何监控该服务,或指定如何监控 pod 的 PodMonitor 对象。ServiceMonitor 对象需要一个 Service 对象。PodMonitor 对象不需要,它允许 MonitoringStack 对象直接从 Pod 公开的指标端点中提取指标。

此流程演示了如何在 ns1-coo 命名空间中为名为 prometheus-coo-example-app 的示例服务创建 ServiceMonitor 对象。

先决条件

  • 您可以使用具有 cluster-admin 集群角色或具有命名空间管理权限的用户身份访问集群。
  • 已安装 Cluster Observability Operator。
  • 您已在 ns1-coo 命名空间中部署了 prometheus-coo-example-app 示例服务。

    注意

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

流程

  1. 创建名为 example-coo-app-service-monitor.yaml 的 YAML 文件,其中包含以下 ServiceMonitor 对象配置详情:

    apiVersion: monitoring.rhobs/v1
    kind: ServiceMonitor
    metadata:
      labels:
        k8s-app: prometheus-coo-example-monitor
      name: prometheus-coo-example-monitor
      namespace: ns1-coo
    spec:
      endpoints:
      - interval: 30s
        port: web
        scheme: http
      selector:
        matchLabels:
          app: prometheus-coo-example-app
    Copy to Clipboard Toggle word wrap

    此配置定义 MonitoringStack 对象将引用的 ServiceMonitor 对象,以提取由 prometheus-coo-example-app 示例服务公开的指标数据。

  2. 运行以下命令,将配置应用到集群:

    $ oc apply -f example-coo-app-service-monitor.yaml
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令并验证 ServiceMonitor 资源是否已创建并观察输出:

    $ oc -n ns1-coo get servicemonitors.monitoring.rhobs
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                         AGE
    prometheus-coo-example-monitor   81m
    Copy to Clipboard Toggle word wrap

要提取目标 prometheus-coo-example-app 服务公开的指标数据,请创建一个 MonitoringStack 对象,该对象引用您在"指定如何监控 Cluster Observability Operator"部分中创建的 ServiceMonitor 对象。然后,此 MonitoringStack 对象可以发现服务并从中提取公开的指标数据。

先决条件

  • 您可以使用具有 cluster-admin 集群角色或具有命名空间管理权限的用户身份访问集群。
  • 已安装 Cluster Observability Operator。
  • 您已在 ns1-coo 命名空间中部署了 prometheus-coo-example-app 示例服务。
  • 您已在 ns1-coo 命名空间中创建一个名为 prometheus-coo-example-monitorServiceMonitor 对象。

流程

  1. MonitoringStack 对象配置创建一个 YAML 文件。在本例中,将文件命名为 example-coo-monitoring-stack.yaml
  2. 添加以下 MonitoringStack 对象配置详情:

    MonitoringStack 对象示例

    apiVersion: monitoring.rhobs/v1alpha1
    kind: MonitoringStack
    metadata:
      name: example-coo-monitoring-stack
      namespace: ns1-coo
    spec:
      logLevel: debug
      retention: 1d
      resourceSelector:
        matchLabels:
          k8s-app: prometheus-coo-example-monitor
    Copy to Clipboard Toggle word wrap

  3. 运行以下命令来应用 MonitoringStack 对象:

    $ oc apply -f example-coo-monitoring-stack.yaml
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令并检查输出,验证 MonitoringStack 对象是否可用:

    $ oc -n ns1-coo get monitoringstack
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                         AGE
    example-coo-monitoring-stack   81m
    Copy to Clipboard Toggle word wrap

  5. 运行以下 comand,以从 Prometheus 检索有关活动目标的信息,并过滤输出以仅列出标有 app=prometheus-coo-example-app 的目标。这会验证被发现哪些目标,并由 Prometheus 使用这个特定标签主动监控。

    $ oc -n ns1-coo exec -c prometheus prometheus-example-coo-monitoring-stack-0 -- curl -s 'http://localhost:9090/api/v1/targets' | jq '.data.activeTargets[].discoveredLabels | select(.__meta_kubernetes_endpoints_label_app=="prometheus-coo-example-app")'
    Copy to Clipboard Toggle word wrap

    输出示例

    {
      "__address__": "10.129.2.25:8080",
      "__meta_kubernetes_endpoint_address_target_kind": "Pod",
      "__meta_kubernetes_endpoint_address_target_name": "prometheus-coo-example-app-5d8cd498c7-9j2gj",
      "__meta_kubernetes_endpoint_node_name": "ci-ln-8tt8vxb-72292-6cxjr-worker-a-wdfnz",
      "__meta_kubernetes_endpoint_port_name": "web",
      "__meta_kubernetes_endpoint_port_protocol": "TCP",
      "__meta_kubernetes_endpoint_ready": "true",
      "__meta_kubernetes_endpoints_annotation_endpoints_kubernetes_io_last_change_trigger_time": "2024-11-05T11:24:09Z",
      "__meta_kubernetes_endpoints_annotationpresent_endpoints_kubernetes_io_last_change_trigger_time": "true",
      "__meta_kubernetes_endpoints_label_app": "prometheus-coo-example-app",
      "__meta_kubernetes_endpoints_labelpresent_app": "true",
      "__meta_kubernetes_endpoints_name": "prometheus-coo-example-app",
      "__meta_kubernetes_namespace": "ns1-coo",
      "__meta_kubernetes_pod_annotation_k8s_ovn_org_pod_networks": "{\"default\":{\"ip_addresses\":[\"10.129.2.25/23\"],\"mac_address\":\"0a:58:0a:81:02:19\",\"gateway_ips\":[\"10.129.2.1\"],\"routes\":[{\"dest\":\"10.128.0.0/14\",\"nextHop\":\"10.129.2.1\"},{\"dest\":\"172.30.0.0/16\",\"nextHop\":\"10.129.2.1\"},{\"dest\":\"100.64.0.0/16\",\"nextHop\":\"10.129.2.1\"}],\"ip_address\":\"10.129.2.25/23\",\"gateway_ip\":\"10.129.2.1\",\"role\":\"primary\"}}",
      "__meta_kubernetes_pod_annotation_k8s_v1_cni_cncf_io_network_status": "[{\n    \"name\": \"ovn-kubernetes\",\n    \"interface\": \"eth0\",\n    \"ips\": [\n        \"10.129.2.25\"\n    ],\n    \"mac\": \"0a:58:0a:81:02:19\",\n    \"default\": true,\n    \"dns\": {}\n}]",
      "__meta_kubernetes_pod_annotation_openshift_io_scc": "restricted-v2",
      "__meta_kubernetes_pod_annotation_seccomp_security_alpha_kubernetes_io_pod": "runtime/default",
      "__meta_kubernetes_pod_annotationpresent_k8s_ovn_org_pod_networks": "true",
      "__meta_kubernetes_pod_annotationpresent_k8s_v1_cni_cncf_io_network_status": "true",
      "__meta_kubernetes_pod_annotationpresent_openshift_io_scc": "true",
      "__meta_kubernetes_pod_annotationpresent_seccomp_security_alpha_kubernetes_io_pod": "true",
      "__meta_kubernetes_pod_controller_kind": "ReplicaSet",
      "__meta_kubernetes_pod_controller_name": "prometheus-coo-example-app-5d8cd498c7",
      "__meta_kubernetes_pod_host_ip": "10.0.128.2",
      "__meta_kubernetes_pod_ip": "10.129.2.25",
      "__meta_kubernetes_pod_label_app": "prometheus-coo-example-app",
      "__meta_kubernetes_pod_label_pod_template_hash": "5d8cd498c7",
      "__meta_kubernetes_pod_labelpresent_app": "true",
      "__meta_kubernetes_pod_labelpresent_pod_template_hash": "true",
      "__meta_kubernetes_pod_name": "prometheus-coo-example-app-5d8cd498c7-9j2gj",
      "__meta_kubernetes_pod_node_name": "ci-ln-8tt8vxb-72292-6cxjr-worker-a-wdfnz",
      "__meta_kubernetes_pod_phase": "Running",
      "__meta_kubernetes_pod_ready": "true",
      "__meta_kubernetes_pod_uid": "054c11b6-9a76-4827-a860-47f3a4596871",
      "__meta_kubernetes_service_label_app": "prometheus-coo-example-app",
      "__meta_kubernetes_service_labelpresent_app": "true",
      "__meta_kubernetes_service_name": "prometheus-coo-example-app",
      "__metrics_path__": "/metrics",
      "__scheme__": "http",
      "__scrape_interval__": "30s",
      "__scrape_timeout__": "10s",
      "job": "serviceMonitor/ns1-coo/prometheus-coo-example-monitor/0"
    }
    Copy to Clipboard Toggle word wrap

    注意

    上面的示例使用 jq 命令行 JSON 处理器来格式化输出,以方便使用。

2.4. 验证监控堆栈

要验证监控堆栈是否正常工作,请访问 example 服务,然后查看收集的指标。

先决条件

  • 您可以使用具有 cluster-admin 集群角色或具有命名空间管理权限的用户身份访问集群。
  • 已安装 Cluster Observability Operator。
  • 您已在 ns1-coo 命名空间中部署了 prometheus-coo-example-app 示例服务。
  • 您已在 ns1-coo 命名空间中创建一个名为 prometheus-coo-example-monitorServiceMonitor 对象。
  • 您已在 ns1-coo 命名空间中创建一个名为 example-coo-monitoring-stackMonitoringStack 对象。

流程

  1. 创建一个路由,以公开 prometheus-coo-example-app 服务示例。在终端中运行以下命令:

    $ oc expose svc prometheus-coo-example-app -n ns1-coo
    Copy to Clipboard Toggle word wrap
  2. 从浏览器或命令行访问路由,以生成指标。
  3. 在 Prometheus pod 上执行查询,以返回总 HTTP 请求指标:

    $ oc -n ns1-coo exec -c prometheus prometheus-example-coo-monitoring-stack-0 -- curl -s 'http://localhost:9090/api/v1/query?query=http_requests_total'
    Copy to Clipboard Toggle word wrap

    输出示例(为方便起见使用 jq 进行格式化)

    {
      "status": "success",
      "data": {
        "resultType": "vector",
        "result": [
          {
            "metric": {
              "__name__": "http_requests_total",
              "code": "200",
              "endpoint": "web",
              "instance": "10.129.2.25:8080",
              "job": "prometheus-coo-example-app",
              "method": "get",
              "namespace": "ns1-coo",
              "pod": "prometheus-coo-example-app-5d8cd498c7-9j2gj",
              "service": "prometheus-coo-example-app"
            },
            "value": [
              1730807483.632,
              "3"
            ]
          },
          {
            "metric": {
              "__name__": "http_requests_total",
              "code": "404",
              "endpoint": "web",
              "instance": "10.129.2.25:8080",
              "job": "prometheus-coo-example-app",
              "method": "get",
              "namespace": "ns1-coo",
              "pod": "prometheus-coo-example-app-5d8cd498c7-9j2gj",
              "service": "prometheus-coo-example-app"
            },
            "value": [
              1730807483.632,
              "0"
            ]
          }
        ]
      }
    }
    Copy to Clipboard Toggle word wrap

2.5. 在多个命名空间中 Scrape 目标

要在多个命名空间中 Scrape 目标,请在 MonitoringStack 对象中设置命名空间和资源选择器。

先决条件

  • 您可以使用具有 cluster-admin 集群角色或具有命名空间管理权限的用户身份访问集群。
  • 已安装 Cluster Observability Operator。

流程

  1. 部署以下命名空间对象和 MonitoringStack YAML 文件:

    MonitoringStack 示例

    apiVersion: v1
    kind: Namespace
    metadata:
      name: ns1-coo
      labels:
        monitoring.rhobs/stack: multi-ns
    ---
    apiVersion: monitoring.rhobs/v1alpha1
    kind: MonitoringStack
    metadata:
      name: example-coo-monitoring-stack
      namespace: ns1-coo
    spec:
      logLevel: debug
      retention: 1d
      resourceSelector:
          matchLabels:
            k8s-app: prometheus-coo-example-monitor
      namespaceSelector:
          matchLabels:
            monitoring.rhobs/stack: multi-ns
    Copy to Clipboard Toggle word wrap

  2. 在命名空间 ns1-coo 中部署示例应用程序,其中包含始终会触发的警报:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: prometheus-coo-example-app
      name: prometheus-coo-example-app
      namespace: ns1-coo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: prometheus-coo-example-app
      template:
        metadata:
          labels:
            app: prometheus-coo-example-app
        spec:
          containers:
          - image: ghcr.io/rhobs/prometheus-example-app:0.4.2
            imagePullPolicy: IfNotPresent
            name: prometheus-coo-example-app
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: prometheus-coo-example-app
      name: prometheus-coo-example-app
      namespace: ns1-coo
    spec:
      ports:
      - port: 8080
        protocol: TCP
        targetPort: 8080
        name: web
      selector:
        app: prometheus-coo-example-app
      type: ClusterIP
    ---
    apiVersion: monitoring.rhobs/v1
    kind: ServiceMonitor
    metadata:
      labels:
        k8s-app: prometheus-coo-example-monitor
      name: prometheus-coo-example-monitor
      namespace: ns1-coo
    spec:
      endpoints:
      - interval: 30s
        port: web
        scheme: http
      selector:
        matchLabels:
          app: prometheus-coo-example-app
    ---
    apiVersion: monitoring.rhobs/v1
    kind: PrometheusRule
    metadata:
      name: example-alert
      namespace: ns1-coo
      labels:
        k8s-app: prometheus-coo-example-monitor
    spec:
      groups:
      - name: example
        rules:
        - alert: VersionAlert
          for: 1m
          expr: version{job="prometheus-coo-example-app"} > 0
          labels:
            severity: warning
    Copy to Clipboard Toggle word wrap
  3. 在标有 monitoring.rhobs/stack: multi-ns 的另一个命名空间中部署相同的示例应用程序:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: ns2-coo
      labels:
        monitoring.rhobs/stack: multi-ns
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: prometheus-coo-example-app
      name: prometheus-coo-example-app
      namespace: ns2-coo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: prometheus-coo-example-app
      template:
        metadata:
          labels:
            app: prometheus-coo-example-app
        spec:
          containers:
          - image: ghcr.io/rhobs/prometheus-example-app:0.4.2
            imagePullPolicy: IfNotPresent
            name: prometheus-coo-example-app
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: prometheus-coo-example-app
      name: prometheus-coo-example-app
      namespace: ns2-coo
    spec:
      ports:
      - port: 8080
        protocol: TCP
        targetPort: 8080
        name: web
      selector:
        app: prometheus-coo-example-app
      type: ClusterIP
    ---
    apiVersion: monitoring.rhobs/v1
    kind: ServiceMonitor
    metadata:
      labels:
        k8s-app: prometheus-coo-example-monitor
      name: prometheus-coo-example-monitor
      namespace: ns2-coo
    spec:
      endpoints:
      - interval: 30s
        port: web
        scheme: http
      selector:
        matchLabels:
          app: prometheus-coo-example-app
    Copy to Clipboard Toggle word wrap

验证

  1. 验证 Prometheus 实例是否已添加新目标,以及警报是否已触发。使用 port-forward 命令公开 Prometheus 或 Monitoringstack 实例部署的 Alertmanager 用户界面。

    Prometheus

    $ oc port-forward -n ns1-coo pod/prometheus-example-coo-monitoring-stack-0 9090
    Copy to Clipboard Toggle word wrap

    Alertmanager

    $ oc port-forward -n ns1-coo pod/alertmanager-example-coo-monitoring-stack-0 9093
    Copy to Clipboard Toggle word wrap

  2. 通过浏览 http://localhost:9090/targetshttp://localhost:9093/#/alerts 来验证目标是否已被 scrape。

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat