×

您可以使用OpenShift CLI (oc) 或Red Hat OpenShift Service on AWS Web控制台在您的Red Hat OpenShift Service on AWS集群上部署日志存储。

日志记录5.9版本不包含OpenShift Elasticsearch Operator的更新版本。如果您目前使用的是日志记录5.8版本发布的OpenShift Elasticsearch Operator,它将继续与日志记录一起使用,直到日志记录5.8版本结束生命周期为止。作为使用OpenShift Elasticsearch Operator管理默认日志存储的替代方法,您可以使用Loki Operator。有关日志记录生命周期日期的更多信息,请参阅与平台无关的Operators

部署Loki日志存储

您可以使用Loki Operator在您的Red Hat OpenShift Service on AWS集群上部署内部Loki日志存储。安装Loki Operator后,必须通过创建密钥来配置Loki对象存储,并创建LokiStack自定义资源(CR)。

Loki部署规模

Loki的规模采用1x.<size>的格式,其中值1x是实例数量,<size>指定性能能力。

无法更改部署规模中的数字1x

表1. Loki规模
1x.demo 1x.extra-small 1x.small 1x.medium

数据传输

仅限演示使用

100GB/天

500GB/天

2TB/天

每秒查询数(QPS)

仅限演示使用

1-25 QPS at 200ms

25-50 QPS at 200ms

25-75 QPS at 200ms

复制因子

2

2

2

总CPU请求

14 vCPU

34 vCPU

54 vCPU

如果使用ruler,则总CPU请求

16 vCPU

42 vCPU

70 vCPU

总内存请求

31Gi

67Gi

139Gi

如果使用ruler,则总内存请求

35Gi

83Gi

171Gi

总磁盘请求

40Gi

430Gi

430Gi

590Gi

如果使用ruler,则总磁盘请求

80Gi

750Gi

750Gi

910Gi

使用Web控制台安装日志和Loki Operator

要在您的Red Hat OpenShift Service on AWS集群上安装和配置日志记录,必须首先安装用于日志存储的Operator,例如Loki Operator。这可以通过Web控制台中的OperatorHub来完成。

先决条件
  • 您可以访问受支持的对象存储(AWS S3、Google Cloud Storage、Azure、Swift、Minio、OpenShift Data Foundation)。

  • 您具有管理员权限。

  • 您可以访问Red Hat OpenShift Service on AWS Web控制台。

步骤
  1. 在Red Hat OpenShift Service on AWS Web控制台的**管理员**视角下,转到**Operators** → **OperatorHub**。

  2. 在**按关键词筛选**字段中输入Loki Operator。在可用Operators列表中点击**Loki Operator**,然后点击**安装**。

    Red Hat不支持社区Loki Operator。

  3. 选择**稳定版**或**稳定版-x.y**作为**更新通道**。

    **稳定版**通道仅提供对最新日志记录版本的更新。要继续接收先前版本的更新,您必须将订阅通道更改为**稳定版-x.y**,其中x.y代表您已安装的日志记录的主版本和次版本。例如,**稳定版-5.7**。

    Loki Operator必须部署到全局operator组命名空间openshift-operators-redhat,因此**安装模式**和**已安装命名空间**已预先选择。如果此命名空间尚不存在,则会为您创建。

  4. 选择**在此命名空间上启用Operator推荐的集群监控**。

    此选项在Namespace对象中设置openshift.io/cluster-monitoring: "true"标签。您必须选择此选项,以确保集群监控会抓取openshift-operators-redhat命名空间。

  5. 对于**更新批准**,选择**自动**,然后点击**安装**。

    如果订阅中的批准策略设置为**自动**,则只要在所选通道中出现新的Operator版本,更新过程就会立即启动。如果批准策略设置为**手动**,则必须手动批准待处理的更新。

  6. 安装Red Hat OpenShift Logging Operator

    1. 在Red Hat OpenShift Service on AWS Web控制台中,点击**Operators** → **OperatorHub**。

    2. 从可用Operators列表中选择**Red Hat OpenShift Logging**,然后点击**安装**。

    3. 确保在**安装模式**下选择了**集群上的特定命名空间**。

    4. 确保在**已安装命名空间**下**Operator推荐的命名空间**为**openshift-logging**。

    5. 选择**在此命名空间上启用Operator推荐的集群监控**。

      此选项在Namespace对象中设置openshift.io/cluster-monitoring: "true"标签。您必须选择此选项,以确保集群监控会抓取openshift-logging命名空间。

    6. 选择**stable-5.y**作为**更新通道**。

    7. 选择**批准策略**。

      • **自动**策略允许Operator Lifecycle Manager (OLM)在有新版本可用时自动更新Operator。

      • **手动**策略需要具有相应凭据的用户来批准Operator更新。

    8. 点击**安装**。

  7. 转到**Operators** → **已安装Operators**页面。点击**所有实例**选项卡。

  8. 从**新建**下拉列表中,选择**LokiStack**。

  9. 选择**YAML视图**,然后使用以下模板创建LokiStack CR

    示例LokiStack CR
    apiVersion: loki.grafana.com/v1
    kind: LokiStack
    metadata:
      name: logging-loki (1)
      namespace: openshift-logging (2)
    spec:
      size: 1x.small (3)
      storage:
        schemas:
        - version: v13
          effectiveDate: "<yyyy>-<mm>-<dd>"
        secret:
          name: logging-loki-s3 (4)
          type: s3 (5)
          credentialMode: (6)
      storageClassName: <storage_class_name> (7)
      tenants:
        mode: openshift-logging (8)
    1 使用名称logging-loki
    2 您必须指定openshift-logging命名空间。
    3 指定部署规模。在日志记录5.8及更高版本中,Loki生产实例支持的规模选项为1x.extra-small1x.small1x.medium
    4 指定日志存储密钥的名称。
    5 指定相应的存储类型。
    6 可选字段,Logging 5.9 及更高版本。支持用户配置的值如下:static 是所有支持的对象存储类型使用的默认身份验证模式,使用存储在 Secret 中的凭据。token 用于从凭据源检索的短期令牌。在此模式下,静态配置不包含对象存储所需的凭据。相反,它们是在运行时使用服务生成的,这允许使用更短寿命的凭据并进行更细粒度的控制。此身份验证模式并非所有对象存储类型都支持。token-cco 是 Loki 在托管 STS 模式下运行并在 STS/WIF 集群上使用 CCO 时的默认值。
    7 指定临时存储的存储类的名称。为获得最佳性能,请指定分配块存储的存储类。可以使用 oc get storageclasses 命令列出集群可用的存储类。
    8 LokiStack 默认以多租户模式运行,无法修改。每种日志类型(审核日志、基础设施日志和应用程序日志)提供一个租户。这使得各个用户和用户组可以访问不同的日志流。

    无法更改部署规模中的数字1x

  10. 点击创建

  11. 创建 OpenShift Logging 实例

    1. 切换到管理自定义资源定义页面。

    2. 自定义资源定义页面上,点击ClusterLogging

    3. 自定义资源定义详细信息页面上,从操作菜单中选择查看实例

    4. ClusterLoggings页面上,点击创建 ClusterLogging

      您可能需要刷新页面才能加载数据。

    5. 在 YAML 字段中,将代码替换为以下内容

      apiVersion: logging.openshift.io/v1
      kind: ClusterLogging
      metadata:
        name: instance (1)
        namespace: openshift-logging (2)
      spec:
        collection:
          type: vector
        logStore:
          lokistack:
            name: logging-loki
          retentionPolicy:
            application:
              maxAge: 7d
            audit:
              maxAge: 7d
            infra:
              maxAge: 7d
          type: lokistack
        visualization:
          type: ocp-console
          ocpConsole:
            logsLimit: 15
        managementState: Managed
      1 名称必须为instance
      2 命名空间必须为openshift-logging
