| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- React
- c
- 자바
- 위상 정렬
- 레나튜토리얼
- 트랜스포트 계층
- Practical Malware Analysis Labs
- 우테코
- 코리안챔버오케스트라
- SK쉴더스루키즈
- 루키즈 31기
- webhacking
- sk쉴더스 루키즈
- 애플리케이션 계층
- 프리코스
- 예술의 전당
- sk 쉴더스 루키즈
- 루키즈31기
- linux
- 알고리즘
- 악성코드 분석
- 우아한테크코스
- 백엔드
- Dreamhack
- 깃
- SK쉴더스
- 서울청년문화패스
- 진입차수
- 웹개발
- 프랑스어 #프랑스어배우기 #프랑스어독학 #델프인강 #시원스쿨프랑스어 #delf독학 #델프 #프랑스어기초 #프랑스어공부
- Today
- Total
yon11b
[SK 쉴더스 루키즈] 중앙집중형 로그 관리 환경 구축(Fluent-Bit, OpenSearch Dashboard) 본문
[SK 쉴더스 루키즈] 중앙집중형 로그 관리 환경 구축(Fluent-Bit, OpenSearch Dashboard)
yon11b 2026. 5. 9. 00:43이 글은 OWASP top 10 중 Logging & Alerting Failures에 대응하기 위한 중앙집중형 로그 관리 환경 구축 방법을 정리한 글입니다.
실습 개요
Docker 컨테이너랑 리눅스 시스템에서 나오는 로그를 Fluent Bit으로 빨아들여서 → OpenSearch라는 검색 엔진에 저장하고 → 웹 대시보드(Dashboards)에서 보는 파이프라인을 직접 구축해보는 실습
중앙집중형 로그 관리를 해야 하는 이유
여러 프로그램, 서버를 동시에 실행한다면, 각 파일에 직접 하나씩 들어가서 로그를 확인하는게 쉽지 않을 것이다.
그래서 중앙집중식 로그 수집 파이프라인을 구성해야 하는 것이다.
로그 → 수집, 가공(Fluent Bit) → 저장, 검색(opensearch) → 시각화(opensearch dashboard)

