11장. 외부 타사 로깅 시스템으로 로그 전달
기본적으로 로깅 하위 시스템은 컨테이너 및 인프라 로그를 ClusterLogging
사용자 정의 리소스에 정의된 기본 내부 로그 저장소로 보냅니다. 그러나 보안 스토리지를 제공하지 않기 때문에 감사 로그를 내부 저장소로 보내지 않습니다. 이 기본 구성이 요구 사항을 충족하는 경우 Cluster Log Forwarder를 구성할 필요가 없습니다.
다른 로그 집계기에 로그를 보내려면 OpenShift Container Platform Cluster Log Forwarder를 사용합니다. 이 API를 사용하면 컨테이너, 인프라 및 감사 로그를 클러스터 내부 또는 외부의 특정 엔드포인트에 보낼 수 있습니다. 또한 다른 유형의 로그를 다양한 시스템에 보낼 수 있으므로 각 유형에 다양한 사용자가 액세스할 수 있습니다. 또한 조직의 필요에 따라 로그를 안전하게 보낼 수 있도록 TLS(Transport Layer Security) 지원을 활성화할 수도 있습니다.
감사 로그를 기본 내부 Elasticsearch 로그 저장소로 보내려면 로그 저장소에 감사 로그 전달에 설명된 대로 Cluster Log Forwarder를 사용합니다.
로그를 외부로 전달할 때 로깅 하위 시스템은 Fluentd 구성 맵을 생성하거나 수정하여 원하는 프로토콜을 사용하여 로그를 보냅니다. 외부 로그 집계기에서 프로토콜을 구성해야 합니다.
11.1. 타사 시스템으로 로그 전달 정보
OpenShift Container Platform 클러스터 내부 및 외부의 특정 끝점에 로그를 보내려면 ClusterLogForwarder
사용자 정의 리소스(CR)에서 출력 및 파이프라인 의 조합을 지정합니다. 입력을 사용하여 특정 프로젝트와 관련된 애플리케이션 로그를 끝점으로 전달할 수도 있습니다. 인증은 Kubernetes Secret 오브젝트에서 제공합니다.
- 출력
사용자가 정의한 로그 데이터 대상 또는 로그를 보낼 위치입니다. 출력은 다음 유형 중 하나일 수 있습니다.
-
elasticsearch
. 외부 Elasticsearch 인스턴스입니다.elasticsearch
출력은 TLS 연결을 사용할 수 있습니다. -
fluentdForward
. Fluentd를 지원하는 외부 로그 집계 솔루션입니다. 이 옵션은 Fluentd 전달 프로토콜을 사용합니다.fluentForward
출력은 TCP 또는 TLS 연결을 사용할 수 있으며 시크릿에 shared_key 필드를 제공하여 공유 키 인증을 지원합니다. 공유 키 인증은 TLS를 포함하거나 포함하지 않고 사용할 수 있습니다. -
syslog
. syslog RFC3164 또는 RFC5424 프로토콜을 지원하는 외부 로그 집계 솔루션입니다.syslog
출력은 UDP, TCP 또는 TLS 연결을 사용할 수 있습니다. -
cloudwatch
. AWS(Amazon Web Services)에서 호스팅하는 모니터링 및 로그 스토리지 서비스인 Amazon CloudWatch입니다. -
loki
. 수평으로 확장 가능한 고가용성 다중 테넌트 로그 집계 시스템인 Loki입니다. -
kafka
. Kafka 브로커.kafka
출력은 TCP 또는 TLS 연결을 사용할 수 있습니다. -
default
. 내부 OpenShift Container Platform Elasticsearch 인스턴스입니다. 기본 출력을 구성할 필요는 없습니다.default
출력을 구성하는 경우default
출력이 Red Hat OpenShift Logging Operator용으로 예약되므로 오류 메시지가 나타납니다.
-
- pipeline
한 로그 유형에서 하나 이상의 출력으로 간단한 라우팅 또는 전송할 로그를 정의합니다. 로그 유형은 다음 중 하나입니다.
-
application
. 인프라 컨테이너 애플리케이션을 제외하고 클러스터에서 실행 중인 사용자 애플리케이션에 의해 생성된 컨테이너 로그입니다. -
infrastructure
.openshift*
,kube*
또는default
프로젝트에서 실행되는 Pod의 컨테이너 로그 및 노드 파일 시스템에서 가져온 저널 로그입니다. -
audit
. 노드 감사 시스템,auditd
, Kubernetes API 서버, OpenShift API 서버 및 OVN 네트워크에서 생성된 감사 로그입니다.
파이프라인에서
key:value
쌍을 사용하여 아웃바운드 로그 메시지에 레이블을 추가할 수 있습니다. 예를 들어 다른 데이터 센터로 전달되는 메시지에 레이블을 추가하거나 유형별로 로그에 레이블을 지정할 수 있습니다. 오브젝트에 추가된 레이블도 로그 메시지와 함께 전달됩니다.-
- 입력
특정 프로젝트와 관련된 애플리케이션 로그를 파이프라인으로 전달합니다.
파이프 라인에서
outputRef
매개변수를 사용하여 로그를 전달하는 위치와inputRef
매개변수를 사용하여 전달하는 로그 유형을 정의합니다.- Secret
-
사용자 자격 증명과 같은 기밀 데이터가 포함된
key:value 맵입니다
.
다음을 확인합니다.
-
ClusterLogForwarder
CR 오브젝트가 있는 경우default
출력이 있는 파이프라인이 없으면 로그가 기본 Elasticsearch 인스턴스로 전달되지 않습니다. -
기본적으로 로깅 하위 시스템은 컨테이너 및 인프라 로그를
ClusterLogging
사용자 정의 리소스에 정의된 기본 내부 Elasticsearch 로그 저장소로 보냅니다. 그러나 보안 스토리지를 제공하지 않기 때문에 감사 로그를 내부 저장소로 보내지 않습니다. 이 기본 구성이 요구 사항을 충족하는 경우 Log Forwarding API를 구성하지 마십시오. -
로그 유형에 대한 파이프라인을 정의하지 않으면 정의되지 않은 유형의 로그가 삭제됩니다. 예를 들어
application
및audit
유형에 대한 파이프라인을 지정하고infrastructure
유형에 대한 파이프라인을 지정하지 않으면infrastructure
로그가 삭제됩니다. -
ClusterLogForwarder
사용자 정의 리소스(CR)에서 여러 유형의 출력을 사용하여 다른 프로토콜을 지원하는 서버에 로그를 보낼 수 있습니다. - 내부 OpenShift Container Platform Elasticsearch 인스턴스는 감사 로그를 위한 보안 스토리지를 제공하지 않습니다. 감사 로그를 전달하는 시스템이 조직 및 정부 규정을 준수하고 올바르게 보호되도록 하는 것이 좋습니다. 로깅 하위 시스템은 이러한 규정을 준수하지 않습니다.
다음 예제는 감사 로그를 안전한 외부 Elasticsearch 인스턴스로, 인프라 로그를 안전하지 않은 외부 Elasticsearch 인스턴스로, 애플리케이션 로그를 Kafka 브로커로, 애플리케이션 로그를 my-apps-logs
프로젝트에서 내부 Elasticsearch 인스턴스로 전달합니다.
샘플 로그 전달 출력 및 파이프라인
apiVersion: "logging.openshift.io/v1" kind: ClusterLogForwarder metadata: name: instance 1 namespace: openshift-logging 2 spec: outputs: - name: elasticsearch-secure 3 type: "elasticsearch" url: https://elasticsearch.secure.com:9200 secret: name: elasticsearch - name: elasticsearch-insecure 4 type: "elasticsearch" url: http://elasticsearch.insecure.com:9200 - name: kafka-app 5 type: "kafka" url: tls://kafka.secure.com:9093/app-topic inputs: 6 - name: my-app-logs application: namespaces: - my-project pipelines: - name: audit-logs 7 inputRefs: - audit outputRefs: - elasticsearch-secure - default parse: json 8 labels: secure: "true" 9 datacenter: "east" - name: infrastructure-logs 10 inputRefs: - infrastructure outputRefs: - elasticsearch-insecure labels: datacenter: "west" - name: my-app 11 inputRefs: - my-app-logs outputRefs: - default - inputRefs: 12 - application outputRefs: - kafka-app labels: datacenter: "south"
- 1
ClusterLogForwarder
CR의 이름은instance
여야 합니다.- 2
ClusterLogForwarder
CR의 네임스페이스는openshift-logging
이어야 합니다.- 3
- 보안 시크릿과 보안 URL을 사용하여 보안 Elasticsearch 출력을 구성합니다.
- 출력을 설명하는 이름입니다.
-
출력 유형:
elasticsearch
. - 접두사를 포함하여 유효한 절대 URL인 Elasticsearch 인스턴스의 보안 URL 및 포트입니다.
-
TLS 통신을 위해 끝점에서 요구하는 시크릿입니다.
openshift-logging
프로젝트에 이 시크릿이 있어야 합니다.
- 4
- 안전하지 않은 Elasticsearch 출력에 대한 구성:
- 출력을 설명하는 이름입니다.
-
출력 유형:
elasticsearch
. - 접두사를 포함하여 유효한 절대 URL인 Elasticsearch 인스턴스의 안전하지 않은 URL 및 포트입니다.
- 5
- 보안 URL을 통한 클라이언트 인증 TLS 통신을 사용하는 Kafka 출력 구성
- 출력을 설명하는 이름입니다.
-
출력 유형:
kafka
. - 접두사를 포함하여 Kafka 브로커의 URL 및 포트를 유효한 절대 URL로 지정합니다.
- 6
my-project
네임스페이스에서 애플리케이션 로그를 필터링하기 위한 입력 구성입니다.- 7
- 감사 로그를 안전한 외부 Elasticsearch 인스턴스로 전송하기 위한 파이프 라인 구성:
- 파이프라인을 설명하는 이름입니다.
-
inputRefs
는 로그 유형이며 이 예에서는audit
입니다. -
outputRefs
는 사용할 출력의 이름입니다.이 예에서elasticsearch-secure
는 보안 Elasticsearch 인스턴스로 전달하고default
은 내부 Elasticsearch 인스턴스로 전달합니다. - 선택사항: 로그에 추가할 레이블입니다.
- 8
- 선택 사항: 구조화된 JSON 로그 항목을
structured
필드에서 JSON 오브젝트로 전달할지 여부를 지정합니다. 로그 항목에 유효한 구조화된 JSON이 포함되어야 합니다. 그렇지 않으면 OpenShift Logging이structured
필드를 제거하고 대신 기본 인덱스인app-00000x
로 로그 항목을 보냅니다. - 9
- 선택 사항: 문자열. 로그에 추가할 하나 이상의 레이블입니다. "true"와 같은 인용 값은 부울 값이 아닌 문자열 값으로 인식됩니다.
- 10
- 인프라 로그를 안전하지 않은 외부 Elasticsearch 인스턴스로 전송하는 파이프라인 구성:
- 11
my-project
프로젝트에서 내부 Elasticsearch 인스턴스로 로그를 전송하기 위한 파이프라인 구성입니다.- 파이프라인을 설명하는 이름입니다.
-
inputRefs
는 특정 입력인my-app-logs
입니다. -
outputRefs
는default
입니다. - 선택 사항: 문자열. 로그에 추가할 하나 이상의 레이블입니다.
- 12
- 파이프라인 이름 없이 Kafka 브로커에 로그를 전송하는 파이프라인 구성:
-
inputRefs
는 이 예제application
에서 로그 유형입니다. -
outputRefs
는 사용할 출력의 이름입니다. - 선택 사항: 문자열. 로그에 추가할 하나 이상의 레이블입니다.
-
외부 로그 집계기를 사용할 수 없는 경우 Fluentd 로그 처리
외부 로깅 집계기를 사용할 수 없으며 로그를 수신할 수 없는 경우 Fluentd는 계속 로그를 수집하여 버퍼에 저장합니다. 로그 집계기를 사용할 수 있게 되면 버퍼링된 로그를 포함하여 로그 전달이 재개됩니다. 버퍼가 완전히 채워지면 Fluentd는 로그 수집을 중지합니다. OpenShift Container Platform은 로그를 회전시켜 삭제합니다. Fluentd 데몬 세트 또는 pod에 버퍼 크기를 조정하거나 PVC(영구 볼륨 클레임)를 추가할 수 없습니다.
지원되는 권한 부여 키
여기에서 공통 키 유형이 제공됩니다. 일부 출력 유형은 출력별 구성 필드에 설명된 추가 특수 키를 지원합니다. 모든 보안 키는 선택 사항입니다. 관련 키를 설정하여 원하는 보안 기능을 활성화합니다. 키 및 시크릿, 서비스 계정, 포트 열기 또는 전역 프록시 구성과 같이 외부 대상에 필요할 수 있는 추가 구성을 생성하고 유지보수할 책임이 있습니다. Open Shift Logging은 권한 부여 조합의 불일치를 확인하지 않습니다.
- TLS(Transport Layer Security)
시크릿 없이 TLS URL('http://…' 또는 'ssl://…')을 사용하면 기본 TLS 서버 측 인증을 사용할 수 있습니다. 추가 TLS 기능은 보안을 포함하고 다음 선택적 필드를 설정하여 사용할 수 있습니다.
-
TLS.crt
:(문자열) 클라이언트 인증서가 포함된 파일 이름입니다. 상호 인증을 활성화합니다.tls.key
가 필요합니다. -
TLS.key
:(문자열) 클라이언트 인증서의 잠금을 해제하기 위해 개인 키가 포함된 파일 이름입니다.tls.crt
가 필요합니다. -
암호
: (문자열) 인코딩된 TLS 개인 키를 디코딩하기 위해 통과합니다.tls.key
가 필요합니다. -
ca-bundle.crt
:(문자열) 서버 인증을 위한 고객 CA의 파일 이름입니다.
-
- 사용자 이름 및 암호
-
사용자 이름
:(문자열) 인증 사용자 이름입니다.암호
가 필요합니다. -
암호
: (문자열) 인증 암호입니다.사용자
이름 필요.
-
- SASL(Simple Authentication Security Layer)
-
SASL.enable
(boolean) Explicitly enable or disable SASL. 누락된 경우 다른sasl.
키가 설정되면 SASL이 자동으로 활성화됩니다. -
SASL.mechanisms
: (array) 허용된 SASL 메커니즘 이름 목록. 누락되거나 비어 있는 경우 시스템 기본값이 사용됩니다. -
SASL.allow-insecure
: (boolean) 일반 텍스트 암호를 보내는 메커니즘을 허용합니다. 기본값은 false입니다.
-
11.1.1. 보안 생성
다음 명령을 사용하여 인증서 및 키 파일이 포함된 디렉터리에 보안을 생성할 수 있습니다.
$ oc create secret generic -n openshift-logging <my-secret> \ --from-file=tls.key=<your_key_file> --from-file=tls.crt=<your_crt_file> --from-file=ca-bundle.crt=<your_bundle_file> --from-literal=username=<your_username> --from-literal=password=<your_password>
최상의 결과를 위해 일반 또는 불투명 보안을 사용하는 것이 좋습니다.