ELK 스택을 이용한 웹 어플리케이션 모니터링 시스템
- Elasticsearch: 검색 엔진 및 NoSQL 데이터베이스
- Logstash: 로그 데이터 파이프라인
- Kibana: 데이터 시각화 인터페이스
- Django 프레임워크 사용
- Filebeat 사용하여 Logstash로 로그 데이터 전송
- PostgreSQL 12.7 (1GB RAM / 1 vCPU / 40GB SSD)
- Docker-Compose 로 ELK 스택을 한 인스턴스에 구성
- 각 컨테이너마다 메모리 1GB씩 할당
$> git clone https://github.com/miintto/elk-stack.git
$> cd elk-stack
$> tree
.
├── docker-compose.yml # Service 정의
├── elasticsearch # Elastirsearch
│ ├── Dockerfile
│ └── config
│ └── elasticsearch.yml
├── kibana # Kibana
│ ├── Dockerfile
│ └── config
│ └── kibana.yml
└── logstash # Logstash
├── Dockerfile
├── config
│ └── logstash.yml
└── pipeline
└── logstash.conf
- Docker: 20.10.7
- Docker-Compose: 2.2.3
.env
파일을 생성하여 설정할 환경 변수를 입력합니다.
$> cp .env.example .env
$> vim .env
ELK_VERSION=1.7.1
ELASTIC_USERNAME=elastic
ELASTIC_PASSWORD=....
설정한 환경 변수들이 제대로 세팅되었는지 확인합니다.
$> docker-compose config
networks:
elastic:
driver: bridge
services:
elasticsearch:
build:
...
$> docker-compose up -d
$> docker ps
CONTAINER ID IMAGE COMMAND CREATED ...
cde0ed296b44 elk-stack_logstash "/usr/local/bin/dock…" 30 minutes ago ...
d938664e87bc elk-stack_kibana "/bin/tini -- /usr/l…" 30 minutes ago ...
285ac83fbe91 elk-stack_elasticsearch "/bin/tini -- /usr/l…" 30 minutes ago ...
http://<서버 IP 혹은 host>:5601 로 접속하여 설정한 아이디와 비밀번호로 로그인할 수 있습니다.
Logstash 서버로 로그를 보내주는 filebeat는 간단히 다음과 같이 구성할 수 있습니다.
# filebeat.yml
filebeat.inputs:
- type: filestream
id: django-was-log
paths:
- /project/log/path/*.log
output.logstash:
hosts: [ '${LOGSTASH_HOST}:5044' ]