Fluent Bit
C언어로 만들어서 메모리 1MB만 쓰는 초경량 에이전트. 로그를 수집, 가공하여 목적지로 전달한다.
Fluent Bit의 핵심 철학: INPUT → FILTER → OUTPUT
- INPUT: 어디서 로그를 가져올지 (파일 읽기, 네트워크로 받기)
- FILTER: 가공 (필드 추가/삭제/변환)
- OUTPUT: 어디로 보낼지 (OpenSearch, S3, Kafka 등)
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ INPUT │───▶│ FILTER │───▶│ OUTPUT │
│ (수집) │ │ (가공/추가 │ │ (전달) │
└─────────────┘ └─────────────┘ └─────────────┘
- tail - record_modifier - opensearch (단기저장소)
- syslog - grep - kafka (파이프라인)
- cpu - lua - s3 (장기저장소)
태그
로그 레코드에 붙는 라벨. INPUT에서 로그를 받자마자 즉시 붙는다.
- 어떤 input에서 들어온 로그인지 구분
- 어떤 filter, output을 적용할지 결정하는 기준이 됨
docker.* 태그 → Docker 로그 INPUT에서 생성
syslog.* 태그 → Syslog INPUT에서 생성
FILTER Match docker.* → docker.* 태그가 붙은 로그만 처리
OUTPUT Match syslog.* → syslog.* 태그가 붙은 로그만 OpenSearch로 전송
OpenSearch
인덱스 = 테이블, 문서 = 행, 필드 = 열
날짜별로 인덱스 자동 생성: docker-logs-2026.05.04
OpenSearch Dashboards
웹 UI. 로그 검색하고 차트 그리는 곳
Fluent-Bit 만들기
[INPUT] 어떤 파일들을 가져올 것인가? => docker log, syslog
[INPUT]
Name tail
Tag docker.*
Path /var/lib/docker/containers/*/*.log
Parser docker
DB /fluent-bit/db/docker.db
Mem_Buf_Limit 50MB
Skip_Long_Lines On
Refresh_Interval 10
[INPUT]
Name tail
Tag syslog.*
Path /var/log/syslog
Parser syslog-ubuntu
DB /fluent-bit/db/syslog.db
Mem_Buf_Limit 5MB
Skip_Long_Lines On
Refresh_Interval 10
[FILTER] 특정 tag 이름을 가진 것들만 match해서 필터링하기
[FILTER]
Name record_modifier
Match docker.*
Record log_source docker
Record collector_host ${HOSTNAME}
[FILTER]
Name record_modifier
Match syslog.*
Record log_source syslog
Record collector_host ${HOSTNAME}
[OUTPUT] OpenSearch로 전송
[OUTPUT]
Name opensearch
Match docker.*
Host opensearch-node1
Port 9200
HTTP_User admin
HTTP_Passwd ${OPENSEARCH_INITIAL_ADMIN_PASSWORD}
tls On
tls.verify Off
Logstash_Format On
Logstash_Prefix docker-logs
Logstash_DateFormat %Y.%m.%d
Suppress_Type_Name On
Include_Tag_Key On
Tag_Key flb_tag
[OUTPUT]
Name opensearch
Match syslog.*
Host opensearch-node1
Port 9200
HTTP_User admin
HTTP_Passwd ${OPENSEARCH_INITIAL_ADMIN_PASSWORD}
tls On
tls.verify Off
Logstash_Format On
Logstash_Prefix syslog-logs
Logstash_DateFormat %Y.%m.%d
Suppress_Type_Name On
Include_Tag_Key On
Tag_Key flb_tag
parser
filter 적용 전에 parser를 먼저 적용한다.
- docker 로그
json.log 파일 안의 내용
{"log":"GET /api/cars 200\\n","stream":"stdout","time":"2026-05-04T01:00:00.123456789Z"} - parser 적용
[PARSER] Name docker Format json Time_Key time Time_Format %Y-%m-%dT%H:%M:%S.%L Time_Keep On
{ "@timestamp": "2026-05-04T01:00:00.123Z", "log": "GET /api/cars 200\\n", "stream": "stdout", "time": "2026-05-04T01:00:00.123456789Z" } - filter 적용 후
[FILTER] Name record_modifier Match docker.* Record log_source docker Record collector_host ${HOSTNAME}
{ "@timestamp": "2026-05-04T01:00:00.123Z", "log": "GET /api/cars 200\\n", "stream": "stdout", "time": "2026-05-04T01:00:00.123456789Z", "log_source": "docker", "collector_host": "89f1b18a65d2" }
동작 확인- opensearch dasahboard에서 시각화
검색하려면 패턴을 만들어야 한다.
1. docker-logs-*
2. sys-logs-*



Discover에 들어가면 이제 확인할 수 있다.
docker logs

syslog-logs

검색도 된다 영어는 간단한 형태소 분석도 된다..

visualizations: 시각화 해서 차트로 보기(파이 차트)


discover → docker-logs → collector_host → flb_tag


discover → docker-logs → flb_tag→ flb_tag


'보안 > SK 쉴더스 루키즈' 카테고리의 다른 글
| [SK 쉴더스 루키즈] 딥러닝 모델 CNN, RNN (0) | 2026.05.11 |
|---|---|
| [SK 쉴더스 루키즈] 리눅스/윈도우 서버에서 자동 진단 수행하기 (0) | 2026.05.09 |
| [SK 쉴더스 루키즈] notepad++ 무결성 검증하기 (0) | 2026.05.09 |
| [SK 쉴더스 루키즈] Authentication Failures - 비밀번호 brute forcing 공격 실습 (0) | 2026.05.08 |
| [SK 쉴더스 루키즈] CSRF 실습(NodeGoat, bWAPP) (0) | 2026.05.08 |
