11.2. 사용자 정의 로깅 경고
5.7 이상 버전을 로깅할 때 사용자는 사용자 지정 경고 및 기록된 메트릭을 생성하도록 LokiStack 배포를 구성할 수 있습니다. 사용자 지정 경고 및 레코딩 규칙을 사용하려면 LokiStack 룰러 구성 요소를 활성화해야 합니다.
LokiStack 로그 기반 경고 및 기록된 메트릭은 룰러 구성 요소에 LogQL 표현식을 제공하여 트리거됩니다. Loki Operator는 선택한 LokiStack 크기에 최적화된 룰러를 관리합니다. 1x.extra-
undercloud ,1x.
windows 또는 1x.medium
.
이러한 표현식을 제공하려면 Prometheus 호환 경고 규칙 이나 Prometheus 호환 레코딩 규칙이 포함된 RecordingRule
CR을 포함하는 Alerting
Rule 사용자 정의 리소스(CR)를 생성해야 합니다.
관리자는 애플리케이션
,감사
또는 인프라
테넌트에 대한 로그 기반 경고 또는 기록된 지표를 구성할 수 있습니다. 관리자 권한이 없는 사용자는 액세스할 수 있는 애플리케이션의 애플리케이션
테넌트에 대한 로그 기반 경고 또는 기록된 지표를 구성할 수 있습니다.
로컬 Alertmanager 인스턴스를 비활성화하지 않는 한 애플리케이션, 감사 및 인프라 경고는 기본적으로 openshift-monitoring
네임스페이스의 OpenShift Container Platform 모니터링 스택 Alertmanager로 전송됩니다. openshift-user-workload-monitoring
네임스페이스에서 사용자 정의 프로젝트를 모니터링하는 데 사용되는 Alertmanager가 활성화된 경우 기본적으로 애플리케이션 경고가 이 네임스페이스의 Alertmanager로 전송됩니다.
11.2.1. 룰러 구성
LokiStack 룰러 구성 요소가 활성화되면 사용자는 로깅 경고 또는 기록된 메트릭을 트리거하는 LogQL 표현식 그룹을 정의할 수 있습니다.
관리자는 LokiStack
CR(사용자 정의 리소스)을 수정하여 룰러를 활성화할 수 있습니다.
사전 요구 사항
- Red Hat OpenShift Logging Operator 및 Loki Operator를 설치했습니다.
-
LokiStack
CR을 생성했습니다. - 관리자 권한이 있습니다.
절차
LokiStack
CR에 다음 사양 구성이 포함되어 있는지 확인하여 룰러를 활성화합니다.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
11.2.2. LokiStack 규칙 RBAC 권한 승인
관리자는 클러스터 역할을 사용자 이름에 바인딩하여 사용자가 자체 경고 및 레코딩 규칙을 생성하고 관리할 수 있습니다. 클러스터 역할은 사용자에게 필요한 RBAC(역할 기반 액세스 제어) 권한이 포함된 ClusterRole
오브젝트로 정의됩니다.
로깅 5.8 이상에서는 LokiStack에 경고 및 레코딩 규칙에 대한 다음 클러스터 역할을 사용할 수 있습니다.
규칙 이름 | 설명 |
---|---|
|
이 역할의 사용자에게는 경고 규칙을 관리할 수 있는 관리 수준 액세스 권한이 있습니다. 이 클러스터 역할은 |
|
이 역할의 사용자는 |
|
이 역할의 사용자는 |
|
이 역할의 사용자는 |
|
이 역할의 사용자는 레코딩 규칙을 관리할 수 있는 관리 수준의 액세스 권한이 있습니다. 이 클러스터 역할은 |
|
이 역할의 사용자는 |
|
이 역할의 사용자는 |
|
이 역할의 사용자는 |
11.2.2.1. 예
사용자의 클러스터 역할을 적용하려면 기존 클러스터 역할을 특정 사용자 이름에 바인딩해야 합니다.
클러스터 역할은 사용하는 역할 바인딩 유형에 따라 클러스터 또는 네임스페이스 범위일 수 있습니다. RoleBinding
오브젝트가 사용되는 경우 oc adm policy add-role-to-user
명령을 사용하는 경우 클러스터 역할은 지정된 네임스페이스에만 적용됩니다. oc adm policy add-cluster-role-to-user
명령을 사용할 때 ClusterRoleBinding
오브젝트가 사용되는 경우 클러스터 역할은 클러스터의 모든 네임스페이스에 적용됩니다.
다음 예제 명령은 클러스터의 특정 네임스페이스의 경고 규칙에 대해 지정된 사용자 생성, 읽기, 업데이트 및 삭제(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>
추가 리소스
11.2.3. Loki를 사용하여 로그 기반 경고 규칙 생성
AlertingRule
CR에는 단일 LokiStack
인스턴스에 대한 경고 규칙 그룹을 선언하는 일련의 사양 및 Webhook 검증 정의가 포함되어 있습니다. 또한 Webhook 검증 정의에서는 규칙 검증 조건을 지원합니다.
-
AlertingRule
CR에 유효하지 않은간격
기간이 포함된 경우 잘못된 경고 규칙입니다. -
AlertingRule
CR에
마침표가 유효하지 않은 경우 잘못된 경고 규칙입니다. -
AlertingRule
CR에 유효하지 않은 LogQLexpr
가 포함된 경우 잘못된 경고 규칙입니다. -
AlertingRule
CR에 이름이 동일한 두 그룹이 포함된 경우 잘못된 경고 규칙입니다. - 위의 항목이 적용되지 않으면 경고 규칙이 유효한 것으로 간주됩니다.
테넌트 유형 | AlertingRule CR을 위한 유효한 네임스페이스 |
---|---|
애플리케이션 | |
audit |
|
인프라 |
|
사전 요구 사항
- Red Hat OpenShift Logging Operator 5.7 이상
- OpenShift Container Platform 4.13 이상
절차
AlertingRule
사용자 정의 리소스(CR)를 생성합니다.인프라 경고Rule 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
레이블
블록은>-<Stackspec.rules.selector
정의와 일치해야 합니다.- 3
인프라
테넌트에 대한AlertingRule
CR은openshift-*
,kube-\*
또는default
네임스페이스에서만 지원됩니다.- 4
kubernetes_namespace_name:
의 값은metadata.namespace
값과 일치해야 합니다.- 5
- 이 필수 필드의 값은
중요
,경고
또는정보
여야 합니다. - 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이 생성되는 네임스페이스에는 LokiStackspec.rules.namespaceSelector
정의와 일치하는 레이블이 있어야 합니다. - 2
레이블
블록은>-<Stackspec.rules.selector
정의와 일치해야 합니다.- 3
kubernetes_namespace_name:
metadata.namespace
의 값과 일치해야 합니다.- 4
- 이 필수 필드의 값은
중요
,경고
또는정보
여야 합니다. - 5
- 이 필수 필드의 값은 규칙에 대한 요약입니다.
- 6
- 이 필수 필드의 값은 규칙에 대한 자세한 설명입니다.
AlertingRule
CR을 적용합니다.$ oc apply -f <filename>.yaml