본문 바로가기
문서 목차
ORKESTRIX설치

로그 집계 (Loki + Fluent-bit)

Fluent bit 이 각 노드의 컨테이너 로그와 시스템 로그(syslog)를 수집해, Loki (중앙 로그 저장소)로 전송하여 Grafana에서 검색·조회할 수 있게 합니다.

QUANTUM C&S

Fluent-bit이 각 노드의 컨테이너 로그와 시스템 로그(syslog)를 수집해, Loki(중앙 로그 저장소)로 전송하여 Grafana에서 검색 · 조회할 수 있게 합니다.

Fluent-bit은 동시에 여러 목적지로 로그를 보낼 수 있는 범용 수집기입니다 — 이 클러스터에서는 같은 로그를 Loki(이 문서)와 OpenSearch(별도 문서) 양쪽에 동시에 전송합니다.

설정값

inventory/qks/group_vars/all/all-k8s.yaml:

qks_loki_enabled: true
qks_loki_version: 7.3.0
qks_loki_namespace: qks-monitoring
qks_loki_storage_size: 50Gi

qks_fluent_bit_enabled: true
qks_fluent_bit_version: 0.47.10

실행

Loki를 먼저 설치한 뒤 Fluent-bit을 설치합니다(Fluent-bit이 Loki로 로그를 보내므로 순서상 자연스럽습니다):

./install.sh ubuntu plays/qks-loki.yaml
./install.sh ubuntu plays/qks-fluent-bit.yaml

설치 흐름

plays/qks-loki.yaml
  └─ Helm으로 Loki 배포 (저장소 역할, 내장 PVC로 로그 보관)

plays/qks-fluent-bit.yaml
  └─ Helm으로 Fluent-bit 배포 (전 노드 DaemonSet)
        - 컨테이너 로그(/var/log/containers/*) + 호스트 syslog 수집
        - 로그 종류별로 태그를 분류(app/access/audit/syslog 등)
        - 분류된 로그를 OpenSearch와 Loki 양쪽으로 동시 전송

설치 확인

kubectl get pods -n qks-monitoring | grep loki
kubectl get pods -n qks -o wide | grep fluent

Loki 파드가 Running, Fluent-bit 파드가 전체 노드 수만큼(DaemonSet) Running이어야 합니다.

실제 동작 확인

Loki에 실제로 로그가 들어오고 있는지 라벨 조회로 확인합니다:

LOKI_IP=$(kubectl get svc -n qks-monitoring qks-loki -o jsonpath='{.spec.clusterIP}')
curl -s "http://$LOKI_IP:3100/loki/api/v1/label/log_source/values"

syslog가 포함되어 있으면 최소한 호스트 로그는 정상 수집 중입니다.

실제 애플리케이션 로그까지 확인하려면, 테스트 파드로 직접 로그를 발생시켜 조회합니다:

kubectl create namespace ns-test
kubectl run log-test --image=busybox -n ns-test --restart=Never -- sh -c "while true; do echo 'HELLO_FROM_NS_TEST_POD'; sleep 5; done"

# Fluent-bit이 새 로그 파일을 인식할 때까지 1분 정도 대기
curl -s -G "http://$LOKI_IP:3100/loki/api/v1/query" --data-urlencode 'query={log_source="project"}'

HELLO_FROM_NS_TEST_POD 메시지가 조회되면 정상 동작하는 것입니다.

같은 로그가 OpenSearch에도 동시에 들어갔는지 확인합니다(OpenSearch 설치가 선행되어 있어야 합니다):

kubectl exec -n <qks_opensearch_namespace> qks-opensearch-0 -- \
  curl -s -k -u admin:<pass> "https://localhost:9200/project-log-*/_search?q=message:HELLO_FROM_NS_TEST_POD"

동일한 메시지가 조회되면 Loki · OpenSearch 양쪽 동시 전송이 모두 정상입니다. 확인 후 정리:

kubectl delete namespace ns-test

다음 단계