验证
  1. 转到Operators已安装的 Operators

  2. 确保选择了openshift-logging项目。

  3. 状态列中,验证您是否看到带有InstallSucceeded和文本最新的绿色复选标记。

在安装完成之前,Operator 可能显示失败状态。如果 Operator 安装以InstallSucceeded消息完成,请刷新页面。

使用 Web 控制台为 Loki 对象存储创建密钥

要配置 Loki 对象存储,必须创建一个密钥。可以使用 Red Hat OpenShift Service on AWS Web 控制台创建密钥。

先决条件
  • 您具有管理员权限。

  • 您可以访问Red Hat OpenShift Service on AWS Web控制台。

  • 您已安装 Loki Operator。

步骤
  1. 在 Red Hat OpenShift Service on AWS Web 控制台的管理员视角中,转到工作负载密钥

  2. 创建下拉列表中,选择从 YAML

  3. 创建一个使用access_key_idaccess_key_secret字段指定您的凭据,并使用bucketnamesendpointregion字段定义对象存储位置的密钥。以下示例使用 AWS

    示例Secret对象
    apiVersion: v1
    kind: Secret
    metadata:
      name: logging-loki-s3
      namespace: openshift-logging
    stringData:
      access_key_id: AKIAIOSFODNN7EXAMPLE
      access_key_secret: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
      bucketnames: s3-bucket-name
      endpoint: https://s3.eu-central-1.amazonaws.com
      region: eu-central-1
其他资源

工作负载身份联合

工作负载身份联合允许使用短期令牌对基于云的日志存储进行身份验证。

先决条件
  • Red Hat OpenShift Service on AWS 4.14 及更高版本

  • Logging 5.9 及更高版本

步骤
  • 如果您使用 Red Hat OpenShift Service on AWS Web 控制台安装 Loki Operator,则会自动检测使用短期令牌的集群。系统会提示您创建角色并提供 Loki Operator 创建CredentialsRequest对象所需的数据,该对象将填充密钥。

  • 如果您使用 OpenShift CLI (oc) 安装 Loki Operator,则必须使用适合您存储提供商的模板手动创建一个订阅对象,如下例所示。此身份验证策略仅支持指示的存储提供商。

Azure 示例订阅
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: loki-operator
  namespace: openshift-operators-redhat
spec:
  channel: "stable-5.9"
  installPlanApproval: Manual
  name: loki-operator
  source: redhat-operators
  sourceNamespace: openshift-marketplace
  config:
    env:
      - name: CLIENTID
        value: <your_client_id>
      - name: TENANTID
        value: <your_tenant_id>
      - name: SUBSCRIPTIONID
        value: <your_subscription_id>
      - name: REGION
        value: <your_region>
AWS 示例订阅
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: loki-operator
  namespace: openshift-operators-redhat
spec:
  channel: "stable-5.9"
  installPlanApproval: Manual
  name: loki-operator
  source: redhat-operators
  sourceNamespace: openshift-marketplace
  config:
    env:
    - name: ROLEARN
      value: <role_ARN>

使用 Web 控制台创建 LokiStack 自定义资源

您可以使用 Red Hat OpenShift Service on AWS Web 控制台创建LokiStack自定义资源 (CR)。

先决条件
  • 您具有管理员权限。

  • 您可以访问Red Hat OpenShift Service on AWS Web控制台。

  • 您已安装 Loki Operator。

