Skip to content

antony@notes:~/openshift$ cat "Install-Red-Hat-Openshift-Logging-on-ocp-4.18.md"

Install Red Hat Openshift Logging on ocp 4.18

2025-09-18· openshift

Install Red Hat Openshift Logging 6.3

1. 先備知識

1.1. Openshift Logging 簡介

OpenShift Container Platform 的 Operator 使用自訂資源 (Custom Resources, CRs) 來管理應用程式及其元件。您可以透過 CR 提供高階的配置與設定。Operator 會根據其邏輯中內建的最佳實踐,將高階指令轉譯為低階操作。自訂資源定義 (Custom Resource Definition, CRD) 則會定義一個 CR,並列出所有供該 Operator 使用者使用的配置。安裝 Operator 時會建立 CRD,以便用來產生 CR。

若要開始使用日誌功能 (logging),您必須安裝下列 Operator:

  • Loki Operator:用於管理您的日誌儲存。
  • Red Hat OpenShift Logging Operator:用於管理日誌的收集與轉發。
  • Cluster Observability Operator (COO):用於管理視覺化。

您可以使用 OpenShift Container Platform 網站主控台或 OpenShift 容器平台命令列介面 (CLI) 來安裝或設定日誌功能。

:::warning 重要提示: 必須在設定 Loki Operator 之後,才能設定 Red Hat OpenShift Logging Operator。 :::

1.2. 先決條件

如果是在離線環境的 openshift,請確定有正確設定 catalogsources CR 和 imagecontentsourcepolicies CR,可透過以下兩個命令檢查

  1. 確認 catalogsources

    oc -n openshift-marketplace get catalogsources.operators.coreos.com

    執行結果:

    NAME                       DISPLAY   TYPE   PUBLISHER   AGE
    cs-redhat-operator-index             grpc               2d17h
  2. 確認對應的 operator pod 正常運作

    oc -n openshift-marketplace get pods -l "olm.catalogSource=cs-redhat-operator-index"

    執行結果:

    NAME                             READY   STATUS    RESTARTS   AGE
    cs-redhat-operator-index-wm57c   1/1     Running   0          2d17h
  3. 確認 imagecontentsourcepolicies 有定義 openshift-logging operator 的 image 要去哪一個本地的 image registry 下載

    oc -n openshift-marketplace get imagecontentsourcepolicies.operator.openshift.io operator-0 -o json \
    | jq -r '"SOURCE\tMIRRORS", (.spec.repositoryDigestMirrors[] | "\(.source)\t\(.mirrors | join(", "))")' \
    | column -ts $'\t'

    執行結果:

    SOURCE                                             MIRRORS
    registry.redhat.io/cluster-observability-operator  quay.kubeantony.com:8443/cluster-observability-operator
    registry.redhat.io/rhosdt                          quay.kubeantony.com:8443/rhosdt
    registry.redhat.io/rhel8                           quay.kubeantony.com:8443/rhel8
    registry.redhat.io/openshift-logging               quay.kubeantony.com:8443/openshift-logging
    registry.redhat.io/openshift4                      quay.kubeantony.com:8443/openshift4
    registry.redhat.io/quay                            quay.kubeantony.com:8443/quay
  4. 查詢叢集中,所有可從 OperatorHub 安裝的 Operator 套件,並檢查是否有 cluster-logging

    oc get packagemanifests.packages.operators.coreos.com

    執行結果:

    NAME                             CATALOG   AGE
    elasticsearch-operator                     2d22h
    opentelemetry-product                      2d22h
    loki-operator                              2d22h
    cluster-logging                            2d22h
    quay-operator                              2d22h
    cluster-observability-operator             2d22h

2. 使用 CLI 安裝 Loki Operator

2.1. 先決條件

  • 您擁有管理員權限。
  • 您已安裝 OpenShift 命令列介面 (oc)。
  • 您能夠存取一個受支援的物件儲存空間。例如:AWS S3、Google Cloud Storage、Azure、Swift、Minio 或 OpenShift Data Foundation。
  • 預先準備好要安裝的 loki size 對應的硬體資源
    • image

