--- 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.0.100: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만 사용하여 기존 컨테이너 보존