12.2. 自定义日志记录警报
在日志记录 5.7 及更新的版本中,用户可以配置 LokiStack 部署来生成自定义警报和记录的指标。如果要使用自定义 警报和记录规则,您必须启用 LokiStack 规则 器组件。
LokiStack 基于日志的警报和记录的指标通过将 LogQL 表达式提供给 ruler 组件来触发。Loki Operator 管理了一个针对所选 LokiStack 大小优化的标尺,可以是 1x.extra-small
、1x.small
或 1x.medium
。
要提供这些表达式,您必须创建一个 AlertingRule
自定义资源(CR),其中包含与 Prometheus 兼容的 警报规则,或包含 Prometheus 兼容的 记录规则 的 RecordingRule
CR。
管理员可以配置基于日志的警报或记录 应用程序
、审计
租户的指标。没有管理员权限的用户可为他们有权访问 或基础架构
的应用程序
租户配置基于日志的警报或记录指标。
应用程序、审计和基础架构警报默认发送到 openshift-monitoring
命名空间中的 Red Hat OpenShift Service on AWS 监控堆栈 Alertmanager,除非您禁用了本地 Alertmanager 实例。如果启用了用于监控 openshift-user-workload-monitoring
命名空间中的用户定义的项目的 Alertmanager,应用程序警报默认发送到此命名空间中的 Alertmanager。
12.2.1. 配置规则器
启用 LokiStack 规则器组件后,用户可以定义一组 LogQL 表达式,用于触发日志记录警报或记录指标。
管理员可以通过修改 LokiStack
自定义资源(CR)来启用规则器。
流程
通过确保
LokiStack
CR 包含以下 spec 配置来启用规则器: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
12.2.2. 授权 Loki 规则 RBAC 权限
管理员可以通过创建 ClusterRole
对象并将此角色绑定到 username 来创建和管理自己的警报规则。ClusterRole
对象为用户定义必要的基于角色的访问控制(RBAC)权限。
先决条件
-
Cluster Logging Operator 安装在
openshift-logging
命名空间中。 - 有管理员权限。
流程
- 创建定义所需 RBAC 权限的集群角色。
将适当的集群角色绑定到用户名:
绑定命令示例
$ oc adm policy add-role-to-user <cluster_role_name> -n <namespace> <username>
12.2.3. 使用 Loki 创建基于日志的警报规则
AlertingRule
CR 包含一组规格和 webhook 验证定义,用于声明单个 LokiStack
实例的警报规则组。另外,webhook 验证定义支持规则验证条件:
-
如果
AlertingRule
CR 包含无效的interval
周期,则它是一个无效的警报规则 -
如果
AlertingRule
CR 包含无效的for
周期,则它是一个无效的警报规则 -
如果
AlertingRule
CR 包含无效的 LogQLexpr
,则它是一个无效的警报规则。 -
如果
AlertingRule
CR 包含两个同名的组,则它是一个无效的警报规则。 - 如果以上都不适用,则警报规则被视为有效。
租户类型 | AlertingRule CR 的有效命名空间 |
---|---|
application | |
audit |
|
infrastructure |
|
先决条件
- Red Hat OpenShift Operator 5.7 及更新版本的日志记录子系统
- Red Hat OpenShift Service on AWS 4.13 及更新的版本
流程
创建
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 的命名空间必须具有与 LokiStackspec.rules.namespaceSelector
定义匹配的标签。 - 2
labels
块必须与 LokiStackspec.rules.selector
定义匹配。- 3
infrastructure
租户的AlertingRule
CR 只在openshift-*
,kube-\*
, 或default
命名空间中被支持。- 4
kubernetes_namespace_name:
的值必须与metadata.namespace
的值匹配。- 5
- 此必需字段的值必须是
critical
、warning
或info
。 - 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
应用
AlertingRule
CR:$ oc apply -f <filename>.yaml