7.8. 특정 pod에서 애플리케이션 로그 전달

클러스터 관리자는 Kubernetes Pod 레이블을 사용하여 특정 Pod에서 로그 데이터를 수집하여 로그 수집기로 전달할 수 있습니다.

다양한 네임스페이스의 다른 pod와 함께 실행되는 pod로 구성된 애플리케이션이 있다고 가정합니다. 이러한 pod에 애플리케이션을 식별하는 레이블이 있는 경우 로그 데이터를 특정 로그 수집기로 수집하고 출력할 수 있습니다.

Pod 라벨을 지정하려면 하나 이상의 matchLabels 키-값 쌍을 사용합니다. 여러 키-값 쌍을 지정하는 경우 Pod를 모두 선택할 수 있어야 합니다.

프로세스

  1. ClusterLogForwarder CR(사용자 정의 리소스) YAML 파일을 생성합니다.
  2. YAML 파일에서 다음 예와 같이 inputs[].name.application.selector.matchLabels에서 간단한 동일성 기반 선택기를 사용하여 Pod 레이블을 지정합니다.

    ClusterLogForwarder CR YAML 파일의 예

    apiVersion: logging.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: instance 1
      namespace: openshift-logging 2
    spec:
      pipelines:
        - inputRefs: [ myAppLogData ] 3
          outputRefs: [ default ] 4
          parse: json 5
      inputs: 6
        - name: myAppLogData
          application:
            selector:
              matchLabels: 7
                environment: production
                app: nginx
            namespaces: 8
            - app1
            - app2
      outputs: 9
        - default
        ...

    1
    ClusterLogForwarder CR의 이름은 instance여야 합니다.
    2
    ClusterLogForwarder CR의 네임스페이스는 openshift-logging이어야 합니다.
    3
    inputs[].name에서 하나 이상의 쉼표로 구분된 값을 지정합니다.
    4
    outputs[]에서 하나 이상의 쉼표로 구분된 값을 지정합니다.
    5
    선택 사항: 구조화된 필드의 JSON 오브젝트로 구조화된 JSON 로그 항목을 전달합니다. 로그 항목에 유효한 구조화된 JSON이 포함되어야 합니다. 그렇지 않으면 OpenShift Logging이 structured 필드를 제거하고 대신 기본 인덱스인 app-00000x로 로그 항목을 보냅니다.
    6
    고유한 pod 레이블 집합이 있는 각 애플리케이션에 대해 고유한 inputs[].name을 정의합니다.
    7
    수집하려는 로그 데이터가 있는 Pod 라벨의 키-값 쌍을 지정합니다. 키뿐만 아니라 키와 값 모두를 지정해야 합니다. 선택하려면 Pod가 모든 키-값 쌍과 일치해야 합니다.
    8
    선택 사항: 하나 이상의 네임스페이스를 지정합니다.
    9
    로그 데이터를 전달할 출력을 하나 이상 지정합니다. 여기에 표시된 default 출력 (선택 사항)은 로그 데이터를 내부 Elasticsearch 인스턴스로 전송합니다.
  3. 선택 사항: 로그 데이터 수집을 특정 네임스페이스로 제한하려면 위 예제와 같이 inputs[].name.application.namespaces 를 사용합니다.
  4. 선택 사항: 다른 Pod 라벨이 있는 추가 애플리케이션에서 동일한 파이프라인으로 로그 데이터를 보낼 수 있습니다.

    1. Pod 레이블의 고유한 조합마다 표시된 항목과 유사한 추가 inputs[].name 섹션을 생성합니다.
    2. 이 애플리케이션의 Pod 레이블과 일치하도록 selectors를 업데이트합니다.
    3. inputs[].name 값을 inputRefs에 추가합니다. 예를 들면 다음과 같습니다.

      - inputRefs: [ myAppLogData, myOtherAppLogData ]
  5. CR 오브젝트를 생성합니다.

    $ oc create -f <file-name>.yaml

추가 리소스