- docker-compose.yaml에 data-prepper 서비스 추가 내용 반영 - 파일 구조, 배포 명령, 검증 절차 추가 - 상태: 미해결 → 해결 완료 (배포 대기) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
6.6 KiB
6.6 KiB
Fluent Bit와 OpenSearch 3.2.0 연동 문제 해결 - Data Prepper 브릿지 구축
문제 상황
- 발생일: 2025-09-18
- 환경: 24서버(Fluent Bit) → 23서버(OpenSearch 3.2.0)
- 증상: Fluent Bit이 OpenSearch로 로그 전송 실패
- 근본 원인: 모든 Fluent Bit 버전이
_type파라미터를 전송하나, OpenSearch 3.x는 이를 거부
오류 상세
1. OpenSearch 플러그인 오류
[error] [output:opensearch:opensearch.0] HTTP status=400 URI=/_bulk, response:
{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"Action/metadata line [1] contains an unknown parameter [_type]"}]},"status":400}
2. ES 플러그인 오류
[error] [output:es:es.0] HTTP status=400 URI=/_bulk, response:
{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"Action/metadata line [1] contains an unknown parameter [_type]"}]},"status":400}
테스트 내역
Fluent Bit 버전별 테스트 결과
| 버전 | opensearch 플러그인 | es 플러그인 | 결과 |
|---|---|---|---|
| 4.0.9 | _type 에러 |
에러 없지만 전송 안됨 | ❌ |
| 3.2.2 | _type 에러 |
에러 없지만 전송 안됨 | ❌ |
| 2.2.2 | _type 에러 |
_type 에러 |
❌ |
시도한 설정 조합
Suppress_Type_Name On- 무시됨Type _doc- 무시됨Logstash_Format On/Off- 동일한 문제Workers 1- 동일한 문제
다른 도구 테스트
- Filebeat 8.x: 라이센스 체크 실패 (OpenSearch와 비호환)
- Filebeat 7.x: 버전 호환성 문제
- Vector: 설정은 되나 데이터 수집 실패
해결 방법: Data Prepper 브릿지 구축
아키텍처
Fluent Bit (24서버) → HTTP → Data Prepper (24서버) → OpenSearch (23서버)
1. Data Prepper 설치 및 설정
pipelines.yaml
log-pipeline:
source:
http:
port: 2021
path: "/"
health_check_service: true
ssl: false
processor:
- parse_json:
source: "message"
destination: "@message"
sink:
- opensearch:
hosts: ["http://192.168.219.45:9200"]
index: "dataprepper-%{yyyy.MM.dd}"
document_type: "_doc"
data-prepper-config.yaml (필요 시)
# 기본 설정 파일 (비어있어도 파일은 필요)
Docker 실행
docker run -d --name data-prepper \
--network host \
--restart unless-stopped \
-v /home/admin/ivada_project/fluent-bit/data-prepper/pipelines.yaml:/usr/share/data-prepper/pipelines/pipelines.yaml:ro \
-v /home/admin/ivada_project/fluent-bit/data-prepper/data-prepper-config.yaml:/usr/share/data-prepper/config/data-prepper-config.yaml:ro \
opensearchproject/data-prepper:2.4.0
2. Fluent Bit 설정 변경
fluent-bit.conf (OUTPUT 섹션)
[OUTPUT]
Name http
Match *
Host 127.0.0.1
Port 2021
URI /
Format json
Json_date_key timestamp
Json_date_format iso8601
3. Fluent Bit 재시작
docker restart fluent-bit
검증 결과
- 인덱스 생성:
dataprepper-2025.09.17,dataprepper-2025.09.18✅ - 문서 수집: 4,000+ 문서 성공적으로 저장 ✅
- 실시간 로그: 모든 Docker 컨테이너 로그 수집 중 ✅
- 안정성: 지속적으로 HTTP 200 응답, 안정적 운영 중
핵심 문제 분석
근본 원인
- Elasticsearch 7.x 이후 변경사항:
_type파라미터가 deprecated되고 제거됨 - OpenSearch 3.x 엄격한 검증:
_type파라미터를 완전히 거부 - Fluent Bit 하위 호환성: 레거시 Elasticsearch를 위해 계속
_type전송
왜 설정이 무시되는가?
- Fluent Bit의 opensearch/es 플러그인이 하드코딩된
_type필드를 전송 Suppress_Type_Name,Type등의 설정이 실제로 적용되지 않음- 이는 Fluent Bit의 알려진 이슈이며, 최신 버전에서도 미해결
교훈
- 버전 호환성 확인 필수: OpenSearch/Elasticsearch 메이저 버전 변경 시 클라이언트 호환성 검증
- 브릿지 패턴 활용: 직접 연결이 어려울 때 중간 브릿지(Data Prepper) 사용
- 공식 도구 우선: OpenSearch는 Data Prepper, Elasticsearch는 Logstash 사용 권장
대안 솔루션
- OpenSearch 2.x 사용:
_type파라미터 허용 (다운그레이드) - Logstash 사용: Elasticsearch 출력 플러그인으로 OpenSearch 연결
- 커스텀 HTTP 포워더: 간단한 Python/Node.js 스크립트로
_type제거
참고 명령어
Data Prepper 헬스체크
curl -s http://localhost:2021/health
OpenSearch 인덱스 확인
curl -s "http://192.168.219.45:9200/_cat/indices?v" | grep dataprepper
문서 수 확인
curl -s "http://192.168.219.45:9200/dataprepper-*/_count"
구현 현황 (2025-09-18 업데이트)
Git 리포지토리 구조
- fluent-bit 리포지토리: Data Prepper 설정 포함
/data-prepper/pipelines.yaml: 파이프라인 설정/data-prepper/data-prepper-config.yaml: 기본 설정/data-prepper/README.md: 실행 가이드
현재 운영 상태
- Data Prepper: 51124 서버에서 독립 컨테이너로 실행 중
- Fluent Bit: Git Actions로 자동 배포 (Data Prepper는 수동 관리)
- 로그 수집: 정상 작동, OpenSearch에 지속적으로 전송 중
향후 개선 사항
- Git Actions에 Data Prepper 자동 배포 추가 고려
- 51124 서버 전용 배포 스크립트 작성 필요
현재 상태 (2025-09-27)
51123 Data Prepper 배포 완료
- 문제: 51123 Fluent Bit이 127.0.0.1:2021로 전송 시도하나 Data Prepper 미실행
- 해결: docker-compose.yaml에 data-prepper 서비스 추가
파일 구조
fluent-bit/
├── docker-compose.yaml # fluent-bit + data-prepper 서비스
├── data-prepper/
│ ├── pipelines.yaml # port: 2021, hosts: ["http://localhost:9200"]
│ ├── data-prepper-config.yaml # ssl: false
│ └── README.md # 배포 가이드
└── fluent-bit.conf # OUTPUT: 127.0.0.1:2021
배포 명령 (51123)
cd /home/admin/fluent-bit
docker compose up -d data-prepper
검증
# 헬스체크
curl http://localhost:2021/health
# 인덱스 확인
curl "http://localhost:9200/_cat/indices?v" | grep dataprepper
- 상태: 해결 완료 - docker-compose.yaml에 data-prepper 서비스 정의 완료, 배포 대기
작성자: happybell80 작성일: 2025-09-18 최종 수정: 2025-09-27 - 51123 Data Prepper 배포 설정 완료