×

在 Logging 5.7 及更高版本中,用户可以配置 LokiStack 部署以生成自定义告警和记录的指标。如果您想使用自定义告警和记录规则,则必须启用 LokiStack ruler 组件。

LokiStack 基于日志的告警和记录的指标是通过向 ruler 组件提供LogQL 表达式触发的。Loki Operator 管理一个针对所选 LokiStack 大小(可以是1x.extra-small1x.small1x.medium)进行优化的 ruler。

要提供这些表达式,必须创建一个包含与 Prometheus 兼容的告警规则AlertingRule 自定义资源 (CR),或创建一个包含与 Prometheus 兼容的记录规则RecordingRule CR。

管理员可以为applicationauditinfrastructure租户配置基于日志的告警或记录的指标。没有管理员权限的用户可以为他们有权访问的应用程序的application租户配置基于日志的告警或记录的指标。

除非您禁用了本地 Alertmanager 实例,否则应用程序、审计和基础设施告警默认会发送到 Red Hat OpenShift Service on AWS 监控堆栈 Alertmanager(位于openshift-monitoring命名空间中)。如果启用用于监控openshift-user-workload-monitoring命名空间中用户定义项目的 Alertmanager,则应用程序告警默认会发送到此命名空间中的 Alertmanager。

配置 ruler

启用 LokiStack ruler 组件后,用户可以定义一组LogQL表达式,这些表达式会触发日志告警或记录的指标。

管理员可以通过修改LokiStack自定义资源 (CR) 来启用 ruler。

先决条件
  • 您已安装 Red Hat OpenShift Logging Operator 和 Loki Operator。

  • 您已创建LokiStack CR。

  • 您具有管理员权限。

步骤
  • 通过确保LokiStack CR 包含以下规范配置来启用 ruler

    apiVersion: loki.grafana.com/v1
    kind: LokiStack
    metadata:
      name: <name>
      namespace: <namespace>
    spec:
    # ...
      rules:
        enabled: true (1)
        selector:
          matchLabels:
            openshift.io/<label_name>: "true" (2)
        namespaceSelector:
          matchLabels:
            openshift.io/<label_name>: "true" (3)
    1 在您的集群中启用 Loki 告警和记录规则。
    2 添加一个自定义标签,该标签可以添加到您想要启用日志告警和指标使用的命名空间中。
    3 添加一个自定义标签,该标签可以添加到您想要启用日志告警和指标使用的命名空间中。

授权 LokiStack 规则 RBAC 权限

管理员可以通过将集群角色绑定到用户名来允许用户创建和管理他们自己的告警和记录规则。集群角色定义为包含用户所需基于角色的访问控制 (RBAC) 权限的ClusterRole对象。

在 Logging 5.8 及更高版本中,以下用于告警和记录规则的集群角色可用于 LokiStack

规则名称 描述

alertingrules.loki.grafana.com-v1-admin

具有此角色的用户具有管理级访问权限来管理告警规则。此集群角色授予权限,可在loki.grafana.com/v1 API 组内创建、读取、更新、删除、列出和监视AlertingRule资源。

alertingrules.loki.grafana.com-v1-crdview

具有此角色的用户可以查看与loki.grafana.com/v1 API 组内的AlertingRule资源相关的自定义资源定义 (CRD) 的定义,但无权修改或管理这些资源。

alertingrules.loki.grafana.com-v1-edit

具有此角色的用户有权创建、更新和删除AlertingRule资源。

alertingrules.loki.grafana.com-v1-view

具有此角色的用户可以读取loki.grafana.com/v1 API 组内的AlertingRule资源。他们可以检查现有告警规则的配置、标签和注释,但不能对其进行任何修改。

recordingrules.loki.grafana.com-v1-admin

具有此角色的用户具有管理级访问权限来管理记录规则。此集群角色授予权限,可在loki.grafana.com/v1 API 组内创建、读取、更新、删除、列出和监视RecordingRule资源。

recordingrules.loki.grafana.com-v1-crdview

具有此角色的用户可以查看与loki.grafana.com/v1 API 组内的RecordingRule资源相关的自定义资源定义 (CRD) 的定义,但无权修改或管理这些资源。

recordingrules.loki.grafana.com-v1-edit

具有此角色的用户有权创建、更新和删除RecordingRule资源。

recordingrules.loki.grafana.com-v1-view

具有此角色的用户可以读取loki.grafana.com/v1 API 组内的RecordingRule资源。他们可以检查现有告警规则的配置、标签和注释,但不能对其进行任何修改。

示例

要为用户应用集群角色,必须将现有集群角色绑定到特定用户名。

