Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- docker
- elasticsearch
- 티스토리챌린지
- 논리삭제
- 물리삭제
- AWS
- grafana
- 오블완
- 로그 백업
- Django
- Locust
- DAG
- slack
- hard delete
- redis
- logstash
- aws ec2
- NoSQL
- prometheus
- hive
- node exporter
- soft delete
- ci/cd
- JWT
- nginx
- unique constraint
- Airflow
- Hadoop
- 계정 관리
- Next.js
Archives
- Today
- Total
먹수의 개발일지
로그 파일 Logstash + ElasticSearch와 연동 (Docker) 본문
Logstash → ElasticSearch 데이터 플로우
- 로그 파일 생성:
- 애플리케이션(Nginx, Django 등)이 로그 파일을 생성한다.
- 예: service.log 파일에 JSON 형식으로 로그가 기록됨.
- Logstash 입력 단계 (Input):
- Logstash가 로그 파일을 모니터링한다.
- 로그 파일이 업데이트되면 데이터를 읽어온다.
- Input Plugin: file, tcp, http 등 다양한 입력 소스를 지원한다.
- Logstash 필터링 단계 (Filter):
- 읽어온 데이터를 정제하고 가공한다.
- 예: 로그에서 불필요한 필드를 제거하거나, 새로운 필드를 추가한다.
- Filter Plugin: grok, mutate, date 등을 사용해 데이터 처리.
- Logstash 출력 단계 (Output):
- 처리된 데이터를 ElasticSearch로 전달한다.
- Output Plugin: elasticsearch, file, stdout 등 지원.
- ElasticSearch 저장:
- Logstash가 전달한 데이터를 ElasticSearch에 저장한다.
- 데이터는 **인덱스(Index)**에 저장되며, 검색과 분석에 사용된다.
- 검색 및 시각화:
- 사용자는 ElasticSearch API 또는 Kibana를 통해 데이터를 검색하고 분석한다.
- 예: 특정 시간 범위의 에러 로그를 검색하거나 응답 시간 통계를 확인.
Logstash가 로그 파일을 감지하는 원리
Logstash Input Plugin (file)
- Logstash의 file 입력 플러그인은 지정된 로그 파일을 지속적으로 모니터링한다.
- 새로운 로그가 추가되면 해당 내용을 읽어서 처리한다.
- 로그 파일의 읽은 위치를 **"시작 포인터 (sincedb)"**에 저장해, 로그 파일을 다시 읽는 일이 없도록 관리한다.
ElasticSearch 설치 및 실행
#network 생성
docker network create elastic
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.16.0
docker run -d --name elasticsearch --net elastic \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
docker.elastic.co/elasticsearch/elasticsearch:8.16.0
응답 결과
LogStash 설치 및 실행
docker pull docker.elastic.co/logstash/logstash:8.16.0
원하는 경로에 logstash.conf 설정 파일을 생성 및 작성한다.
input {
file {
path => "/d/projects/example/src/logs/service.log.*" # 날짜별 로그 파일 경로 (와일드카드 사용)
start_position => "beginning" # 처음부터 읽기
sincedb_path => "/dev/null" # 중복 읽기 방지 비활성화
codec => json # JSON 로그를 자동으로 파싱
}
}
filter {
# "timestamp" 필드를 Logstash의 @timestamp 필드로 변환
date {
match => ["timestamp", "ISO8601"]
target => "@timestamp"
}
}
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"] # ElasticSearch 주소
index => "service-logs-%{+YYYY.MM.dd}" # 날짜별 인덱스 생성
}
stdout {
codec => rubydebug # 디버깅용 출력
}
}
Logstash.conf 분석
- 파일 경로 설정:
- path => "/d/projects/example/src/logs/service.log.*":
- 날짜별 로그 파일을 지정하기 위해 와일드카드(*) 사용
- 여러 날짜 로그 파일을 처리 가능.
- path => "/d/projects/example/src/logs/service.log.*":
- 필터:
- date 필터는 로그 내부의 "timestamp" 필드를 읽어 @timestamp로 변환.
- ElasticSearch는 기본적으로 @timestamp를 기준으로 데이터를 처리한다.
- 출력 (output):
- index => "service-logs-%{+YYYY.MM.dd}":
- 로그의 @timestamp 기준으로 날짜별 인덱스 생성.
- 예: 2024년 11월 18일 로그는 service-logs-2024.11.18이라는 인덱스로 저장.
- index => "service-logs-%{+YYYY.MM.dd}":
Logstash 실행하기
- -v /d/projects/study/logstash_config:/usr/share/logstash/config : 설정 파일을 컨테이너 내부로 마운트.
- -v /d/projects/example/src/logs:/usr/share/logstash/logs: 로그 파일을 마운트.
docker run -d --name logstash --net elastic \
-v /d/projects/study/logstash_config:/usr/share/logstash/config \
-v /d/projects/example/src/logs:/usr/share/logstash/logs \
docker.elastic.co/logstash/logstash:8.16.0
ElasticSearch 인덱스로 로그 조회 확인 방법
curl -X GET http://localhost:9200/service-logs-2024.11.18/_search?pretty
'back-end > Monitoring' 카테고리의 다른 글
[Crontab] log backup to S3 (1) | 2024.11.14 |
---|---|
[tcpdump] 네트워크 패킷 캡쳐하기 (0) | 2024.11.13 |
Docker Kafka 토픽 생성, 메시지 Producer 및 Consumer (0) | 2024.11.11 |
Django Prometheus + Grafana + Node exporter (0) | 2024.11.08 |
Comments