9장. 로그 수집 및 전달
9.1. 로그 수집 및 전달 정보
Red Hat OpenShift Logging Operator는 ClusterLogForwarder
리소스 사양에 따라 수집기를 배포합니다. 이 Operator에서 지원하는 수집기 옵션은 레거시 Fluentd 수집기와 벡터 수집기의 두 가지입니다.
Fluentd는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. Red Hat은 현재 릴리스 라이프사이클 동안 이 기능에 대한 버그 수정 및 지원을 제공하지만 이 기능은 더 이상 개선 사항을 받지 않습니다. Fluentd 대신 Vector를 사용할 수 있습니다.
9.1.1. 로그 컬렉션
로그 수집기는 각 OpenShift Container Platform 노드에 Pod를 배포하여 컨테이너 및 노드 로그를 수집하는 데몬 세트입니다.
기본적으로 로그 수집기는 다음 소스를 사용합니다.
- 운영 체제, 컨테이너 런타임 및 OpenShift Container Platform의 journald 로그 메시지에 의해 생성된 시스템 및 인프라 로그입니다.
-
모든 컨테이너 로그에 대한
/var/log/containers/*.log
감사 로그를 수집하도록 로그 수집기를 구성하는 경우 /var/log/audit/audit.log
에서 해당 로그를 수집합니다.
로그 수집기는 이러한 소스에서 로그를 수집하여 로깅 구성에 따라 내부 또는 외부로 전달합니다.
9.1.1.1. 로그 수집기 유형
벡터 는 로깅을 위해 Fluentd의 대안으로 제공되는 로그 수집기입니다.
ClusterLogging
사용자 정의 리소스(CR) 컬렉션
사양을 수정하여 클러스터에서 사용하는 로깅 수집기 유형을 구성할 수 있습니다.
Vector를 수집기로 구성하는 ClusterLogging CR의 예
apiVersion: logging.openshift.io/v1 kind: ClusterLogging metadata: name: instance namespace: openshift-logging spec: collection: logs: type: vector vector: {} # ...
9.1.1.2. 로그 컬렉션 제한 사항
컨테이너 런타임은 로그 메시지의 소스(프로젝트, Pod 이름 및 컨테이너 ID)를 식별하기 위한 최소한의 정보를 제공합니다. 이 정보로는 로그 소스를 고유하게 식별하기에 부족합니다. 로그 수집기에서 로그 처리를 시작하기 전에 지정된 이름과 프로젝트가 있는 Pod를 삭제하면 레이블 및 주석과 같은 API 서버의 정보를 사용할 수 없게 됩니다. 로그 메시지를 비슷한 이름의 Pod 및 프로젝트와 구별할 방법 또는 로그의 소스를 추적할 방법이 없을 수 있습니다. 이 제한은 로그 수집 및 정규화가 최선의 노력으로 간주됨을 의미합니다.
사용 가능한 컨테이너 런타임은 로그 메시지의 소스를 식별할 수 있는 최소한의 정보를 제공하며, 고유한 개별 로그 메시지 또는 그러한 메시지의 소스 추적을 보장하지 않습니다.
9.1.1.3. 유형별 로그 수집기 기능
기능 | fluentd | vector |
---|---|---|
앱 컨테이너 로그 | ✓ | ✓ |
앱별 라우팅 | ✓ | ✓ |
네임스페이스별 앱별 라우팅 | ✓ | ✓ |
인프라 컨테이너 로그 | ✓ | ✓ |
인프라 저널 로그 | ✓ | ✓ |
kube API 감사 로그 | ✓ | ✓ |
OpenShift API 감사 로그 | ✓ | ✓ |
OVN(Open Virtual Network) 감사 로그 | ✓ | ✓ |
기능 | fluentd | vector |
---|---|---|
Elasticsearch 인증서 | ✓ | ✓ |
Elasticsearch 사용자 이름 / 암호 | ✓ | ✓ |
NetNamespace 키 | ✓ | ✓ |
<.> STS | ✓ | ✓ |
Kafka 인증서 | ✓ | ✓ |
Kafka 사용자 이름 / 암호 | ✓ | ✓ |
kafka SASL | ✓ | ✓ |
Loki bearer 토큰 | ✓ | ✓ |
기능 | fluentd | vector |
---|---|---|
Viaq 데이터 모델 - 앱 | ✓ | ✓ |
Viaq 데이터 모델 - 인프라 | ✓ | ✓ |
Viaq 데이터 모델 - 인프라(journal) | ✓ | ✓ |
Viaq 데이터 모델 - Linux 감사 | ✓ | ✓ |
Viaq 데이터 모델 - kube-apiserver audit | ✓ | ✓ |
Viaq 데이터 모델 - OpenShift API 감사 | ✓ | ✓ |
Viaq 데이터 모델 - OVN | ✓ | ✓ |
loglevel Normalization | ✓ | ✓ |
JSON 구문 분석 | ✓ | ✓ |
구조화된 인덱스 | ✓ | ✓ |
다중 줄 오류 감지 | ✓ | ✓ |
multicontainer / split 인덱스 | ✓ | ✓ |
flatten 라벨 | ✓ | ✓ |
CLF 정적 레이블 | ✓ | ✓ |
기능 | fluentd | vector |
---|---|---|
fluentd readlinelimit | ✓ | |
fluentd 버퍼 | ✓ | |
- chunklimitsize | ✓ | |
- 총 제한 크기 | ✓ | |
- overflowaction | ✓ | |
- flushthreadcount | ✓ | |
- flushmode | ✓ | |
- flushinterval | ✓ | |
- retrywait | ✓ | |
- retrytype | ✓ | |
- retrymaxinterval | ✓ | |
- retrytimeout | ✓ |
기능 | fluentd | vector |
---|---|---|
지표 | ✓ | ✓ |
대시보드 | ✓ | ✓ |
경고 | ✓ | ✓ |
기능 | fluentd | vector |
---|---|---|
글로벌 프록시 지원 | ✓ | ✓ |
x86 지원 | ✓ | ✓ |
ARM 지원 | ✓ | ✓ |
PowerPC 지원 | ✓ | ✓ |
IBM Z 지원 | ✓ | ✓ |
IPv6 지원 | ✓ | ✓ |
로그 이벤트 버퍼링 | ✓ | |
연결이 끊긴 클러스터 | ✓ | ✓ |
9.1.1.4. 수집기 출력
다음 컬렉터 출력이 지원됩니다.
기능 | fluentd | vector |
---|---|---|
Elasticsearch v6-v8 | ✓ | ✓ |
fluent forward | ✓ | |
Syslog RFC3164 | ✓ | ECDHE (logging 5.7 이상) |
Syslog RFC5424 | ✓ | ECDHE (logging 5.7 이상) |
kafka | ✓ | ✓ |
서드니 | ✓ | ✓ |
<.> STS | ✓ | ✓ |
Loki | ✓ | ✓ |
HTTP | ✓ | ECDHE (logging 5.7 이상) |
Google 클라우드 로깅 | ✓ | ✓ |
Splunk | Cryostat (logging 5.6 이상) |
9.1.2. 로그 전송
관리자는 수집되는 로그, 변환 방법, 전달되는 위치를 지정하는 ClusterLogForwarder
리소스를 생성할 수 있습니다.
ClusterLogForwarder
리소스는 컨테이너, 인프라 및 감사 로그를 클러스터 내부 또는 외부의 특정 끝점으로 전달하는 데 사용할 수 있습니다. TLS(Transport Layer Security)가 지원되므로 로그를 안전하게 전송하도록 로그 전달자를 구성할 수 있습니다.
관리자는 어떤 유형의 로그에 액세스하고 전달할 수 있는 서비스 계정 및 사용자를 정의하는 RBAC 권한을 부여할 수도 있습니다.