集群角色可以是集群范围或命名空间范围,具体取决于您使用的角色绑定类型。当使用RoleBinding对象时(例如使用oc adm policy add-role-to-user命令),集群角色仅应用于指定的命名空间。当使用ClusterRoleBinding对象时(例如使用oc adm policy add-cluster-role-to-user命令),集群角色应用于集群中的所有命名空间。

以下示例命令授予指定用户在集群特定命名空间中对告警规则的创建、读取、更新和删除 (CRUD) 权限

特定命名空间中告警规则 CRUD 权限的集群角色绑定命令示例
$ oc adm policy add-role-to-user alertingrules.loki.grafana.com-v1-admin -n <namespace> <username>

以下命令授予指定用户在所有命名空间中对告警规则的管理员权限

管理员权限的集群角色绑定命令示例
$ oc adm policy add-cluster-role-to-user alertingrules.loki.grafana.com-v1-admin <username>

使用 Loki 创建基于日志的告警规则

AlertingRule CR 包含一组规范和 webhook 验证定义,用于声明单个LokiStack实例的告警规则组。此外,webhook 验证定义还提供对规则验证条件的支持。

  • 如果AlertingRule CR 包含无效的interval周期,则它是一个无效的告警规则。

  • 如果AlertingRule CR 包含无效的for周期,则它是一个无效的告警规则。

  • 如果AlertingRule CR 包含无效的 LogQL expr,则它是一个无效的告警规则。

  • 如果AlertingRule CR 包含两个名称相同的组,则它是一个无效的告警规则。

  • 如果以上情况均不适用,则告警规则被视为有效。

租户类型 AlertingRule CR 的有效命名空间

application

audit

openshift-logging

infrastructure

openshift-/*, kube-/\*, default

先决条件
  • Red Hat OpenShift Logging Operator 5.7 及更高版本

  • Red Hat OpenShift Service on AWS 4.13 及更高版本

步骤
  1. 创建AlertingRule自定义资源 (CR)

    基础设施 AlertingRule CR 示例
      apiVersion: loki.grafana.com/v1
      kind: AlertingRule
      metadata:
        name: loki-operator-alerts
        namespace: openshift-operators-redhat (1)
        labels: (2)
          openshift.io/<label_name>: "true"
      spec:
        tenantID: "infrastructure" (3)
        groups:
          - name: LokiOperatorHighReconciliationError
            rules:
              - alert: HighPercentageError
                expr: | (4)
                  sum(rate({kubernetes_namespace_name="openshift-operators-redhat", kubernetes_pod_name=~"loki-operator-controller-manager.*"} |= "error" [1m])) by (job)
                    /
                  sum(rate({kubernetes_namespace_name="openshift-operators-redhat", kubernetes_pod_name=~"loki-operator-controller-manager.*"}[1m])) by (job)
                    > 0.01
                for: 10s
                labels:
                  severity: critical (5)
                annotations:
                  summary: High Loki Operator Reconciliation Errors (6)
                  description: High Loki Operator Reconciliation Errors (7)
    1 创建此AlertingRule CR 的命名空间必须具有与 LokiStack spec.rules.namespaceSelector 定义匹配的标签。
    2 labels 块必须与 LokiStack spec.rules.selector 定义匹配。
    3 infrastructure 租户的AlertingRule CR 仅支持在openshift-*kube-\*default命名空间中。
    4 kubernetes_namespace_name: 的值必须与metadata.namespace的值匹配。
    5 此必填字段的值必须是criticalwarninginfo
    6 此字段为必填字段。
    7 此字段为必填字段。
    应用程序 AlertingRule CR 示例
      apiVersion: loki.grafana.com/v1
      kind: AlertingRule
      metadata:
        name: app-user-workload
        namespace: app-ns (1)
        labels: (2)
          openshift.io/<label_name>: "true"
      spec:
        tenantID: "application"
        groups:
          - name: AppUserWorkloadHighError
            rules:
              - alert:
                expr: | (3)
                sum(rate({kubernetes_namespace_name="app-ns", kubernetes_pod_name=~"podName.*"} |= "error" [1m])) by (job)
                for: 10s
                labels:
                  severity: critical (4)
                annotations:
                  summary:  (5)
                  description:  (6)
    1 创建此AlertingRule CR 的命名空间必须具有与 LokiStack spec.rules.namespaceSelector 定义匹配的标签。
    2 labels 块必须与 LokiStack spec.rules.selector 定义匹配。
    3 kubernetes_namespace_name: 的值必须与metadata.namespace的值匹配。
    4 此必填字段的值必须是criticalwarninginfo
    5 此必填字段的值是对规则的总结。
    6 此必填字段的值是对规则的详细描述。
  2. 应用AlertingRule CR

    $ oc apply -f <filename>.yaml