올빼미공방
ElasticSearch로 웹 서비스 로그 분석 시스템 만들기 [2] - ELK + Filebeat module를 이용하여 내 로그를 분석하고 시각화하기 본문
ElasticSearch로 웹 서비스 로그 분석 시스템 만들기 [2] - ELK + Filebeat module를 이용하여 내 로그를 분석하고 시각화하기
운좋은올빼미 2019. 7. 24. 11:00ElasticSearch로 웹 서비스 로그 분석 시스템 만들기 [2] -
ELK + Filebeat module를 이용하여 내 로그를 분석하고 시각화하기
1. 개요
지금부터, ELK stack + Filebeat module을 이용하여 Nginx 로그를 분석하고 Kibana를 이용하여 시각화 해 볼 것입니다.
Filebeat는 경량의 Shipper로 수집 대상 서버에 설치되어 Log파일 혹은 경로를 모니터링 하고, 이를 ES/logstash로 밀어주는 역할을 합니다.
이러한 Filebeat는 다양한 형식의 파일에 대응할 수 있도록 Module들이 개발되어 있습니다. 이를 이용하면 쉽고 간단하게 데이터를 수집하고, Parsing할 수 있습니다. 또한 데이터에 해당하는 Kibana Dashboard도 제공하기 때문에, 쉽고 빠른 시각화가 가능합니다.
Filebeat Module은 ES로 데이터를 Parsing하여 전달하기 위한 Ingest Pipeline을 제공합니다. 우리는 이 Pipeline에 Logstash를 중간 레이어로 추가하여 시스템을 구성할 것입니다. 이는 단순히 Filebeat -> ES로 데이터를 전달하는 것에 비해 신뢰성이 높습니다. ES와 도달이 불가능하거나, ES의 작동이 멈춘 경우에도 Logstash의 Persistent Queue기능을 활용해 최소 한번의 ES로의 데이터 전달을 수행 할 수 있기 때문입니다.
시스템의 전반적인 구조는 아래와 같습니다.
1. 외부에서 웹 서비스에 접근할 때 , Nginx는 미리 지정된 경로/파일에 log를 남기게 됩니다. Filebeat는 해당 경로/파일을 Tracking합니다.
2. 해당 경로/파일에 변경 사항이 발생할 경우(즉, log가 남겨질 경우) Filebeat Nginx Module은 Nginx log 형태에 맞게 Parsing 작업을 수행하고 이를 Logstash로 전달합니다.
3. Logstash는 Filebeat로 부터 받은 Parsing된 정보를 ES로 전달합니다. ES는 이를 인덱싱합니다.
4. Kibana Dashboard를 통해. 로그 정보가 담긴 인덱스를 이용한 시각화 자료를 손쉽게 확인할 수 있습니다.
2. Filebeat -> Elastic Search 연결하기
2.1 Kibana 설치하기
elasticsearch가 설치되어 있는 서버에서, 아래와 같은 커맨드를 입력합니다.
sudo apt-get install kibana
sudo nano /etc/kibana/kibana.yml
이후 server host를 아래와 같이 변경해 줍니다.
kibana를 실행합시다.(elasticsearch 또한 실행되고 있어야 합니다!)
sudo systemctl daemon-reload
sudo systemctl enable kibana
sudo systemctl start kibana
2.2 Filebeat 설치 & ES와 연동하기
Filebeat = > Logstash => Elasticsearch로 연동되는 파이프라인을 구축하기 위해서는, 우선 Filebeat과 ElasticSearch를 연동하여야 합니다.
우선 Nginx 웹서버에 Filebeat를 설치합시다.
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.2.0-amd64.deb
sudo dpkg -i filebeat-7.2.0-amd64.deb //filebeat과 ElasticSearch를 연결하기 위하여, filebeat의 yml파일을 수정합니다.
sudo nano /etc/filebeat/filebeat.yml
filebeat.yml의 output.elasticsearch와 setup.kibana 부분을 아래와 같게 변경합니다.
output.elasticsearch:
hosts: ["myEShost:9200"]
username: "filebeat_internal"
password: "YOUR_PASSWORD"
setup.kibana:
host: "mykibanahost:5601"
이때 password란에는 여러분의 ES 서버의 패스워드를 기입하시면 됩니다. 다만 이는 보안 문제가 있을 수 있기 때문에, 직접 패스워드를 기입하기보다 는 filebeat에서 제공하는 keystore을 활용하시길 바랍니다. myEShost, mykibanahost 에는 여러분 서버의 ip주소를 기입해주시면 됩니다.
이후, Filebeat Nginx 모듈을 활성화하고, 우리의 목적에 맞게 수정해 보겠습니다.
filebeat modules enable nginx sudo nano /etc/filebeat/modules.d/nginx.yml
yml파일 내부의 var.path를 각각 여러분의 access log / error log가 저장된 path에 맞게 수정해 주십시오.
띄워쓰기에 주의하셔서 진행해 주셔야 합니다.
이후 Module을 ES와 연결해보겠습니다.
filebeat setup -e
service filebeat start
Filebeat Module => ElasticSearch로의 연결이 잘 되었는지 확인하기 위하여, 우선 kibana를 로드합시다. Kibana Home화면으로 이동합시다.
이후 Logging란 하단에 위치한 "Add log data" 버튼을 클릭합니다.
"Nginx logs"를 클릭합시다.
Module Status단으로 이동하여, "Check Data"란을 클릭합시다. 아래와 같이 "Data successfully received from this module"이라는 메시지가 나온다면, 성공입니다.
3. Filebeat -> Logstash -> Elasticsearch 연결하기
3.1 Logstash 설치하기
logstash를 설치할 서버에서, 아래의 커맨드를 입력합니다.
sudo apt install openjdk-8-jre-headless
sudo apt-get update
sudo apt-get install logstash
3.2 Filebeat단의 설정하기
filebeat가 설치되어 있는 서버에서, Pipeline을 로드하기 위하여 아래의 커맨드를 입력합니다.
filebeat setup --pipelines --modules nginx
현재는 filebeat -> elasticsearch간의 연결이 확립되어 있는 상태입니다. 이를 filebeat -> logstash -> elasticsearch로 변경하기 위하여, 우선 filebeat -> logstash간의 연결을 수행합시다. 아래의 커맨드를 입력합니다.
sudo nano /etc/filebeat/filebeat.yml
filebeat.yml 내부의 내용을 다음과 같이 변경하여줍시다.
elasticsearch로의 output을 주석처리 하고, logstash로의 output을 활성화 해줍니다. 이때 host내부에는 여러분의 logstash 서버의 ip를 입력해주시면 됩니다.
이후 아래의 커맨드를 입력하여 filebeat를 실행합시다.
filebeat -e
이제 filebeat은 logstash로의 연결이 확립될때 까지 계속 연결을 시도하게 됩니다.
3.3 Logstash단의 설정하기
logstash의 configuration파일을 만들어 줍시다.
sudo nano /etc/logstash/conf.d/logstash.conf
이후 아래의 내용을 입력하여줍니다.
input {
beats {
port => 5044
}
}
output {
if [@metadata][pipeline] {
elasticsearch {
hosts => "myEShost:9200"
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
pipeline => "%{[@metadata][pipeline]}"
user => "elastic"
password => "secret"
}
} else {
elasticsearch {
hosts => "myEShost:9200"
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
user => "elastic"
password => "secret"
}
}
}
myEShost란에는 여러분의 ES 서버의 ip주소를 입력해주시면 됩니다. 또한 password => "secret"란중 "secret" 부분에는 ES 서버의 비밀번호를 입력해주십시오.
이후 logstash를 실행합시다.
cd /usr/share/logstash
bin/logstash -f /etc/logstash/conf.d/logstash.conf
이후 아까 Filebeat -> ES를 연결 여부를 확인했던 위치로 이동하여서,
Check Data를 눌러 Filebeat => Logstash => ES로의 연결이 확립되었는지 확인합시다!
자, 그러면 이제 Dashboard를 통해 시각화된 데이터를 확인해 볼까요?
아주 예쁘게 시각화되어진 DashBoard를 확인할 수 있습니다. YEAH!
'개발 > ElasticSearch' 카테고리의 다른 글
ElasticSearch로 웹 서비스 로그 분석 시스템 만들기 [3]- Event log를 분석하기 위한 ELK+ kafka 파이프라인 구축 (0) | 2019.08.22 |
---|---|
ElasticSearch로 웹 서비스 로그 분석 시스템 만들기 [1] - Concept, 설치하기 (0) | 2019.07.24 |