192.168.219.45 → 192.168.0.100 일괄 변경 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
3.8 KiB
3.8 KiB
date, author, tags
| date | author | tags | ||||
|---|---|---|---|---|---|---|
| 2025-09-29 | admin |
|
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: 일부 복구되었으나 메타데이터 여전히 누락
근본 원인
# 현재 설정
[INPUT]
Name tail
Path /var/lib/docker/containers/*/*-json.log
Parser docker
Docker_Mode On # 로그 본문 병합용, 메타데이터 추출과 무관
- 메타데이터 추출 방법 부재: tail 입력은 파일만 읽고 컨테이너 정보 추출 못함
- /var/run/docker.sock 미마운트: Docker API 접근 불가
- 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 호출
- 방법1:
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 디렉토리 없음
- 조치: 해당 라인 제거 또는 주석 처리 필요
검증 명령
# 컨테이너별 로그 확인
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)
수행된 조치
-
data-prepper 설정 수정
- pipelines.yaml:
hosts: ["http://localhost:9200"]→hosts: ["http://192.168.0.100:9200"] - 51123 서버의 OpenSearch에 정상 연결
- pipelines.yaml:
-
Actions orphan 문제 해결
- fluent-bit/.gitea/workflows/cicd.yml:
docker compose down --remove-orphans제거 - opensearch/.gitea/workflows/cicd.yml:
docker compose down제거 - network_mode: host 환경에서 다른 프로젝트 컨테이너 보존
- fluent-bit/.gitea/workflows/cicd.yml:
최종 상태
- ✅ 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만 사용하여 기존 컨테이너 보존