2.3. 코어 설정 및 구성


Loki를 배포하기 위한 역할 기반 액세스 제어, 기본 모니터링 및 Pod 배치입니다.

2.3.1. LokiStack 규칙 RBAC 권한 승인

관리자는 클러스터 역할을 사용자 이름에 바인딩하여 사용자가 자체 경고 및 레코딩 규칙을 생성하고 관리할 수 있습니다. 클러스터 역할은 사용자에게 필요한 RBAC(역할 기반 액세스 제어) 권한이 포함된 ClusterRole 오브젝트로 정의됩니다.

경고 및 레코딩 규칙에 대한 다음 클러스터 역할은 LokiStack에 사용할 수 있습니다.

Expand
규칙 이름설명

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(Custom Resource Definitions)의 정의를 볼 수 있지만 이러한 리소스를 수정하거나 관리할 수 있는 권한은 없습니다.

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(Custom Resource Definitions)의 정의를 볼 수 있지만 이러한 리소스를 수정하거나 관리할 수 있는 권한은 없습니다.

recordingrules.loki.grafana.com-v1-edit

이 역할의 사용자는 RecordingRule 리소스를 생성, 업데이트 및 삭제할 수 있는 권한이 있습니다.

recordingrules.loki.grafana.com-v1-view

이 역할의 사용자는 loki.grafana.com/v1 API 그룹 내에서 RecordingRule 리소스를 읽을 수 있습니다. 기존 경고 규칙에 대한 구성, 라벨 및 주석을 검사할 수 있지만 수정할 수는 없습니다.

2.3.1.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>
Copy to Clipboard Toggle word wrap

다음 명령은 모든 네임스페이스의 경고 규칙에 대해 지정된 사용자 관리자 권한을 부여합니다.

관리자 권한에 대한 클러스터 역할 바인딩 명령의 예

$ oc adm policy add-cluster-role-to-user alertingrules.loki.grafana.com-v1-admin <username>
Copy to Clipboard Toggle word wrap

2.3.2. Loki를 사용하여 로그 기반 경고 규칙 생성

AlertingRule CR에는 단일 LokiStack 인스턴스에 대한 경고 규칙 그룹을 선언하는 일련의 사양 및 Webhook 검증 정의가 포함되어 있습니다. 또한 웹 후크 검증 정의에서는 규칙 검증 조건을 지원합니다.

  • AlertingRule CR에 잘못된 간격 기간이 포함된 경우 잘못된 경고 규칙입니다.
  • AlertingRule CR 에 기간 동안 유효하지 않은 항목이 포함된 경우 잘못된 경고 규칙입니다.
  • AlertingRule CR에 잘못된 LogQL expr 가 포함된 경우 잘못된 경고 규칙입니다.
  • AlertingRule CR에 동일한 이름의 두 개의 그룹이 포함된 경우 잘못된 경고 규칙입니다.
  • 위의 어느 것도 적용되지 않으면 경고 규칙이 유효한 것으로 간주됩니다.
Expand
표 2.2. AlertingRule 정의
테넌트 유형AlertingRule CR을 위한 유효한 네임스페이스

애플리케이션

<your_application_namespace>

audit

openshift-logging

인프라

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

프로세스

  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
    Copy to Clipboard Toggle word wrap

    1
    AlertingRule CR이 생성되는 네임스페이스에는 LokiStack spec.rules.namespaceSelector 정의와 일치하는 레이블이 있어야 합니다.
    2
    labels 블록은 LokiStack spec.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
    Copy to Clipboard Toggle word wrap

    1
    AlertingRule CR이 생성되는 네임스페이스에는 LokiStack spec.rules.namespaceSelector 정의와 일치하는 레이블이 있어야 합니다.
    2
    labels 블록은 LokiStack spec.rules.selector 정의와 일치해야 합니다.
    3
    kubernetes_namespace_name: 의 값은 metadata.namespace 값과 일치해야 합니다.
    4
    이 필수 필드의 값은 중요,경고 또는 정보 여야 합니다.
    5
    이 필수 필드의 값은 규칙에 대한 요약입니다.
    6
    이 필수 필드의 값은 규칙에 대한 자세한 설명입니다.
  2. AlertingRule CR을 적용합니다.

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

2.3.3. 멤버 목록 생성 실패를 허용하도록 Loki 구성