2.2. 開始安裝

  1. 建立工作目錄,並切換當前目錄至新建立的工作目錄

    mkdir -p ~/wulin/logging/loki;
    cd ~/wulin/logging/loki
  2. 幫 Loki Operator 建立 Namespace

    cat <<EOF > loki-operator-ns.yaml
    apiVersion: v1
    kind: Namespace
    metadata:
      name: openshift-operators-redhat 
      labels:
        openshift.io/cluster-monitoring: "true"
    EOF
  3. 建立 Namespace

    oc apply -f loki-operator-ns.yaml
  4. 建立 OperatorGroup 物件

    cat <<EOF > loki-operator-group.yaml
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: loki-operator
      namespace: openshift-operators-redhat 
    spec:
      upgradeStrategy: Default
    EOF

    必須指定 openshift-operators-redhat 作為 namespace。

  5. 建立 OperatorGroup

    oc apply -f loki-operator-group.yaml
  6. 幫 Loki Operator 建立 Subscription

    cat <<EOF > loki-operator-subscription.yaml
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: loki-operator
      namespace: openshift-operators-redhat 
    spec:
      channel: stable-6.3
      installPlanApproval: Manual
      name: loki-operator
      source: redhat-operators 
      sourceNamespace: openshift-marketplace
    EOF
    1. 您必須將 openshift-operators-redhat 指定為 namespace。
    2. stable-6.3 指定為頻道。
    3. 如果訂閱中的核准策略設定為 Automatic (自動),那麼一旦所選的頻道中有新的 Operator 版本可用,更新程序就會立即啟動。如果核准策略設定為 Manual (手動),您就必須手動核准待處理的更新。
    4. redhat-operators 指定為其值。如果您的 OpenShift Container Platform 叢集安裝在受限網路 (也稱為離線叢集) 中,請指定您在設定 Operator Lifecycle Manager (OLM) 時所建立的 CatalogSource 物件名稱。
  7. 建立 Subscription

    oc apply -f loki-operator-subscription.yaml
  8. 檢查是否有待處理的 Operator 安裝更新計畫

    oc -n openshift-operators-redhat get installplans

    執行結果:

    NAME            CSV                    APPROVAL   APPROVED
    install-w2988   loki-operator.v6.3.0   Manual     false

    如果沒看到 installplans,去看 openshift-marketplace namespace 底下應該會有一個 job pod 噴錯

  9. 手動核准待處理的安裝計畫

    oc patch installplan $(oc -n openshift-operators-redhat get installplans.operators.coreos.com -o name | cut -d "/" -f 2) \
      -n openshift-operators-redhat \
      --type merge \
      --patch '{"spec":{"approved":true}}'
  10. 查詢 Operator 目前的版本狀態

    oc -n openshift-operators-redhat get csv

    正確執行結果:

    NAME                     DISPLAY                     VERSION   REPLACES   PHASE
    loki-operator.v6.3.0     Loki Operator               6.3.0                Succeeded
  11. 確認 operator pod 狀態

    oc -n openshift-operators-redhat get pods

    執行結果:

    NAME                                               READY   STATUS    RESTARTS   AGE
    loki-operator-controller-manager-5bff6f97d-7wtnz   2/2     Running   0          16m
  12. 幫 LokiStack 建 namespace

    cat <<EOF > lokistack-ns.yaml
    apiVersion: v1
    kind: Namespace
    metadata:
      name: openshift-logging 
      labels:
        openshift.io/cluster-monitoring: "true"
    EOF
    1. openshift-logging namespace 專門用於所有 logging 的 workload。
    2. openshift.io/cluster-monitoring: "true" 一個字串值,用於指定標籤,以確保 cluster monitoring 能夠抓取 openshift-logging namespace。
  13. 建立 namespace

    oc apply -f lokistack-ns.yaml
  14. 建立一個 Secret,其中包含用以存取 object storage 空間的憑證。例如,建立一個用以存取 Minio s3 的 Secret。

    cat <<EOF > lokistack-secret.yaml
    apiVersion: v1
    kind: Secret
    metadata:
      name: logging-loki-s3 
      namespace: openshift-logging
    stringData: 
      access_key_id: admin
      access_key_secret: admin123
      bucketnames: test
      endpoint: https://antony-minio.example.com
      region: us-west-2
    EOF
  15. 建立 Secret

    oc apply -f lokistack-secret.yaml
  16. 建立 LokiStack CR

    cat <<EOF > lokistack-cr.yaml
    apiVersion: loki.grafana.com/v1
    kind: LokiStack
    metadata:
      name: logging-loki
      namespace: openshift-logging
    spec:
      size: 1x.extra-small
      storage:
        schemas:
        - version: v13
          effectiveDate: "2025-09-11"
        secret:
          name: logging-loki-s3
          type: s3
      storageClassName: managed-nfs-storage
      tenants:
        mode: openshift-logging
    EOF
    1. metadata.name: 請使用名稱 logging-loki
    2. metadata.namespace: 必須將 openshift-logging 指定為 namespace。
    3. spec.size: 指定部署規模。Loki 生產環境執行個體支援的規模選項為 1x.extra-small1x.small1x.medium。此外,自 logging 6.1 版起也支援 1x.pico
    4. spec.storage.schemas.effectiveDate: 對於新的安裝,此日期應設定為相當於「昨天」的日期,因為這將會是 schema (結構綱要) 生效的起始日期。
    5. spec.storage.secret.name: 指定您的日誌儲存 Secret 名稱。
    6. spec.storage.secret.type: 指定對應的儲存類型。
    7. spec.storageClassName: 指定一個用於暫存空間的儲存類別 (Storage Class) 名稱。為獲得最佳效能,請指定一個會分配 block storage 的儲存類別。可以使用 oc get storageclasses 指令來列出叢集所有可用的儲存類別。
    8. openshift-logging 模式是預設的租用模式 (tenancy mode),此模式會為稽核 (audit)、基礎架構 (infrastructure) 和應用程式 (application) 等日誌類型建立不同的租戶 (tenant)。這使得個別使用者及使用者群組對不同日誌串流 (log streams) 的存取控制成為可能。
  17. 建立 LokiStack CR

    oc apply -f lokistack-cr.yaml
  18. 切換 current project

    oc project openshift-logging
  19. 確認 LokiStack pod 狀態

    oc get pods

    正確執行結果:

    NAME                                           READY   STATUS    RESTARTS        AGE
    logging-loki-compactor-0                       1/1     Running   0               3m37s
    logging-loki-distributor-6bcbc8bc5b-bwjlj      1/1     Running   0               3m38s
    logging-loki-distributor-6bcbc8bc5b-bznfk      1/1     Running   0               3m38s
    logging-loki-gateway-6f9657d5f7-5mrfd          2/2     Running   0               3m37s
    logging-loki-gateway-6f9657d5f7-v4h75          2/2     Running   1 (3m31s ago)   3m37s
    logging-loki-index-gateway-0                   1/1     Running   0               3m37s
    logging-loki-index-gateway-1                   1/1     Running   0               3m16s
    logging-loki-ingester-0                        1/1     Running   0               3m38s
    logging-loki-ingester-1                        1/1     Running   0               2m35s
    logging-loki-querier-75c5755c58-c582z          1/1     Running   0               3m38s
    logging-loki-querier-75c5755c58-wtfv7          1/1     Running   0               3m38s
    logging-loki-query-frontend-7894d6df5c-g7vpj   1/1     Running   0               3m37s
    logging-loki-query-frontend-7894d6df5c-hlt4v   1/1     Running   0               3m37s

