Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

올빼미공방

ElasticSearch로 웹 서비스 로그 분석 시스템 만들기 [2] - ELK + Filebeat module를 이용하여 내 로그를 분석하고 시각화하기 본문

개발/ElasticSearch

ElasticSearch로 웹 서비스 로그 분석 시스템 만들기 [2] - ELK + Filebeat module를 이용하여 내 로그를 분석하고 시각화하기

운좋은올빼미 2019. 7. 24. 11:00

ElasticSearch로 웹 서비스 로그 분석 시스템 만들기 [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!

 

Comments