구성 요소 | 역할 설명 |
---|---|
Elasticsearch | 로그 데이터를 저장하고 검색할 수 있는 중앙 저장소 |
Kibana | Elasticsearch의 데이터를 시각화하는 웹 UI |
Logstash | 로그를 수신하고 가공한 후 Elasticsearch로 전달 |
Filebeat | 서버의 로그 파일을 수집해 Logstash로 전달 |
⛔ 종료 시에는 반대 순서로: Filebeat → Logstash → Kibana → Elasticsearch
# Elasticsearch 컨테이너 실행
docker run -d \
--name elasticsearch \
-p 9200:9200 \
-e discovery.type=single-node \
-e ELASTIC_PASSWORD=**** \
-e xpack.security.enabled=true \
-e xpack.security.authc.api_key.enabled=true \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-v esdata:/usr/share/elasticsearch/data \
docker.elastic.co/elasticsearch/elasticsearch:9.0.3
# 접속 주소: http://localhost:9200
# 기본 관리자 계정: elastic
# 비밀번호: ELASTIC_PASSWORD 설정
# 실행 모드: 단일 노드 (discovery.type=single-node)
# Kibana, Logstash, Filebeat 모두 이 주소로 연결됨
docker run -d \
--name kibana \
-p 5601:5601 \
-e ELASTICSEARCH_HOSTS=http://elasticsearch:9200 \
-e ELASTICSEARCH_USERNAME=kibana_system \
-e ELASTICSEARCH_PASSWORD=***** \
-e xpack.security.encryptionKey=**** \
-e xpack.encryptedSavedObjects.encryptionKey=**** \
-e xpack.reporting.encryptionKey=**** \
docker.elastic.co/kibana/kibana:9.0.3
docker run -d \
--name logstash \
-p 5044:5044 \
-e xpack.monitoring.elasticsearch.username=elastic \
-e xpack.monitoring.elasticsearch.password=**** \
-e xpack.monitoring.elasticsearch.hosts=http://elasticsearch:9200 \
docker.elastic.co/logstash/logstash:9.0.3
docker exec -it logstash /bin/bash
cd /usr/share/logstash/pipeline
vi logstash.conf
input {
beats {
port => 5044
}
}
filter {
json {
source => "message"
remove_field => ["message"]
tag_on_failure => ["_jsonparsefailure"]
}
}
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
user => "elastic"
password => "****"
index => "log-%{project}-%{+YYYY.MM.dd}"
}
stdout {
codec => rubydebug
}
}
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.18.3-amd64.deb
sudo dpkg -i filebeat-8.18.3-amd64.deb
cd /etc/filebeat
vi filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /path/to/your/logs/app.log
fields:
project: your-project-name
fields_under_root: true
output.logstash:
hosts: ["your-logstash-host:5044"]
sudo chown root:root filebeat.yml
sudo chmod 644 filebeat.yml
# 서비스 등록
sudo systemctl enable filebeat
# 시작
sudo systemctl start filebeat
# 시작
sudo systemctl stop filebeat
# 재시작
sudo systemctl restart filebeat
# 로깅
sudo journalctl -u filebeat -f