步骤
  1. 转到**Operators** → **已安装Operators**页面。点击**所有实例**选项卡。

  2. 从**新建**下拉列表中,选择**LokiStack**。

  3. 选择**YAML视图**,然后使用以下模板创建LokiStack CR

    apiVersion: loki.grafana.com/v1
    kind: LokiStack
    metadata:
      name: logging-loki (1)
      namespace: openshift-logging
    spec:
      size: 1x.small (2)
      storage:
        schemas:
          - effectiveDate: '2023-10-15'
            version: v13
        secret:
          name: logging-loki-s3 (3)
          type: s3 (4)
          credentialMode: (5)
      storageClassName: <storage_class_name> (6)
      tenants:
        mode: openshift-logging
    1 使用名称logging-loki
    2 指定部署规模。在日志记录5.8及更高版本中,Loki生产实例支持的规模选项为1x.extra-small1x.small1x.medium
    3 指定用于日志存储的密钥。
    4 指定相应的存储类型。
    5 可选字段,Logging 5.9 及更高版本。支持用户配置的值如下:static 是所有支持的对象存储类型使用的默认身份验证模式,使用存储在 Secret 中的凭据。token 用于从凭据源检索的短期令牌。在此模式下,静态配置不包含对象存储所需的凭据。相反,它们是在运行时使用服务生成的,这允许使用更短寿命的凭据并进行更细粒度的控制。此身份验证模式并非所有对象存储类型都支持。token-cco 是 Loki 在托管 STS 模式下运行并在 STS/WIF 集群上使用 CCO 时的默认值。
    6 输入临时存储的存储类的名称。为获得最佳性能,请指定分配块存储的存储类。可以使用 oc get storageclasses 命令列出集群可用的存储类。

使用 CLI 安装 Logging 和 Loki Operator

要在您的 Red Hat OpenShift Service on AWS 集群上安装和配置日志记录,必须首先安装 Operator(例如用于日志存储的 Loki Operator)。这可以通过 Red Hat OpenShift Service on AWS CLI 完成。

先决条件
  • 您具有管理员权限。

  • 您已安装 OpenShift CLI (oc)。

  • 您可以访问支持的对象存储。例如:AWS S3、Google Cloud Storage、Azure、Swift、Minio 或 OpenShift Data Foundation。

步骤