OpenShift Container Platform 클러스터에서 관리자는 일반적으로 개인 IP 네트워크 범위를 사용합니다. 결과적으로 LokiStack 멤버 목록 구성은 기본적으로 개인 IP 네트워크만 사용하므로 실패합니다.

관리자는 memberlist 구성에 대한 Pod 네트워크를 선택할 수 있습니다. hashRing 사양에서 podIP 주소를 사용하도록 LokiStack CR(사용자 정의 리소스)을 수정할 수 있습니다. LokiStack CR을 구성하려면 다음 명령을 사용합니다.

$ oc patch LokiStack logging-loki -n openshift-logging  --type=merge -p '{"spec": {"hashRing":{"memberlist":{"instanceAddrType":"podIP"},"type":"memberlist"}}}'
Copy to Clipboard Toggle word wrap

podIP를 포함하는 LokiStack의 예

apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
  name: logging-loki
  namespace: openshift-logging
spec:
# ...
  hashRing:
    type: memberlist
    memberlist:
      instanceAddrType: podIP
# ...
Copy to Clipboard Toggle word wrap

2.3.4. Loki를 사용하여 스트림 기반 보존 활성화

로그 스트림을 기반으로 보존 정책을 구성할 수 있습니다. 보존 규칙을 전역, 테넌트별 또는 둘 다 설정할 수 있습니다. 둘 다 구성하는 경우 테넌트 규칙이 글로벌 규칙 앞에 적용됩니다.

중요

s3 버킷 또는 LokiStack 사용자 정의 리소스(CR)에 정의된 보존 기간이 없으면 로그가 정리되지 않고 s3 스토리지를 채울 수 있습니다.

참고
  • 로깅 버전 5.9 이상에서는 스키마 v12 를 지원하지만 향후 호환성을 위해서는 스키마 v13 을 사용하는 것이 좋습니다.
  • 비용 효율적인 로그 정리의 경우 오브젝트 스토리지 공급자에서 직접 보존 정책을 구성합니다. 스토리지 공급자의 라이프사이클 관리 기능을 사용하여 이전 로그를 자동으로 삭제합니다. 또한 Loki에서 추가 처리를 방지하고 S3에 대한 요청을 삭제합니다.

    오브젝트 스토리지에서 라이프사이클 정책을 지원하지 않는 경우 내부적으로 보존을 적용하도록 LokiStack을 구성해야 합니다. 지원되는 보존 기간은 최대 30일입니다.

사전 요구 사항

  • 관리자 권한이 있습니다.
  • Loki Operator를 설치했습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.

프로세스

  1. 스트림 기반 보존을 활성화하려면 LokiStack CR을 생성하고 YAML 파일로 저장합니다. 다음 예제에서는 lokistack.yaml 이라고 합니다.

    S3에 대한 글로벌 스트림 기반 보존의 예

    apiVersion: loki.grafana.com/v1
    kind: LokiStack
    metadata:
      name: logging-loki
      namespace: openshift-logging
    spec:
      limits:
       global: 
    1
    
          retention: 
    2
    
            days: 20
            streams:
            - days: 4
              priority: 1
              selector: '{kubernetes_namespace_name=~"test.+"}' 
    3
    
            - days: 1
              priority: 1
              selector: '{log_type="infrastructure"}'
      managementState: Managed
      replicationFactor: 1
      size: 1x.small
      storage:
        schemas:
        - effectiveDate: "2020-10-11"
          version: v13
        secret:
          name: logging-loki-s3
          type: s3
      storageClassName: gp3-csi
      tenants:
        mode: openshift-logging
    Copy to Clipboard Toggle word wrap

    1
    모든 로그 스트림에 대한 보존 정책을 설정합니다. 이 정책은 오브젝트 스토리지에 저장된 로그의 보존 기간에는 영향을 미치지 않습니다.
    2
    CR에 retention 블록을 추가하여 클러스터에서 보존을 활성화합니다.
    3
    로그 스트림을 보존 규칙에 일치시킬 LogQL 쿼리 를 지정합니다.

    S3에 대한 테넌트별 스트림 기반 보존 예

    apiVersion: loki.grafana.com/v1
    kind: LokiStack
    metadata:
      name: logging-loki
      namespace: openshift-logging
    spec:
      limits:
        global:
          retention:
            days: 20
        tenants: 
    1
    
          application:
            retention:
              days: 1
              streams:
                - days: 4
                  selector: '{kubernetes_namespace_name=~"test.+"}' 
    2
    
          infrastructure:
            retention:
              days: 5
              streams:
                - days: 1
                  selector: '{kubernetes_namespace_name=~"openshift-cluster.+"}'
      managementState: Managed
      replicationFactor: 1
      size: 1x.small
      storage:
        schemas:
        - effectiveDate: "2020-10-11"
          version: v13
        secret:
          name: logging-loki-s3
          type: s3
      storageClassName: gp3-csi
      tenants:
        mode: openshift-logging
    Copy to Clipboard Toggle word wrap

    1
    테넌트당 보존 정책을 설정합니다. 유효한 테넌트 유형은 애플리케이션,감사인프라 입니다.
    2
    로그 스트림을 보존 규칙에 일치시킬 LogQL 쿼리 를 지정합니다.
  2. LokiStack CR을 적용합니다.

    $ oc apply -f lokistack.yaml
    Copy to Clipboard Toggle word wrap

