6.2.4.2. ユーザー定義プロジェクトのクロスプロジェクトアラートルールの作成
user-workload-monitoring-config config map でプロジェクトを設定することにより、元のプロジェクトにバインドされないアラートルールを作成できます。このプロジェクトで作成された PrometheusRule オブジェクトは、すべてのプロジェクトに適用できます。
そのため、各ユーザープロジェクトに個別の PrometheusRule オブジェクトを用意する代わりに、複数のユーザー定義プロジェクトに適用される汎用のアラートルールを設定できます。PrometheusRule オブジェクトで PromQL クエリーを使用すると、アラートルールに追加または除外するプロジェクトをフィルタリングできます。
前提条件
-
クラスター管理者の場合は、
cluster-adminクラスターロールを持つユーザーとしてクラスターにアクセスできる。 管理者以外のユーザーの場合は、次のユーザーロールを持つユーザーとしてクラスターにアクセスできる。
-
user-workload-monitoring-configconfig map を編集するための、openshift-user-workload-monitoringプロジェクトのuser-workload-monitoring-config-editロール。 -
アラートルールを作成するプロジェクトの
monitoring-rules-editクラスターロール。
-
- クラスター管理者は、ユーザー定義プロジェクトのモニタリングを有効にしている。
-
OpenShift CLI (
oc) がインストールされている。
手順
openshift-user-workload-monitoringプロジェクトでuser-workload-monitoring-configconfig map を編集します。$ oc -n openshift-user-workload-monitoring edit configmap user-workload-monitoring-config特定のプロジェクトにバインドされないアラートルールを作成するプロジェクトを設定します。
apiVersion: v1 kind: ConfigMap metadata: name: user-workload-monitoring-config namespace: openshift-user-workload-monitoring data: config.yaml: | namespacesWithoutLabelEnforcement: [ <namespace1>, <namespace2> ]1 # ...- 1
- クロスプロジェクトアラートルールを作成するプロジェクトを 1 つ以上指定します。ユーザー定義のモニタリング用の Prometheus および Thanos Ruler は、これらのプロジェクトで作成された
PrometheusRuleオブジェクトのnamespaceラベルを適用しません。そのため、PrometheusRuleオブジェクトはすべてのプロジェクトに適用できます。
-
アラートルールの YAML ファイルを作成します。この例では、
example-cross-project-alerting-rule.yamlという名前です。 アラートルール設定を YAML ファイルに追加します。次の例では、
example-securityという名前の新しいクロスプロジェクトアラートルールを作成します。ユーザープロジェクトが制限付き Pod セキュリティーポリシーを適用しない場合、このアラートルールが起動します。クロスプロジェクトアラートルールの例
apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: example-security namespace: ns11 spec: groups: - name: pod-security-policy rules: - alert: "ProjectNotEnforcingRestrictedPolicy"2 for: 5m3 expr: kube_namespace_labels{namespace!~"(openshift|kube).*|default",label_pod_security_kubernetes_io_enforce!="restricted"}4 annotations: message: "Restricted policy not enforced. Project {{ $labels.namespace }} does not enforce the restricted pod security policy."5 labels: severity: warning6 - 1
- 必ず
namespacesWithoutLabelEnforcementフィールドで定義したプロジェクトを指定します。 - 2
- 作成する必要のあるアラートルールの名前。
- 3
- アラートが発せられる前に条件が真である必要がある期間。
- 4
- 新規ルールを定義する PromQL クエリー式。
namespaceラベルにラベルマッチャーを使用すると、アラートルールに追加および除外するプロジェクトをフィルタリングできます。 - 5
- アラートに関連付けられたメッセージ。
- 6
- アラートルールがアラートに割り当てる重大度。重要
namespacesWithoutLabelEnforcementフィールドで指定したプロジェクトのうちの 1 つにだけ、特定のクロスプロジェクトアラートルールを作成してください。複数のプロジェクトで同じクロスプロジェクトアラートルールを作成すると、アラートが繰り返し発生します。
設定ファイルをクラスターに適用します。
$ oc apply -f example-cross-project-alerting-rule.yaml