3.5. Loki のログベースのアラート
AlertingRule カスタムリソース(CR)を作成することにより、Loki のログベースのアラートを設定できます。
3.5.1. LokiStack ルールの RBAC 権限の認可 リンクのコピーリンクがクリップボードにコピーされました!
管理者は、クラスターロールをユーザー名にバインドすることで、ユーザーが独自のアラートおよび記録ルールを作成および管理できるようにすることができます。クラスターロールは、ユーザーに必要なロールベースのアクセス制御 (RBAC) 権限を含む ClusterRole オブジェクトとして定義されます。
LokiStack では、アラートおよび記録ルール用の次のクラスターロールが利用できます。
| ルール名 | 説明 |
|---|---|
|
|
このロールを持つユーザーは、アラートルールを管理する管理レベルのアクセス権を持ちます。このクラスターロールは、 |
|
|
このロールを持つユーザーは、 |
|
|
このロールを持つユーザーは、 |
|
|
このロールを持つユーザーは、 |
|
|
このロールを持つユーザーは、記録ルールを管理する管理レベルのアクセス権を持ちます。このクラスターロールは、 |
|
|
このロールを持つユーザーは、 |
|
|
このロールを持つユーザーは、 |
|
|
このロールを持つユーザーは、 |
3.5.1.1. 例 リンクのコピーリンクがクリップボードにコピーされました!
ユーザーにクラスターロールを適用するには、既存のクラスターロールを特定のユーザー名にバインドする必要があります。
クラスターロールは、使用するロールバインディングの種類に応じて、クラスタースコープまたは namespace スコープにすることができます。RoleBinding オブジェクトを使用する場合は、oc adm policy add-role-to-user コマンドを使用する場合と同様に、クラスターロールが指定した namespace にのみ適用されます。ClusterRoleBinding オブジェクトを使用する場合は、oc adm policy add-cluster-role-to-user コマンドを使用する場合と同様に、クラスターロールがクラスター内のすべての namespace に適用されます。
次のコマンド例では、指定したユーザーに、クラスター内の特定の namespace のアラートルールに対する作成、読み取り、更新、および削除 (CRUD) 権限を付与します。
特定の namespace のアラートルールに対する CRUD 権限を付与するクラスターロールバインディングコマンドの例
$ oc adm policy add-role-to-user alertingrules.loki.grafana.com-v1-admin -n <namespace> <username>
次のコマンドは、指定したユーザーに、すべての namespace のアラートルールに対する管理者権限を付与します。
管理者権限を付与するクラスターロールバインディングコマンドの例
$ oc adm policy add-cluster-role-to-user alertingrules.loki.grafana.com-v1-admin <username>
3.5.2. Loki を使用したログベースのアラートルールの作成 リンクのコピーリンクがクリップボードにコピーされました!
AlertingRule CR には、単一の LokiStack インスタンスのアラートルールグループを宣言するために使用する、仕様および Webhook 検証定義のセットが含まれます。Webhook 検証定義は、ルール検証条件もサポートします。
-
AlertingRuleCR に無効なinterval期間が含まれる場合、無効なアラートルールです。 -
AlertingRuleCR に無効なfor期間が含まれる場合、無効なアラートルールです。 -
AlertingRuleCR に無効な LogQLexprが含まれる場合、無効なアラートルールです。 -
AlertingRuleCR に同じ名前のグループが 2 つ含まれる場合、無効なアラートルールです。 - 上記のいずれも該当しない場合、アラートルールは有効とみなされます。
| テナントタイプ | AlertingRule CR の有効な namespace |
|---|---|
| application |
|
| audit |
|
| infrastructure |
|
手順
AlertingRuleカスタムリソース (CR) を作成します。インフラストラクチャー
AlertingRuleCR の例apiVersion: loki.grafana.com/v1 kind: AlertingRule metadata: name: loki-operator-alerts namespace: openshift-operators-redhat1 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: critical5 annotations: summary: High Loki Operator Reconciliation Errors6 description: High Loki Operator Reconciliation Errors7 - 1
- この
AlertingRuleCR が作成される namespace には、LokiStackspec.rules.namespaceSelector定義に一致するラベルが必要です。 - 2
labelsブロックは、LokiStack のspec.rules.selector定義と一致する必要があります。- 3
infrastructureテナントのAlertingRuleCR は、openshift-*、kube-\*、またはdefaultnamespaces でのみサポートされます。- 4
kubernetes_namespace_name:の値は、metadata.namespaceの値と一致する必要があります。- 5
- この必須フィールドの値は、
critical、warning、またはinfoである必要があります。 - 6
- このフィールドは必須です。
- 7
- このフィールドは必須です。
アプリケーション
AlertingRuleCR の例apiVersion: loki.grafana.com/v1 kind: AlertingRule metadata: name: app-user-workload namespace: app-ns1 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: critical4 annotations: summary:5 description:6 - 1
- この
AlertingRuleCR が作成される namespace には、LokiStackspec.rules.namespaceSelector定義に一致するラベルが必要です。 - 2
labelsブロックは、LokiStack のspec.rules.selector定義と一致する必要があります。- 3
kubernetes_namespace_name:の値は、metadata.namespaceの値と一致する必要があります。- 4
- この必須フィールドの値は、
critical、warning、またはinfoである必要があります。 - 5
- この必須フィールドの値は、ルールの概要です。
- 6
- この必須フィールドの値は、ルールの詳細な説明です。
AlertingRuleCR を適用します。$ oc apply -f <filename>.yaml