2.3.5. Loki Pod 배치

Pod의 허용 오차 또는 노드 선택기를 사용하여 Loki Pod가 실행되는 노드를 제어하고 다른 워크로드가 해당 노드를 사용하지 못하도록 할 수 있습니다.

LokiStack CR(사용자 정의 리소스)을 사용하여 로그 저장소 Pod에 허용 오차를 적용하고 노드 사양이 있는 노드에 taint를 적용할 수 있습니다. 노드의 테인트는 테인트를 허용하지 않는 모든 Pod를 거절하도록 노드에 지시하는 키:값 쌍입니다. 다른 Pod에 없는 특정 키:값 쌍을 사용하면 해당 노드에서 로그 저장소 Pod만 실행할 수 있습니다.

노드 선택기가 있는 LokiStack의 예

apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
  name: logging-loki
  namespace: openshift-logging
spec:
# ...
  template:
    compactor: 
1

      nodeSelector:
        node-role.kubernetes.io/infra: "" 
2

    distributor:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
    gateway:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
    indexGateway:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
    ingester:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
    querier:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
    queryFrontend:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
    ruler:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
# ...
Copy to Clipboard Toggle word wrap

1
노드 선택기에 적용되는 구성 요소 Pod 유형을 지정합니다.
2
정의된 라벨이 포함된 노드로 이동되는 Pod를 지정합니다.

노드 선택기 및 허용 오차가 있는 LokiStack CR의 예

apiVersion: loki.grafana.com/v1
kind: LokiStack
metadata:
  name: logging-loki
  namespace: openshift-logging
spec:
# ...
  template:
    compactor:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    distributor:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    indexGateway:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    ingester:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    querier:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    queryFrontend:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    ruler:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
    gateway:
      nodeSelector:
        node-role.kubernetes.io/infra: ""
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/infra
        value: reserved
      - effect: NoExecute
        key: node-role.kubernetes.io/infra
        value: reserved
# ...
Copy to Clipboard Toggle word wrap

LokiStack(CR)의 nodeSelector허용 오차 필드를 구성하려면 oc explain 명령을 사용하여 특정 리소스에 대한 설명 및 필드를 볼 수 있습니다.

$ oc explain lokistack.spec.template
Copy to Clipboard Toggle word wrap

출력 예

KIND:     LokiStack
VERSION:  loki.grafana.com/v1

RESOURCE: template <Object>

DESCRIPTION:
     Template defines the resource/limits/tolerations/nodeselectors per
     component

FIELDS:
   compactor	<Object>
     Compactor defines the compaction component spec.

   distributor	<Object>
     Distributor defines the distributor component spec.
...
Copy to Clipboard Toggle word wrap

자세한 내용은 특정 필드를 추가할 수 있습니다.

$ oc explain lokistack.spec.template.compactor
Copy to Clipboard Toggle word wrap

출력 예

KIND:     LokiStack
VERSION:  loki.grafana.com/v1

RESOURCE: compactor <Object>

DESCRIPTION:
     Compactor defines the compaction component spec.

FIELDS:
   nodeSelector	<map[string]string>
     NodeSelector defines the labels required by a node to schedule the
     component onto it.
...
Copy to Clipboard Toggle word wrap

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat