개요
최근 운영 중인 리눅스 서버들을 모니터링 하기 위해서 Prometheus와 Grafana를 통해 각 서버들의 메트릭을 수집하고 시각화를 해봤었다.
(Prometheus의 node-exporter로 서버 모니터링하기)
이번에는 각 서버들의 로그 수집을 위해 Elastic Stack(elastic search + logstash + kibana) + Filebeat로 로그 관리 시스템을 구축해보려고 한다.
로그 서버를 구축하는 이유는 다음과 같다.
- 각 서버들로부터 수집한 로그를 분석해 서버에 오류나 문제가 발생한 것이 있는지
- 더 견고한 운영 환경을 만들기 위해
ELK Stack ?
- Elasticsearch: JSON 기반의 분산현 오픈소스 검색 및 분석 엔진. 주로 REST API를 통해 처리함.
- Logstash: 여러 소스에서 동시에 데이터를 수집하여 변환하고, Elasticsearch와 같은 "stash"로 전송하는 서버사이드 데이터 처리 파이프라인을 의미함.
- Kibana: Elasticsearch에서 색인된 데이터를 검색하여 시각화하며, 막대 차트, 원형 차트, 표, 히스토그램, 지도 등을 생성하여 데이터를 분석할 수 있도록 해줌.
- Filebeat
- 경량화된 설계로 작동. 시스템 자원을 적게 사용하여 데이터를 수집하므로 성능상의 이점 존재
- 수집한 로그 데이터를 Elasticsearch 또는 Logstash와 같은 저장소로 실시간 전송함.
- 중앙 집중화된 로그 시스템에서 로그 데이터를 효과적으로 처리할 수 있는 장점이 있음
시스템 아키텍처
아키텍처 구조는 다음과 같다.
- 로그 파일들을 Filebeat에서 읽어와 logstash로 전송
- logstash는 수집한 로그를 필터링해 Elasticsearch로 전송
- kibana에서 이를 시각화 처리
1. Docker로 ELK 띄우기
소스코드 clone
아래 명령을 실행해 해당 레포지토리를 clone 해주자.
git clone https://github.com/deviantony/docker-elk
이제 현재 경로에 docker-elk
라는 디렉토리가 생성 되었을거다. 해당 경로로 이동해주자.
cd docker-elk
1-1. 환경변수 설정
.env
파일을 열어서
ELASTIC_PASSWORD
LOGSTASH_INTERNAL_PASSWORD
KIBANA_SYSTEM_PASSWORD
위 환경 변수의 값을 수정해주자.(초기값: changeme
)
1-2. Elasticsearch 설정 업데이트
elasticsearch/config/elasticsearch.yml
파일을 아래와 같이 수정
---
cluster.name: docker-cluster
network.host: 0.0.0.0
xpack.security.enabled: false
1-3. Kibana 설정 업데이트
kibana/config/kibana.yml
파일의 33번째줄부터 마지막 줄(xpack
관련) 모두 삭제 또는 주석
1-4. Logstash 설정 업데이트
logstash/pipeline/logstash.conf
파일을 아래와 같이 수정
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => "http://elasticsearch:9200"
user => "elastic"
password => "${LOGSTASH_INTERNAL_PASSWORD}"
index => "logstash-%{+YYYY.MM.dd}"
}
}
1-5. 컨테이너 실행
docker-compose up -d --build
docker-compose up setup
2. Filebeat 설정
2-1. 설치
- debian 계열 기준
- https://www.elastic.co/kr/downloads/beats/filebeat
1. Download and install the Public Signing Key
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
2. You may need to install the apt-transport-https
package on Debian before proceeding
sudo apt-get install apt-transport-https
3. Save the repository definition to /etc/apt/sources.list.d/elastic-8.x.list
echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list
4. Run apt-get update
, and the repository is ready for use. For example, you can install Filebeat by running
sudo apt-get update && sudo apt-get install filebeat
5. To configure Filebeat to start automatically during boot, run
sudo systemctl enable filebeat
2-2. 설정 업데이트
/etc/filebeat/filebeat.yml
파일을 아래와 같이 수정
filebeat.inputs:
- type: log
paths:
- {각자 환경에 맞는 로그 경로}/*.log
output.logstash:
hosts: ["<logstash 서버 IP>:5044"]
2-3. filebeat 실행
sudo filebeat -e -c /etc/filebeat/filebeat.yml -d "publish"
3. 로그 확인
3-1. kibana 접속
http://<kibana_서버IP>:5601
접속
3-2. index 설정
Management -> Stack Management 접속
kibana -> Data view 접속
Create data view 설정
위에서 설정
1-4 Logstash 설정 업데이트에서 설정했던 것처럼 logstash-날짜형식
으로 데이터가 잡히고 있음.
해당 인덱스가 잡히도록 패턴을 logstash-*
으로 설정해주었음.
3-3. 로그 확인하기
Analytics의 Discover 접속
날짜 등의 필터를 걸어서 로그를 확인할 수 있게 되었다!