**稳定版**通道仅提供对最新日志记录版本的更新。要继续接收先前版本的更新,您必须将订阅通道更改为**稳定版-x.y**,其中x.y代表您已安装的日志记录的主版本和次版本。例如,**稳定版-5.7**。

  1. 为 Loki Operator 创建Namespace对象

    示例Namespace对象
    apiVersion: v1
    kind: Namespace
    metadata:
      name: openshift-operators-redhat (1)
      annotations:
        openshift.io/node-selector: ""
      labels:
        openshift.io/cluster-monitoring: "true" (2)
    1 必须指定openshift-operators-redhat命名空间。为避免与指标发生可能的冲突,您应该将 Prometheus 集群监控堆栈配置为从openshift-operators-redhat命名空间而不是openshift-operators命名空间抓取指标。openshift-operators命名空间可能包含社区 Operators,这些 Operators 是不可信的,并且可能发布与 Red Hat OpenShift Service on AWS 指标名称相同的指标,这会导致冲突。
    2 一个字符串值,指定显示的标签,以确保集群监控抓取openshift-operators-redhat命名空间。
  2. 通过运行以下命令应用Namespace对象

    $ oc apply -f <filename>.yaml
  3. 为 Loki Operator 创建Subscription对象

    示例Subscription对象
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: loki-operator
      namespace: openshift-operators-redhat (1)
    spec:
      channel: stable (2)
      name: loki-operator
      source: redhat-operators (3)
      sourceNamespace: openshift-marketplace
    1 必须指定openshift-operators-redhat命名空间。
    2 指定stablestable-5.<y>作为通道。
    3 指定redhat-operators。如果您的 Red Hat OpenShift Service on AWS 集群安装在受限网络(也称为断开连接的集群)上,请指定在配置 Operator Lifecycle Manager (OLM) 时创建的CatalogSource对象的名称。
  4. 通过运行以下命令应用Subscription对象

    $ oc apply -f <filename>.yaml
  5. 为 Red Hat OpenShift Logging Operator 创建namespace对象

    示例namespace对象
    apiVersion: v1
    kind: Namespace
    metadata:
      name: openshift-logging (1)
      annotations:
        openshift.io/node-selector: ""
      labels:
        openshift.io/cluster-logging: "true"
        openshift.io/cluster-monitoring: "true" (2)
    1 Red Hat OpenShift Logging Operator 只能部署到openshift-logging命名空间。
    2 一个字符串值,指定显示的标签,以确保集群监控抓取openshift-operators-redhat命名空间。
  6. 通过运行以下命令应用namespace对象

    $ oc apply -f <filename>.yaml
  7. 创建一个OperatorGroup对象

    示例OperatorGroup对象
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: cluster-logging
      namespace: openshift-logging (1)
    spec:
      targetNamespaces:
      - openshift-logging
    1 您必须指定openshift-logging命名空间。
  8. 通过运行以下命令应用OperatorGroup对象

    $ oc apply -f <filename>.yaml
  9. 创建一个Subscription对象

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: cluster-logging
      namespace: openshift-logging (1)
    spec:
      channel: stable (2)
      name: cluster-logging
      source: redhat-operators (3)
      sourceNamespace: openshift-marketplace
    1 您必须指定openshift-logging命名空间。
    2 指定stablestable-5.<y>作为通道。
    3 指定redhat-operators。如果您的 Red Hat OpenShift Service on AWS 集群安装在受限网络(也称为脱机集群)上,请指定您在配置 Operator Lifecycle Manager (OLM) 时创建的 CatalogSource 对象的名称。
  10. 通过运行以下命令应用Subscription对象

    $ oc apply -f <filename>.yaml
  11. 创建一个LokiStack CR

    示例LokiStack CR
    apiVersion: loki.grafana.com/v1
    kind: LokiStack
    metadata:
      name: logging-loki (1)
      namespace: openshift-logging (2)
    spec:
      size: 1x.small (3)
      storage:
        schemas:
        - version: v13
          effectiveDate: "<yyyy>-<mm>-<dd>"
        secret:
          name: logging-loki-s3 (4)
          type: s3 (5)
          credentialMode: (6)
      storageClassName: <storage_class_name> (7)
      tenants:
        mode: openshift-logging (8)
    1 使用名称logging-loki
    2 您必须指定openshift-logging命名空间。
    3 指定部署规模。在日志记录5.8及更高版本中,Loki生产实例支持的规模选项为1x.extra-small1x.small1x.medium
    4 指定日志存储密钥的名称。
    5 指定相应的存储类型。
    6 可选字段,Logging 5.9 及更高版本。支持用户配置的值如下:static 是所有支持的对象存储类型使用的默认身份验证模式,使用存储在 Secret 中的凭据。token 用于从凭据源检索的短期令牌。在此模式下,静态配置不包含对象存储所需的凭据。相反,它们是在运行时使用服务生成的,这允许使用更短寿命的凭据并进行更细粒度的控制。此身份验证模式并非所有对象存储类型都支持。token-cco 是 Loki 在托管 STS 模式下运行并在 STS/WIF 集群上使用 CCO 时的默认值。
    7 指定临时存储的存储类的名称。为获得最佳性能,请指定分配块存储的存储类。可以使用 oc get storageclasses 命令列出集群可用的存储类。
    8 LokiStack 默认以多租户模式运行,无法修改。每种日志类型(审核日志、基础设施日志和应用程序日志)提供一个租户。这使得各个用户和用户组可以访问不同的日志流。
  12. 运行以下命令应用LokiStack CR对象

    $ oc apply -f <filename>.yaml
  13. 创建一个ClusterLogging CR 对象

    ClusterLogging CR 对象示例
    apiVersion: logging.openshift.io/v1
    kind: ClusterLogging
    metadata:
      name: instance (1)
      namespace: openshift-logging (2)
    spec:
      collection:
        type: vector
      logStore:
        lokistack:
          name: logging-loki
        retentionPolicy:
          application:
            maxAge: 7d
          audit:
            maxAge: 7d
          infra:
            maxAge: 7d
        type: lokistack
      visualization:
        type: ocp-console
        ocpConsole:
          logsLimit: 15
      managementState: Managed
    1 名称必须为instance
    2 命名空间必须为openshift-logging
  14. 运行以下命令应用ClusterLogging CR对象

    $ oc apply -f <filename>.yaml
  15. 运行以下命令验证安装

    $ oc get pods -n openshift-logging
    示例输出
    $ oc get pods -n openshift-logging
    NAME                                               READY   STATUS    RESTARTS   AGE
    cluster-logging-operator-fb7f7cf69-8jsbq           1/1     Running   0          98m
    collector-222js                                    2/2     Running   0          18m
    collector-g9ddv                                    2/2     Running   0          18m
    collector-hfqq8                                    2/2     Running   0          18m
    collector-sphwg                                    2/2     Running   0          18m
    collector-vv7zn                                    2/2     Running   0          18m
    collector-wk5zz                                    2/2     Running   0          18m
    logging-view-plugin-6f76fbb78f-n2n4n               1/1     Running   0          18m
    lokistack-sample-compactor-0                       1/1     Running   0          42m
    lokistack-sample-distributor-7d7688bcb9-dvcj8      1/1     Running   0          42m
    lokistack-sample-gateway-5f6c75f879-bl7k9          2/2     Running   0          42m
    lokistack-sample-gateway-5f6c75f879-xhq98          2/2     Running   0          42m
    lokistack-sample-index-gateway-0                   1/1     Running   0          42m
    lokistack-sample-ingester-0                        1/1     Running   0          42m
    lokistack-sample-querier-6b7b56bccc-2v9q4          1/1     Running   0          42m
    lokistack-sample-query-frontend-84fb57c578-gq2f7   1/1     Running   0          42m

使用 CLI 创建 Loki 对象存储密钥

要配置 Loki 对象存储,您必须创建一个密钥。您可以使用 OpenShift CLI (oc) 来完成此操作。

先决条件
  • 您具有管理员权限。

  • 您已安装 Loki Operator。

  • 您已安装 OpenShift CLI (oc)。

步骤
  • 在包含您的证书和密钥文件的目录中运行以下命令创建一个密钥

    $ oc create secret generic -n openshift-logging <your_secret_name> \
     --from-file=tls.key=<your_key_file>
     --from-file=tls.crt=<your_crt_file>
     --from-file=ca-bundle.crt=<your_bundle_file>
     --from-literal=username=<your_username>
     --from-literal=password=<your_password>

为获得最佳结果,请使用通用或不透明密钥。

验证
  • 运行以下命令验证是否已创建密钥

    $ oc get secrets
其他资源

使用 CLI 创建 LokiStack 自定义资源

您可以使用 OpenShift CLI (oc) 创建LokiStack自定义资源 (CR)。

先决条件
  • 您具有管理员权限。

  • 您已安装 Loki Operator。

  • 您已安装 OpenShift CLI (oc)。

步骤
  1. 创建一个LokiStack CR

示例LokiStack CR
apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
  name: logging-loki (1)
  namespace: openshift-logging
spec:
  size: 1x.small (2)
  storage:
    schemas:
      - effectiveDate: '2023-10-15'
        version: v13
    secret:
      name: logging-loki-s3 (3)
      type: s3 (4)
      credentialMode: (5)
  storageClassName: <storage_class_name> (6)
  tenants:
    mode: openshift-logging
