4.9. systemd-journald 및 Fluentd 구성

Fluentd는 저널에서 읽고 저널 기본 설정이 매우 낮기 때문에 저널은 시스템 서비스의 로깅 속도를 유지할 수 없으므로 저널 항목이 손실될 수 있습니다.

저널이 항목을 손실하지 않도록 RateLimitIntervalSec=30sRateLimitBurst = 10000(또는 필요한 경우 더 높음)을 설정하는 것이 좋습니다.

4.9.1. OpenShift Logging을 위한 systemd-journald 구성

프로젝트를 확장할 때 기본 로깅 환경을 조정해야 할 수도 있습니다.

예를 들어, 로그가 누락된 경우 저널에 대한 비율 제한을 늘려야 할 수 있습니다. OpenShift Logging이 로그를 삭제하지 않고 과도한 리소스를 사용하지 않도록 지정된 기간 동안 보유할 메시지 수를 조정할 수 있습니다.

로그 압축 여부, 로그 보존 기간, 로그 저장 방법 또는 저장 여부 및 기타 설정을 확인할 수도 있습니다.

프로세스

  1. 필요한 설정으로 journald.conf 파일을 생성합니다.

    Compress=yes 1
    ForwardToConsole=no 2
    ForwardToSyslog=no
    MaxRetentionSec=1month 3
    RateLimitBurst=10000 4
    RateLimitIntervalSec=30s
    Storage=persistent 5
    SyncIntervalSec=1s 6
    SystemMaxUse=8G 7
    SystemKeepFree=20% 8
    SystemMaxFileSize=10M 9
    1
    로그를 파일 시스템에 쓰기 전에 압축할지 여부를 지정합니다. 메시지를 압축하려면 yes를 지정하고 압축하지 않으려면 no를 지정합니다. 기본값은 yes입니다.
    2
    로그 메시지를 전달할지 여부를 구성합니다. 각각에 대해 기본값은 no입니다. 다음을 지정합니다.
    • 시스템 콘솔에 로그를 전달하려면 ForwardToConsole을 지정합니다.
    • 로그를 커널 로그 버퍼로 전달하려면 ForwardToKsmg를 지정합니다.
    • syslog 데몬으로 전달하려면 ForwardToSyslog를 지정합니다.
    • 로그인한 모든 사용자에게 월(wall) 메시지로 메시지를 전달하려면 ForwardToWall을 지정합니다.
    3
    저널 항목을 저장할 최대 시간을 지정합니다. 초를 지정하려면 숫자를 입력합니다. 또는 "year", "month", "week", "day", "h"또는 "m"과 같은 단위를 포함합니다. 비활성화하려면 0을 입력합니다. 기본값은 1month입니다.
    4
    속도 제한을 구성합니다. RateLimitIntervalSec에서 정의한 시간 간격 동안, RateLimitBurst에 지정된 것보다 더 많은 로그를 수신하는 경우 간격이 끝날 때까지 간격 내의 모든 추가 메시지는 삭제됩니다. 기본값인 RateLimitIntervalSec=30sRateLimitBurst=10000을 설정하는 것이 좋습니다.
    5
    로그 저장 방법을 지정합니다. 기본값은 persistent입니다.
    • /var/log/journal/에서 메모리에 로그를 저장하기 위한 volatile입니다.
    • /var/log/journal/의 디스크에 로그를 저장하기 위한 persistent입니다. systemd는 디렉토리가 없는 경우 디렉토리를 생성합니다.
    • 디렉토리가 존재하는 경우 /var/log/journal/에 로그를 저장하기 위한 auto입니다. 존재하지 않는 경우 systemd는 /run/systemd/journal에 로그를 임시 저장합니다.
    • 로그를 저장하지 않는 none입니다. systemd는 모든 로그를 삭제합니다.
    6
    ERR, WARNING, NOTICE, INFODEBUG 로그에 대해 저널 파일을 디스크에 동기화하기 전에 제한 시간을 지정합니다. CRIT, ALERT 또는 EMERG 로그를 수신하면 systemd가 즉시 동기화됩니다. 기본값은 1s입니다.
    7
    저널이 사용할 수 있는 최대 크기를 지정합니다. 기본값은 8G 입니다.
    8
    시스템에서 사용 가능한 디스크 공간을 지정합니다. 기본값은 20%입니다.
    9
    /var/log/journal에 지속적으로 저장된 개별 저널 파일의 최대 크기를 지정합니다. 기본값은 10M입니다.
    참고

    속도 제한을 제거하는 경우 이전에 제한되었던 메시지를 처리할 때 시스템 로깅 데몬에서 CPU 사용률이 증가할 수 있습니다.

    시스템 설정에 대한 자세한 내용은 https://www.freedesktop.org/software/systemd/man/journald.conf.html을 참조하십시오. 해당 페이지에 나열된 기본 설정은 OpenShift Container Platform에 적용되지 않을 수 있습니다.

  2. journal.conf 파일을 base64로 변환하고 다음 명령을 실행하여 jrnl_cnf 라는 변수에 저장합니다.

    $ export jrnl_cnf=$( cat journald.conf | base64 -w0 )
  3. 이전 단계에서 만든 jrnl_cnf 변수가 포함된 MachineConfig 오브젝트를 만듭니다. 다음 샘플 명령은 작업자에 대한 MachineConfig 오브젝트를 생성합니다.

    $ cat << EOF > ./40-worker-custom-journald.yaml 1
    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: worker 2
      name: 40-worker-custom-journald 3
    spec:
      config:
        ignition:
          config: {}
          security:
            tls: {}
          timeouts: {}
          version: 3.2.0
        networkd: {}
        passwd: {}
        storage:
          files:
          - contents:
              source: data:text/plain;charset=utf-8;base64,${jrnl_cnf} 4
              verification: {}
            filesystem: root
            mode: 0644 5
            path: /etc/systemd/journald.conf.d/custom.conf
      osImageURL: ""
    EOF
    1
    선택 사항: 컨트롤 플레인 (마스터) 노드의 경우 파일 이름을 40-master-custom-journald.yaml 로 지정할 수 있습니다.
    2
    선택 사항: 컨트롤 플레인 (마스터) 노드의 경우 역할을 master 로 제공합니다.
    3
    선택 사항: 컨트롤 플레인 (마스터) 노드의 경우 이름을 40-master-custom-journald 로 지정할 수 있습니다.
    4
    선택 사항: the journald.conf 파일에 매개 변수의 정적 사본을 포함하려면 ${jrnl_cnf}echo $jrnl_cnf 명령의 출력으로 바꿉니다.
    5
    journal.conf 파일에 대한 권한을 설정합니다. 0644 권한을 설정하는 것이 좋습니다.
  4. 다음 명령을 실행하여 머신 구성을 생성합니다.

    $ oc apply -f <file_name>.yaml

    컨트롤러는 새로운 MachineConfig를 감지하고 새로운 rendered-worker-<hash> 버전을 생성합니다.

  5. 다음 명령을 실행하여 각 노드에 새로 렌더링된 구성의 롤아웃 상태를 모니터링합니다.

    $ oc describe machineconfigpool/<node> 1
    1
    노드를 master 또는 worker 로 지정합니다.

    작업자의 출력 예

    Name:         worker
    Namespace:
    Labels:       machineconfiguration.openshift.io/mco-built-in=
    Annotations:  <none>
    API Version:  machineconfiguration.openshift.io/v1
    Kind:         MachineConfigPool
    
    ...
    
    Conditions:
      Message:
      Reason:                All nodes are updating to rendered-worker-913514517bcea7c93bd446f4830bc64e