3. 使用 CLI 安裝 Red Hat OpenShift Logging Operator 6.3

請使用 OpenShift CLI (oc),將 Red Hat OpenShift Logging Operator 安裝至 OpenShift Container Platform 叢集,以收集日誌並將其轉發至日誌儲存區。

3.1. 先決條件

  • 擁有管理員權限。
  • 已安裝 OpenShift CLI (oc)。
  • 已安裝並設定 Loki Operator。
  • 已建立 openshift-logging 命名空間。

3.2. 開始安裝

  1. 建立工作目錄,並切換當前目錄至新建立的工作目錄

    mkdir -p ~/wulin/logging/openshift-logging;
    cd ~/wulin/logging/openshift-logging
  2. 建立 OperatorGroup YAML 檔

    cat <<EOF > logging-operator-group.yaml
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: cluster-logging
      namespace: openshift-logging 
    spec:
      upgradeStrategy: Default
    EOF
  3. 建立 OperatorGroup

    oc apply -f logging-operator-group.yaml
  4. 為 Red Hat OpenShift Logging Operator 建立 Subscription YAML 檔

    cat <<EOF > logging-operator-subscription.yaml
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: cluster-logging
      namespace: openshift-logging 
    spec:
      channel: stable-6.3
      installPlanApproval: Automatic 
      name: cluster-logging
      source: cs-redhat-operator-index
      sourceNamespace: openshift-marketplace
    EOF
  5. 建立 Subscription

    oc apply -f logging-operator-subscription.yaml
  6. 確認 operator pod 已啟動

    oc get pods

    執行結果:

    NAME                                           READY   STATUS    RESTARTS        AGE
    cluster-logging-operator-86bf5bc9b6-fxf28      1/1     Running   0               17h

3. 使用 CLI 安裝 logging UI plugin

3.1. 先決條件

  • 您擁有管理員權限。
  • 您已安裝 OpenShift CLI (oc)。
  • 您已安裝並設定 Loki Operator

3.2. 開始安裝 Cluster Observability Operator

Cluster Observability Operator 是 OpenShift Container Platform 的一個選用元件,專為建立和管理高度可自訂的監控堆疊而設計。它使叢集管理員能夠廣泛地自動化設定和管理監控需求,與預設的 OpenShift Container Platform 監控系統相比,它能為每個命名空間 (namespace) 提供更客製化且詳細的視圖。

COO 會部署以下監控元件:

  • Prometheus - 一個高可用性的 Prometheus 實例,能夠使用遠端寫入 (remote write) 將指標 (metrics) 傳送到外部端點。
  • Thanos Querier (選用) - 能夠從一個中央位置查詢多個 Prometheus 實例。
  • Alertmanager (選用) - 為不同服務提供警報設定功能。
  • UI plugins (選用) - 透過用於監控、日誌記錄、分散式追蹤和疑難排解的外掛程式來增強可觀測性。
  • Korrel8r (選用) - 提供可觀測性訊號的關聯性分析,由開源的 Korrel8r 專案提供支援。
  • Incident detection (選用) - 將相關的警報分組為事件,以協助您識別警報爆發的根本原因。
  1. 建立工作目錄,並切換當前目錄至新建立的工作目錄

    mkdir -p ~/wulin/logging/coo;
    cd ~/wulin/logging/coo
  2. 建立 OperatorGroup YAML 檔

    cat <<EOF > coo-operator-group.yaml
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: openshift-cluster-observability-operator
      namespace: openshift-cluster-observability-operator
    spec:
      upgradeStrategy: Default
    EOF
  3. 建立 OperatorGroup

    oc apply -f coo-operator-group.yaml
  4. 為 Cluster Observability Operator 建立 Subscription YAML 檔

    cat <<EOF > coo-subscription.yaml
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: cluster-observability-operator
      namespace: openshift-cluster-observability-operator
    spec:
      channel: stable
      installPlanApproval: Manual
      name: cluster-observability-operator
      source: cs-redhat-operator-index
      sourceNamespace: openshift-marketplace
      startingCSV: cluster-observability-operator.v1.2.2
    EOF
  5. 建立 Subscription

    oc apply -f coo-subscription.yaml
  6. 檢查是否有待處理的 Operator 安裝更新計畫

    oc -n openshift-cluster-observability-operator get installplans.operators.coreos.com

    執行結果:

    NAME            CSV                                     APPROVAL   APPROVED
    install-cxddp   cluster-observability-operator.v1.2.2   Manual     false

    如果沒看到 installplans,去看 openshift-marketplace namespace 底下應該會有一個 job pod 噴錯

  7. 手動核准待處理的安裝計畫

    oc patch installplan $(oc -n openshift-cluster-observability-operator get installplans.operators.coreos.com -o name | cut -d "/" -f 2) \
      -n openshift-cluster-observability-operator \
      --type merge \
      --patch '{"spec":{"approved":true}}'
  8. 查詢 Operator 目前的版本狀態

    oc -n openshift-cluster-observability-operator get csv

    正確執行結果:

    NAME                                    DISPLAY                          VERSION   REPLACES                                PHASE
    cluster-logging.v6.3.0                  Red Hat OpenShift Logging        6.3.0                                             Succeeded
    cluster-observability-operator.v1.2.2   Cluster Observability Operator   1.2.2     cluster-observability-operator.v1.2.1   Succeeded
    loki-operator.v6.3.0                    Loki Operator                    6.3.0                                             Succeeded
  9. 確認 operator pod 狀態

    oc -n openshift-cluster-observability-operator get pods

    執行結果:

    NAME                                                         READY   STATUS    RESTARTS   AGE
    obo-prometheus-operator-54d44bf564-czp56                     1/1     Running   0          19s
    obo-prometheus-operator-admission-webhook-86c9c76864-qg9hb   1/1     Running   0          18s
    obo-prometheus-operator-admission-webhook-86c9c76864-xbpcz   1/1     Running   0          19s
    observability-operator-77c8cf97cb-6qqqq                      1/1     Running   0          18s
    perses-operator-bfd8678b7-czxlk                              1/1     Running   0          17s
  10. 建立 UIPlugin CR

    cat <<EOF > coo-ui-plugin.yaml
    apiVersion: observability.openshift.io/v1alpha1
    kind: UIPlugin
    metadata:
      name: logging  
    spec:
      type: Logging  
      logging:
        lokiStack:
          name: logging-loki  
        logsLimit: 50
        timeout: 30s
        schema: otel
    EOF
  11. 建立 UIPlugin

    oc apply -f coo-ui-plugin.yaml
  12. 驗證:

    • 前往 Red Hat OpenShift Logging 網站主控台,若有彈出式訊息提示,請重新整理頁面。
    • 導覽至 Observe > Logs 面板,您可以在此執行 LogQL 查詢。您也可以從特定 Pod 的 Aggregated Logs 頁籤中,查詢該 Pod 的個別日誌。 image

4. 參考資料