1 使用名称logging-loki
2 指定部署规模。在日志记录5.8及更高版本中,Loki生产实例支持的规模选项为1x.extra-small1x.small1x.medium
3 指定用于日志存储的密钥。
4 指定相应的存储类型。
5 可选字段,Logging 5.9 及更高版本。支持用户配置的值如下:static 是所有支持的对象存储类型使用的默认身份验证模式,使用存储在 Secret 中的凭据。token 用于从凭据源检索的短期令牌。在此模式下,静态配置不包含对象存储所需的凭据。相反,它们是在运行时使用服务生成的,这允许使用更短寿命的凭据并进行更细粒度的控制。此身份验证模式并非所有对象存储类型都支持。token-cco 是 Loki 在托管 STS 模式下运行并在 STS/WIF 集群上使用 CCO 时的默认值。
6 输入临时存储的存储类的名称。为获得最佳性能,请指定分配块存储的存储类。可以使用 oc get storageclasses 命令列出集群可用的存储类。
  1. 运行以下命令应用LokiStack CR

验证
  • 通过运行以下命令并观察输出,列出openshift-logging项目中的 Pod 来验证安装

    $ oc get pods -n openshift-logging

    确认您看到了日志记录组件的多个 Pod,类似于以下列表

    示例输出
    NAME                                           READY   STATUS    RESTARTS   AGE
    cluster-logging-operator-78fddc697-mnl82       1/1     Running   0          14m
    collector-6cglq                                2/2     Running   0          45s
    collector-8r664                                2/2     Running   0          45s
    collector-8z7px                                2/2     Running   0          45s
    collector-pdxl9                                2/2     Running   0          45s
    collector-tc9dx                                2/2     Running   0          45s
    collector-xkd76                                2/2     Running   0          45s
    logging-loki-compactor-0                       1/1     Running   0          8m2s
    logging-loki-distributor-b85b7d9fd-25j9g       1/1     Running   0          8m2s
    logging-loki-distributor-b85b7d9fd-xwjs6       1/1     Running   0          8m2s
    logging-loki-gateway-7bb86fd855-hjhl4          2/2     Running   0          8m2s
    logging-loki-gateway-7bb86fd855-qjtlb          2/2     Running   0          8m2s
    logging-loki-index-gateway-0                   1/1     Running   0          8m2s
    logging-loki-index-gateway-1                   1/1     Running   0          7m29s
    logging-loki-ingester-0                        1/1     Running   0          8m2s
    logging-loki-ingester-1                        1/1     Running   0          6m46s
    logging-loki-querier-f5cf9cb87-9fdjd           1/1     Running   0          8m2s
    logging-loki-querier-f5cf9cb87-fp9v5           1/1     Running   0          8m2s
    logging-loki-query-frontend-58c579fcb7-lfvbc   1/1     Running   0          8m2s
    logging-loki-query-frontend-58c579fcb7-tjf9k   1/1     Running   0          8m2s
    logging-view-plugin-79448d8df6-ckgmx           1/1     Running   0          46s

Loki 对象存储

Loki Operator 支持AWS S3,以及其他与 S3 兼容的对象存储,例如MinioOpenShift Data FoundationAzureGCSSwift也受支持。

建议的 Loki 存储命名法为logging-loki-<your_storage_provider>

下表显示了每个存储提供程序的LokiStack自定义资源 (CR) 中的type值。有关更多信息,请参阅您存储提供程序的部分。

表 2. 密钥类型快速参考
存储提供商 密钥type

AWS

s3

Azure

azure

Google Cloud

gcs

Minio

s3

OpenShift Data Foundation

s3

Swift

swift

AWS 存储

先决条件
步骤
  • 运行以下命令创建一个名为logging-loki-aws的对象存储密钥

    $ oc create secret generic logging-loki-aws \
      --from-literal=bucketnames="<bucket_name>" \
      --from-literal=endpoint="<aws_bucket_endpoint>" \
      --from-literal=access_key_id="<aws_access_key_id>" \
      --from-literal=access_key_secret="<aws_access_key_secret>" \
      --from-literal=region="<aws_region_of_your_bucket>"

针对启用 STS 的集群的 AWS 存储

如果您的集群启用了 STS,则 Cloud Credential Operator (CCO) 支持使用 AWS 令牌进行短期身份验证。

您可以通过运行以下命令手动创建 Loki 对象存储密钥

$ oc -n openshift-logging create secret generic "logging-loki-aws" \
--from-literal=bucketnames="<s3_bucket_name>" \
--from-literal=region="<bucket_region>" \
--from-literal=audience="<oidc_audience>" (1)
1 可选注释,默认值为openshift

Azure 存储

先决条件
  • 您已安装 Loki Operator。

  • 您已安装 OpenShift CLI (oc)。

  • 您已在 Azure 上创建了一个存储桶

步骤
  • 运行以下命令创建一个名为logging-loki-azure的对象存储密钥

    $ oc create secret generic logging-loki-azure \
      --from-literal=container="<azure_container_name>" \
      --from-literal=environment="<azure_environment>" \ (1)
      --from-literal=account_name="<azure_account_name>" \
      --from-literal=account_key="<azure_account_key>"
    1 支持的环境值是AzureGlobalAzureChinaCloudAzureGermanCloudAzureUSGovernment

针对启用 Microsoft Entra 工作负载 ID 的集群的 Azure 存储

如果您的集群启用了 Microsoft Entra 工作负载 ID,则 Cloud Credential Operator (CCO) 支持使用工作负载 ID 进行短期身份验证。

您可以通过运行以下命令手动创建 Loki 对象存储密钥

$ oc -n openshift-logging create secret generic logging-loki-azure \
--from-literal=environment="<azure_environment>" \
--from-literal=account_name="<storage_account_name>" \
--from-literal=container="<container_name>"

