반응형
1. ELK 스택 개념
- beats
- 일종의 에이전트 역할로서 로그를 수집하고자 하는 서버에 설치
- 단순히 로그를 수집해서 output(전송)하는 역할
- logstash
- ELK 서버 또는 클러스터에 설치
- beats로 부터 수신한 로그를 관리자가 원하는 형태로 재가공해서 es로 전송하는 역할
- elasticsearch
- ELK 서버 또는 클러스터에 설치
- 대용량의 로그를 저장하고 검색하는 역할
- kibana
- ELK 서버 또는 클러스터에 설치
- 수집한 로그를 다양하게 시각화해서 대시보드로 보여주는 역할
2. 구성도
3. ELK 스택 구축
3.1. ELK 인스턴스 생성
- OS : Ubuntu 20.04 LTS 64bit x86
- type : ELK가 메모리를 많이 요구하기 때문에 최소 t2.medium 이상
3.2. Elasticsearch 설치
# java 설치
sudo apt-get update
sudo apt install openjdk-11-jdk
# 설치
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
sudo apt-get install apt-transport-https
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install elasticsearch
# 메모리 수정
sudo vi /etc/elasticsearch/jvm.options
-Xms256m
-Xmx256m
# 설정 수정
vi /etc/elasticsearch/elasticsearch.yml
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["127.0.0.1"]
cluster.initial_master_nodes: ["node-1"]
# 서비스 등록 및 시작
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
curl -X GET "localhost:9200"
# 상태 확인
curl localhost:9200/_cat/indices?v
curl -X GET localhost:9200/_cat/health?v
curl -X GET localhost:9200/_cat/nodes?v
3.3. Kibana 설치
# 설치
sudo apt-get update && sudo apt-get install kibana
# 설정 변경
vi /etc/kibana/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://[es_ip]:9200"]
# 서비스 등록 및 시작
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable kibana.service
sudo systemctl start kibana.service
3.4. Logstash 설치
# 설치
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install logstash
# 설정
vi /etc/logstash/conf.d/logstash.conf
input {
beats {
port => 5044
host => "0.0.0.0"
}
}
filter {
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}
# 서비스 등록 및 시작
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable logstash.service
sudo systemctl start logstash.service
# 상태 확인
tail -f /var/log/logstash/logstash-plain.log
3.5. 모니터링 대상 인스턴스에 Filebeat 설치
# 설치
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.8-amd64.deb
sudo dpkg -i filebeat-7.17.8-amd64.deb
# 설정 변경
vi /etc/filebeat/filebeat.yml
- type: log
id: test_log
enabled: true
paths:
- /var/log/*.log
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: true
setup.dashboards.enabled: true
setup.kibana:
host: "[kibana_ip]:5601"
output.logstash:
hosts: ["es_ip:5044"]
# 모듈 설정
filebeat modules list
filebeat modules enable [모듈]
# 서비스 등록 및 시작
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable filebeat.service
sudo systemctl start filebeat.service
Colored by Color Scripter
4. Elasticsearch / Kibana 인증 설정
# 서비스 중지
sudo systemctl stop elasticsearch.service
sudo systemctl stop kibana.service
sudo systemctl stop logstash.service
# es 설정 추가
sudo vi /etc/elasticsearch/elasticsearch.yml
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
# es 서비스 실행
sudo systemctl start elasticsearch.service
# 패스워드 설정
sudo /usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
# kibana 설정 수정
sudo vi /etc/kibana/kibana.yml
elasticsearch.username: "elastic"
elasticsearch.password: "설정한 패스워드"
# kibana 서비스 실행
sudo systemctl start kibana.service
# logstash 설정 추가
sudo vi /etc/logstash/conf.d/logstash.conf
output {
elasticsearch {
user => "elastic"
password => "설정한 패스워드"
}
}
# logstash 서비스 실행
sudo systemctl start logstash.service
5. AWS SG 설정
- ELK 인스턴스 SG에 다음의 인바운드 규칙 추가
- src : 모니터링 대상 인스턴스 또는 any / port : 5044 / proto : tcp
- src : kibana 접근을 허용하고자 하는 IP / port : 5601 / proto : tcp
- src : es 접근을 허용하고자 하는 IP 또는 any / port : 9200 / proto : tcp
6. ELK 동작 확인
- "ELK 인스턴스 공인IP:5601" 접속 후 id : elastic / pass : 설정한 비밀번호 입력
- 왼쪽 메뉴 → Discover 클릭
7. 참고
- https://www.elastic.co/guide/en/elastic-stack/7.17/installing-elastic-stack.html
- https://liveyourit.tistory.com/46
- https://www.skyer9.pe.kr/wordpress/?p=158
- https://potato-yong.tistory.com/142
- https://information-security-vlog.tistory.com/24
- https://soyoung-new-challenge.tistory.com/56
- https://soyoung-new-challenge.tistory.com/99
- https://brtech.tistory.com/148
반응형
'etc' 카테고리의 다른 글
C-TAS에서 위협 IP를 자동으로 수집해 슬랙으로 전송하기 - (0) 계기 (0) | 2023.04.21 |
---|---|
Windows10 WSL2 환경에 minikube 구축하기 (0) | 2023.03.16 |
Certified Kubernetes Administrator(CKA) 자격증 취득 후기(22.12. 시험) (0) | 2023.03.16 |
WSL2 설치 (0) | 2023.03.16 |
CPPG 2주 독학 합격 후기 (18) | 2014.05.10 |