---
date: 2025-09-29
author: admin
tags: [fluent-bit, opensearch, logging, docker]
---

# Fluent Bit 컨테이너 메타데이터 수집 실패 문제

## 문제 상황
- **발생일**: 2025-09-27 12:22 재시작 이후
- **환경**: 51123 서버 Fluent Bit → Data Prepper → OpenSearch
- **증상**: 컨테이너 로그는 수집되나 container_name 필드 누락 (모두 "unknown")
- **영향**: 9/27 19:16 이후 대부분 컨테이너 로그 식별 불가

## 원인 분석
### 타임라인
- 9/27 12:22: Fluent Bit 컨테이너 재시작 (hostexecutor-fluent-bit 이미지)
- 9/27 19:16: 마지막 정상 rb8001 로그 수집
- 9/28: 전체 컨테이너 로그 수집 실패 (fluent-bit 자체 로그만)
- 9/29: 일부 복구되었으나 메타데이터 여전히 누락

### 근본 원인
```ini
# 현재 설정
[INPUT]
    Name              tail
    Path              /var/lib/docker/containers/*/*-json.log
    Parser            docker
    Docker_Mode       On  # 로그 본문 병합용, 메타데이터 추출과 무관
```
1. **메타데이터 추출 방법 부재**: tail 입력은 파일만 읽고 컨테이너 정보 추출 못함
2. **/var/run/docker.sock 미마운트**: Docker API 접근 불가
3. **Fluent Bit 4.0.9에 docker 필터 없음**: 'docker'라는 이름의 필터 플러그인 미존재

## 해결 방안

### 현재 상태 (해결됨)
- fluent-bit.conf:29 - 작동 안 하는 `[FILTER] Name docker` 존재
- docker-compose.yaml:13 - `/var/run/docker.sock` 마운트 있으나 활용 안 됨
- lua 스크립트 없음, Path_Key 설정 없음

### 필요한 수정사항

#### 1. fluent-bit.conf 수정
- 29-35번 라인 `[FILTER] Name docker` 섹션 제거 (v4.0.9에 없는 필터)
- INPUT 섹션에 `Path_Key filepath` 추가 (파일 경로를 레코드에 포함)
- lua 필터 추가 필요

#### 2. lua 스크립트 작성 (extract_container_id.lua)
- 경로에서 container_id 추출: `/var/lib/docker/containers/{id}/{id}-json.log`
- container_name 얻으려면:
  - 방법1: `/var/lib/docker/containers/{id}/config.v2.json` 파일 읽기
  - 방법2: docker.sock 마운트 유지하고 Docker API 호출

#### 3. docker-compose.yaml 수정
- lua 스크립트 마운트: `./extract_container_id.lua:/fluent-bit/etc/extract.lua:ro`
- docker.sock: container_name 필요 시 유지, ID만 필요하면 제거

### 3. Dockerfile 오류
- 13번 라인: `COPY certs/root.pem /fluent-bit/certs/root.pem`
- 문제: certs 디렉토리 없음
- 조치: 해당 라인 제거 또는 주석 처리 필요

## 검증 명령
```bash
# 컨테이너별 로그 확인
curl -s "http://localhost:9200/dataprepper-*/_search" | \
  python3 -c "import sys,json; [print(h['_source'].get('container_name','unknown')) for h in json.load(sys.stdin)['hits']['hits']]"
```

## 해결 완료 (2025-09-29)

### 수행된 조치
1. **data-prepper 설정 수정**
   - pipelines.yaml: `hosts: ["http://localhost:9200"]` → `hosts: ["http://192.168.219.45:9200"]`
   - 51123 서버의 OpenSearch에 정상 연결

2. **Actions orphan 문제 해결**
   - fluent-bit/.gitea/workflows/cicd.yml: `docker compose down --remove-orphans` 제거
   - opensearch/.gitea/workflows/cicd.yml: `docker compose down` 제거
   - network_mode: host 환경에서 다른 프로젝트 컨테이너 보존

### 최종 상태
- ✅ container_id 메타데이터 정상 추출
- ✅ fluent-bit → data-prepper(2021) → OpenSearch(9200) 파이프라인 정상 작동
- ✅ HTTP 200 OK 응답으로 로그 전송 확인
- ✅ OpenSearch에 container_name 필드 포함된 로그 저장

## 교훈
- Docker 이미지 내장 설정은 변경 추적 어려움
- 중요 설정은 외부 파일로 관리 필수
- Fluent Bit Docker_Mode는 FILTER와 함께 사용해야 함
- network_mode: host 사용 시 docker compose down --remove-orphans 주의
- Actions에서는 docker compose up -d --build만 사용하여 기존 컨테이너 보존