Google Cloud Platform 存储

先决条件
  • 您已安装 Loki Operator。

  • 您已安装 OpenShift CLI (oc)。

  • 您已在 Google Cloud Platform (GCP) 上创建了一个项目

  • 您在同一项目中创建了一个存储桶

  • 您为 GCP 身份验证在同一项目中创建了一个服务帐号

步骤
  1. 将从 GCP 收到的服务帐号凭据复制到名为key.json的文件中。

  2. 运行以下命令创建一个名为logging-loki-gcs的对象存储密钥

    $ oc create secret generic logging-loki-gcs \
      --from-literal=bucketname="<bucket_name>" \
      --from-file=key.json="<path/to/key.json>"

Minio 存储

先决条件
  • 您已安装 Loki Operator。

  • 您已安装 OpenShift CLI (oc)。

  • 您已在您的集群上部署了Minio

  • 您已在 Minio 上创建了一个存储桶

步骤
  • 运行以下命令创建一个名为logging-loki-minio的对象存储密钥

    $ oc create secret generic logging-loki-minio \
      --from-literal=bucketnames="<bucket_name>" \
      --from-literal=endpoint="<minio_bucket_endpoint>" \
      --from-literal=access_key_id="<minio_access_key_id>" \
      --from-literal=access_key_secret="<minio_access_key_secret>"

OpenShift Data Foundation 存储

先决条件
步骤
  1. openshift-logging命名空间中创建一个ObjectBucketClaim自定义资源

    apiVersion: objectbucket.io/v1alpha1
    kind: ObjectBucketClaim
    metadata:
      name: loki-bucket-odf
      namespace: openshift-logging
    spec:
      generateBucketName: loki-bucket-odf
      storageClassName: openshift-storage.noobaa.io
  2. 运行以下命令从关联的ConfigMap对象获取存储桶属性

    BUCKET_HOST=$(oc get -n openshift-logging configmap loki-bucket-odf -o jsonpath='{.data.BUCKET_HOST}')
    BUCKET_NAME=$(oc get -n openshift-logging configmap loki-bucket-odf -o jsonpath='{.data.BUCKET_NAME}')
    BUCKET_PORT=$(oc get -n openshift-logging configmap loki-bucket-odf -o jsonpath='{.data.BUCKET_PORT}')
  3. 运行以下命令从关联的密钥获取存储桶访问密钥

    ACCESS_KEY_ID=$(oc get -n openshift-logging secret loki-bucket-odf -o jsonpath='{.data.AWS_ACCESS_KEY_ID}' | base64 -d)
    SECRET_ACCESS_KEY=$(oc get -n openshift-logging secret loki-bucket-odf -o jsonpath='{.data.AWS_SECRET_ACCESS_KEY}' | base64 -d)
  4. 运行以下命令创建一个名为logging-loki-odf的对象存储密钥

    $ oc create -n openshift-logging secret generic logging-loki-odf \
    --from-literal=access_key_id="<access_key_id>" \
    --from-literal=access_key_secret="<secret_access_key>" \
    --from-literal=bucketnames="<bucket_name>" \
    --from-literal=endpoint="https://<bucket_host>:<bucket_port>"

Swift 存储

先决条件
  • 您已安装 Loki Operator。

  • 您已安装 OpenShift CLI (oc)。

  • 您已在 Swift 上创建了一个存储桶

步骤
  • 运行以下命令创建一个名为logging-loki-swift的对象存储密钥

    $ oc create secret generic logging-loki-swift \
      --from-literal=auth_url="<swift_auth_url>" \
      --from-literal=username="<swift_usernameclaim>" \
      --from-literal=user_domain_name="<swift_user_domain_name>" \
      --from-literal=user_domain_id="<swift_user_domain_id>" \
      --from-literal=user_id="<swift_user_id>" \
      --from-literal=password="<swift_password>" \
      --from-literal=domain_id="<swift_domain_id>" \
      --from-literal=domain_name="<swift_domain_name>" \
      --from-literal=container_name="<swift_container_name>"
  • 您可以选择通过运行以下命令提供项目特定数据、区域或两者。

    $ oc create secret generic logging-loki-swift \
      --from-literal=auth_url="<swift_auth_url>" \
      --from-literal=username="<swift_usernameclaim>" \
      --from-literal=user_domain_name="<swift_user_domain_name>" \
      --from-literal=user_domain_id="<swift_user_domain_id>" \
      --from-literal=user_id="<swift_user_id>" \
      --from-literal=password="<swift_password>" \
      --from-literal=domain_id="<swift_domain_id>" \
      --from-literal=domain_name="<swift_domain_name>" \
      --from-literal=container_name="<swift_container_name>" \
      --from-literal=project_id="<swift_project_id>" \
      --from-literal=project_name="<swift_project_name>" \
      --from-literal=project_domain_id="<swift_project_domain_id>" \
      --from-literal=project_domain_name="<swift_project_domain_name>" \
      --from-literal=region="<swift_region>"

部署 Elasticsearch 日志存储

您可以使用 OpenShift Elasticsearch Operator 在您的 Red Hat OpenShift Service on AWS 集群上部署内部 Elasticsearch 日志存储。

日志记录5.9版本不包含OpenShift Elasticsearch Operator的更新版本。如果您目前使用的是日志记录5.8版本发布的OpenShift Elasticsearch Operator,它将继续与日志记录一起使用,直到日志记录5.8版本结束生命周期为止。作为使用OpenShift Elasticsearch Operator管理默认日志存储的替代方法,您可以使用Loki Operator。有关日志记录生命周期日期的更多信息,请参阅与平台无关的Operators

Elasticsearch 的存储注意事项

每个 Elasticsearch 部署配置都需要一个持久卷。在 Red Hat OpenShift Service on AWS 上,这是使用持久卷声明 (PVC) 实现的。

如果您使用本地卷进行持久性存储,请不要使用原始块卷,这在LocalVolume对象中用volumeMode: block描述。Elasticsearch 无法使用原始块卷。

OpenShift Elasticsearch Operator 使用 Elasticsearch 资源名称命名 PVC。

Fluentd 将来自**systemd journal**和**/var/log/containers/*.log**的任何日志发送到 Elasticsearch。

Elasticsearch 需要足够的内存才能执行大型合并操作。如果内存不足,它将无响应。为避免此问题,请评估您需要的应用程序日志数据量,并分配大约两倍的可用存储容量。

默认情况下,当存储容量达到 85% 时,Elasticsearch 将停止向节点分配新数据。在 90% 时,Elasticsearch 会尝试尽可能将现有分片从该节点重新定位到其他节点。但是,如果没有任何节点的可用容量低于 85%,Elasticsearch 将有效地拒绝创建新索引并变为 RED。

这些低水位和高水位值是当前版本中的 Elasticsearch 默认值。您可以修改这些默认值。尽管警报使用相同的默认值,但您无法更改警报中的这些值。

使用 Web 控制台安装 OpenShift Elasticsearch Operator

OpenShift Elasticsearch Operator 创建并管理 OpenShift Logging 使用的 Elasticsearch 集群。

先决条件
  • Elasticsearch 是一个内存密集型应用程序。除非您在ClusterLogging自定义资源中另行指定,否则每个 Elasticsearch 节点至少需要 16GB 的内存用于内存请求和限制。

    初始的 AWS 上 Red Hat OpenShift 服务节点可能不足以支持 Elasticsearch 集群。您必须向 AWS 集群上的 Red Hat OpenShift 服务添加更多节点才能以推荐的或更高的内存运行,每个 Elasticsearch 节点最多可达 64GB。

    Elasticsearch 节点可以使用较低的内存设置运行,但这不推荐用于生产环境。

  • 确保您拥有 Elasticsearch 必要的持久性存储。请注意,每个 Elasticsearch 节点都需要自己的存储卷。

    如果您使用本地卷进行持久性存储,请不要使用原始块卷,这在LocalVolume对象中用volumeMode: block描述。Elasticsearch 无法使用原始块卷。

步骤
  1. 在Red Hat OpenShift Service on AWS Web控制台中,点击**Operators** → **OperatorHub**。

  2. 从可用 Operators 列表中单击**OpenShift Elasticsearch Operator**,然后单击**安装**。

  3. 确保在**安装模式**下选择了**集群上的所有命名空间**。

  4. 确保在**已安装命名空间**下选择了**openshift-operators-redhat**。

    您必须指定`openshift-operators-redhat`命名空间。`openshift-operators`命名空间可能包含社区 Operators,这些 Operators 未经信任,可能发布与 AWS 上 Red Hat OpenShift 服务指标名称相同的指标,这将导致冲突。

  5. 选择**在此命名空间上启用 Operator 推荐的集群监控**。

    此选项在Namespace对象中设置openshift.io/cluster-monitoring: "true"标签。您必须选择此选项,以确保集群监控会抓取openshift-operators-redhat命名空间。

  6. 选择**stable-5.x**作为**更新渠道**。

  7. 选择**更新审批**策略。

    • **自动**策略允许Operator Lifecycle Manager (OLM)在有新版本可用时自动更新Operator。

    • **手动**策略需要具有相应凭据的用户来批准Operator更新。

  8. 点击**安装**。

验证
  1. 通过切换到**Operators** → **已安装 Operators**页面来验证 OpenShift Elasticsearch Operator 是否已安装。

  2. 确保**OpenShift Elasticsearch Operator**在所有项目中均列出,且**状态**为**成功**。

使用 CLI 安装 OpenShift Elasticsearch Operator

您可以使用 OpenShift CLI(`oc`)安装 OpenShift Elasticsearch Operator。

先决条件
  • 确保您拥有 Elasticsearch 必要的持久性存储。请注意,每个 Elasticsearch 节点都需要自己的存储卷。

    如果您使用本地卷进行持久性存储,请不要使用原始块卷,这在LocalVolume对象中用volumeMode: block描述。Elasticsearch 无法使用原始块卷。

    Elasticsearch 是一个内存密集型应用程序。默认情况下,AWS 上的 Red Hat OpenShift 服务会安装三个 Elasticsearch 节点,其内存请求和限制为 16 GB。这三个初始的 AWS 上 Red Hat OpenShift 服务节点可能没有足够的内存来在您的集群中运行 Elasticsearch。如果您遇到与 Elasticsearch 相关的内存问题,请向集群添加更多 Elasticsearch 节点,而不是增加现有节点上的内存。

  • 您具有管理员权限。

  • 您已安装 OpenShift CLI(`oc`)。

步骤
  1. 创建一个作为 YAML 文件的`Namespace`对象。

    apiVersion: v1
    kind: Namespace
    metadata:
      name: openshift-operators-redhat (1)
      annotations:
        openshift.io/node-selector: ""
      labels:
        openshift.io/cluster-monitoring: "true" (2)
    1 您必须指定`openshift-operators-redhat`命名空间。为了防止可能与指标发生冲突,请将 Prometheus 集群监控堆栈配置为从`openshift-operators-redhat`命名空间而不是`openshift-operators`命名空间抓取指标。`openshift-operators`命名空间可能包含社区 Operators,这些 Operators 未经信任,可能发布与 ROSA 指标名称相同的指标,这将导致冲突。
    2 字符串。您必须按所示指定此标签,以确保集群监控抓取`openshift-operators-redhat`命名空间。
  2. 通过运行以下命令应用Namespace对象

    $ oc apply -f <filename>.yaml
  3. 创建一个作为 YAML 文件的`OperatorGroup`对象。

    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: openshift-operators-redhat
      namespace: openshift-operators-redhat (1)
    spec: {}
    1 必须指定openshift-operators-redhat命名空间。
  4. 通过运行以下命令应用OperatorGroup对象

    $ oc apply -f <filename>.yaml
  5. 创建一个`Subscription`对象以将命名空间订阅到 OpenShift Elasticsearch Operator。

    订阅示例
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: elasticsearch-operator
      namespace: openshift-operators-redhat (1)
    spec:
      channel: stable-x.y (2)
      installPlanApproval: Automatic (3)
      source: redhat-operators (4)
      sourceNamespace: openshift-marketplace
      name: elasticsearch-operator
    1 必须指定openshift-operators-redhat命名空间。
    2 指定`stable`或`stable-x.y`作为渠道。请参见以下说明。
    3 `Automatic`允许 Operator 生命周期管理器 (OLM) 在有新版本可用时自动更新 Operator。`Manual`需要具有适当凭据的用户批准 Operator 更新。
    4 指定`redhat-operators`。如果您的 AWS 上 Red Hat OpenShift 服务集群安装在受限网络(也称为断开连接的集群)上,请指定配置 Operator 生命周期管理器 (OLM) 时创建的`CatalogSource`对象的名称。

    指定`stable`将安装最新稳定版本的当前版本。将`stable`与`installPlanApproval: "Automatic"`一起使用会自动将您的 Operators 升级到最新的稳定主版本和次版本。

    指定`stable-x.y`将安装特定主版本的当前次版本。将`stable-x.y`与`installPlanApproval: "Automatic"`一起使用会自动将您的 Operators 升级到主版本内的最新稳定次版本。

  6. 运行以下命令应用订阅

    $ oc apply -f <filename>.yaml

    OpenShift Elasticsearch Operator 已安装到`openshift-operators-redhat`命名空间,并已复制到集群中的每个项目。

验证
  1. 运行以下命令

    $ oc get csv -n --all-namespaces
  2. 观察输出并确认 OpenShift Elasticsearch Operator 的 Pod 是否存在于每个命名空间中。

    示例输出
    NAMESPACE                                          NAME                            DISPLAY                            VERSION          REPLACES                        PHASE
    default                                            elasticsearch-operator.v5.8.1   OpenShift Elasticsearch Operator   5.8.1            elasticsearch-operator.v5.8.0   Succeeded
    kube-node-lease                                    elasticsearch-operator.v5.8.1   OpenShift Elasticsearch Operator   5.8.1            elasticsearch-operator.v5.8.0   Succeeded
    kube-public                                        elasticsearch-operator.v5.8.1   OpenShift Elasticsearch Operator   5.8.1            elasticsearch-operator.v5.8.0   Succeeded
    kube-system                                        elasticsearch-operator.v5.8.1   OpenShift Elasticsearch Operator   5.8.1            elasticsearch-operator.v5.8.0   Succeeded
    non-destructive-test                               elasticsearch-operator.v5.8.1   OpenShift Elasticsearch Operator   5.8.1            elasticsearch-operator.v5.8.0   Succeeded
    openshift-apiserver-operator                       elasticsearch-operator.v5.8.1   OpenShift Elasticsearch Operator   5.8.1            elasticsearch-operator.v5.8.0   Succeeded
    openshift-apiserver                                elasticsearch-operator.v5.8.1   OpenShift Elasticsearch Operator   5.8.1            elasticsearch-operator.v5.8.0   Succeeded
    ...

配置日志存储

您可以通过修改`ClusterLogging`自定义资源 (CR) 来配置日志记录使用的日志存储类型。

先决条件
  • 您具有管理员权限。

  • 您已安装 OpenShift CLI(`oc`)。

  • 您已安装 Red Hat OpenShift Logging Operator 和一个内部日志存储,该存储是 LokiStack 或 Elasticsearch。

  • 您已创建`ClusterLogging` CR。

日志记录5.9版本不包含OpenShift Elasticsearch Operator的更新版本。如果您目前使用的是日志记录5.8版本发布的OpenShift Elasticsearch Operator,它将继续与日志记录一起使用,直到日志记录5.8版本结束生命周期为止。作为使用OpenShift Elasticsearch Operator管理默认日志存储的替代方法,您可以使用Loki Operator。有关日志记录生命周期日期的更多信息,请参阅与平台无关的Operators

步骤
  1. 修改`ClusterLogging` CR `logStore`规范。

    `ClusterLogging` CR 示例
    apiVersion: logging.openshift.io/v1
    kind: ClusterLogging
    metadata:
    # ...
    spec:
    # ...
      logStore:
        type: <log_store_type> (1)
        elasticsearch: (2)
          nodeCount: <integer>
          resources: {}
          storage: {}
          redundancyPolicy: <redundancy_type> (3)
        lokistack: (4)
          name: {}
    # ...
    1 指定日志存储类型。这可以是`lokistack`或`elasticsearch`。
    2 Elasticsearch 日志存储的可选配置选项。
    3 指定冗余类型。此值可以是`ZeroRedundancy`、`SingleRedundancy`、`MultipleRedundancy`或`FullRedundancy`。
    4 LokiStack 的可选配置选项。
    指定 LokiStack 为日志存储的`ClusterLogging` CR 示例
    apiVersion: logging.openshift.io/v1
    kind: ClusterLogging
    metadata:
      name: instance
      namespace: openshift-logging
    spec:
      managementState: Managed
      logStore:
        type: lokistack
        lokistack:
          name: logging-loki
    # ...
  2. 运行以下命令应用`ClusterLogging` CR

    $ oc apply -f <filename>.yaml