ELK 스택/Filebeat+ELK

[Filebeat+ELK 7.5] 로그 모니터링 서버 구축 (설치부터 설정까지)

new_challenge 2019. 12. 30. 22:41
반응형

[Filebeat+ELK] 첫 번째 로그 모니터링 서버 구축기

01. 설치부터 설정까지

 

 

 

 

 

"실시간으로 쌓이는 로그를 통해 미쳐 발견하지 못했던 문제점 혹은 오류를 발견하고, 

의미 있는 새로운 데이터를 발견하기 위해 로그를 모니터링하는 시스템을 구축하기 위함"

 

 

 

모니터링 서버 구성도

** 위 구성도를 기반으로 잡고, 엘라스틱 서버 구축. 성능 향상을 위해 서버가 새로 필요할 경우, Data Node를 더 추가하는 방식으로 진행함.

 

** 처음에는 6.8 버전으로 설치 후 현재 7.5 버전으로 모두 재설치 완료. 아래 포스팅은 7.5 버전으로 설치 진행

 

** ELK 스택으로 모니터링 서버를 구축한다면, 공식문서를 보고 튜토리얼에 따라가는 것을 가장 추천함

 

 

 

 

Filebeat 설치 및 설정

파일 비트는 로그를 수집하는 서버에 설치 (로그를 로그스테이시로 보내기 위함)

// Step 1: 파일비트 설치

$ curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.5.1-amd64.deb

$ sudo dpkg -i filebeat-7.5.1-amd64.deb

 

- Directory 구조 (Debian 설치 기준)

 

Directory 구조

 

// Step 2: 파일비트 설정 (Filebeat.yml 설정 파일) 

Filebeat input 설정

- 수집할 로그의 위치 지정 

filebeat.input:
- type: log
  enabled: true
  path: [로그가 수집되는 경로입력1]

#Multiple log를 수집하는 경우, 아래와 같이 추가로 입력해주면된다
- type: log
  enabled: true
  path: [로그가 수집되는 경로입력2]

 

Filebeat module 설정

- 기본 모듈을 사용하려는 경우 아래 설정 필요

- $ vi /etc/filebeat/filebeat.yml 에 아래와 같이 모듈을 사용할 수 있게 설정되어 있는지 확인

filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: true

 

Filebeat output 설정

- Logstash로 로그를 보내서 필터링을 해야하기 때문에 출력은 Logstash로 지정

output.logstash:
	host: [logstash가 설치된 서버의 ip:5044]

 

Filebeat dashboard 설정

- 자동으로 기본 Dashboard를 사용할 경우

setup.dashboards.enabled: true

#Filebeat와 함께 제공된 샘플 Kibana 대시보듣를 사용할 경우
setup.kibana:
  host: [kibana가 설치된 서버의 IP:5601]

 

// Step 3: 파일비트 설정 (Command에서 실행)

Filebeat의 모듈 설정

- Nginx를 사용하여 로그를 수집하는 경우

#현재 설정된 파일비트 modules 리스트 확인
$ filebeat modules list

#추가로 사용할 모듈 설정변경
$ filebeat modules enable system nginx

 

Filebeat 초기화 설정

- 여기서 -e는 디버깅 모드를 의미함

filebeat setup -e

 

시스템 등록

$ systemctl enable filebeat.service

$ systemctl start filebeat.service

$ systemctl status filebeat.service

 

Elasticsearch 설치 및 설정

Elasticsearch 7.5버전 부터는 자바가 기본적으로 내장되어 있다.

// Step 1: 자바 설치 & JAVA_HOME 설정

자바 버전 확인

$ java -version

 

자바가 설치되어 있지 않은 경우 : java 8 버전으로 설치

$ apt-get update

$ sudo apt-get install openjdk-8-jdk

- 설치하고 난 후에 java -version을 다시 확인한다

java -version

- 정상적으로 설치가 된 것을 확인 할 수 있다.

 

// Step 2: Elasticsearch 설치

deb로 엘라스틱서치 설치

$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

$ sudo apt-get install apt-transport-https

$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.1-amd64.deb

$ sudo dpkg -i elasticsearch-7.5.1-amd64.deb

- 위 순서대로 입력해서 설치를 진행한다.

 

Elasticsearch 시스템 등록

$ sudo /bin/systemctl daemon-reload

$ sudo /bin/systemctl enable elasticsearch.service

$ sudo systemctl start elasticsearch.service

$ sudo systemctl stop elasticsearch.service

 

Elasticsearch 디렉토리 구조

-엘라스틱서치 디렉토리 구조

- 주로 사용하는 설정 파일 : /etc/elasticsearch/elasticsearch.yml

 

 

// Step 3: Elasticsearch 설정 파일 

현재는 서버 3대로 마스터 노드 1개, 마스터 겸 데이터 노드, 데이터 노드 이렇게 3개의 서버로 구성

Master node 설정파일 

$vi /etc/elasticsearch/elasticsearch.yml

======== Node ======== 

- cluster.name : 클러스터명 (연결할 노드들은 모두 같은 클러스터명을 가져야 한다)

- node.name : es-master

- node.master : true

- node.data : false

 

======== Path ========

- path.data : 데이터 노드의 경우 데이터가 저장되는 경로 / 마스터 노드일 경우는 데이터를 적재하지 않는다

- path.logs : 로그가 쌓이는 경로 (cluster.name으로 로그가 저장된다)

 

======== Network ========

- network.host : 0.0.0.0

 

======== Discovery ========

- discovery.seed_hosts : [클러스터 구성을 위한 바인딩 할 노드의 IP 입력]

- cluster.initail_master_nodes : [ 마스터 노드 선출을 위한 후보의 node.name 리스트로 입력]

 

Data node1, 2 설정 파일

$ vi /etc/elasticsearch/elasticsearch.yml

======== Node ======== 

- cluster.name : 클러스터명 (연결할 노드들은 모두 같은 클러스터명을 가져야 한다)

- node.name : es-master

- node.master : false

- node.data : true

 

======== Path ========

- path.data : 데이터 노드의 경우 데이터가 저장되는 경로 / 마스터 노드일 경우는 데이터를 적재하지 않는다

- path.logs : 로그가 쌓이는 경로 (cluster.name으로 로그가 저장된다)

 

======== Network ========

- network.host : Private IP (master node와 통신할 수 있도록 Private IP를 입력)

 

======== Discovery ========

- discovery.seed_hosts : [클러스터 구성을 위한 바인딩 할 노드의 모든 IP 입력]

- cluster.initail_master_nodes : [ 마스터 노드 선출을 위한 후보의 node.name 리스트로 입력]

 

노드 간 연결 확인

- 노드들이 제대로 연결이 되었는지 각 노드들의 엘라스틱 로그를 확인

$ vi /var/elasticsearch/클러스터명.log

- 로그를 살펴보면 노드의 이름을 통해 잘 바인딩이 되었는지 확인 가능

- 또한 마스터 노드로 선출된 노드의 이름을 확인할 수 있다.

 

클러스터 상태 확인 

$ curl -X GET “localhost:9200/_cat/health?v”
$ curl -X GET “localhost:9200/_cat/nodes?v”

- 위의 명령어를 통해 클러스터의 상태를 확인할 수 있다.

 

시스템 자원 제한 수정

- ELK를 사용하다 보면 실질적으로 자원에 대한 에러를 많이 겪게 된다.

- 미리 아래의 설정을 통해 메모리 에러를 방지

 vi /etc/security/limits.conf

- 설정이 잘 되었는지 확인하기

 

 

Logstash 설치 및 설정

- 로그 스테이시의 기본 파이프라인은 아래와 같다

- 로그 스테이시의 2가지의 필수요소는 바로 Input과 Output이다. 필요에 따라 Filter기능을 사용

Logstash pipline

 

// Step 1: Logstash 설치 

deb로 로그 스테이시 설치

wget https://artifacts.elastic.co/downloads/logstash/logstash-7.5.1-amd64.deb

sudo dpkg -i logstash-7.5.1-amd64.deb

 

시스템 등록

$ sudo /bin/systemctl daemon-reload

$ sudo /bin/systemctl enable logstash.service
 
$ sudo systemctl start logstash.service

$ sudo systemctl stop logstash.service

 

// Step 2: Logstash 설정 파일

- 주로 Logstash의 설정은 conf.d 폴더 안에 있는 conf 파일을 사용함

 

$ vi /etc/logstash/conf.d/custom.conf

 

Input이 Filebeat일 경우

input {
    beats {
        port => "5044"
    }
}

 

Filter 설정

filter {

}

- 어떤 식으로 파싱 하고 싶은지를 이곳에서 정의한다.

 

Output 설정

- 엘라스틱으로 output을 전달할 때

output {
    elasticsearch {
        hosts => [ "localhost:9200" ]
    }
}

 

Kibana 설치 및 설정

// Step 1: Kibana 설치 

데비안 패키지로 키바나 설치

$ wget https://artifacts.elastic.co/downloads/kibana/kibana-7.5.1-amd64.deb

$ sudo dpkg -i kibana-7.5.1-amd64.deb

 

시스템 등록

$ sudo /bin/systemctl daemon-reload
$ sudo /bin/systemctl enable kibana.service
$ sudo systemctl start kibana.service
$ sudo systemctl stop kibana.service

 

디렉터리 구조

- 데비안 패키지로 설치할 경우 아래와 같은 디렉터리 형태로 구성되어 있다

키바나 디렉토리 구조

- 주된 키바나 설정 파일은 : /etc/kibana/kibana.yml 에서 한다

 

 

// Step 2: Kibana 설정 파일 

Kibana 기본 설정 파일

$ vi /etc/kibana/kibana.yml

- Kibana의 기본 접속 포트는 5601이다

- 키바나 접속 에러시 포트 접속이 허용되어 있는지 확인 필요

 

 

Metricbeat 설치 및 설정 (선택사항)

- Metricbeat를 설치하게 된 이유는 로그 수집 서버의 시스템 로그를 가져오기 위해 진행함

- CPU, Memory, Disk 등 서버의 상태를 실시간으로 모니터링할 수 있다.

 

// Step 1: Metricbeat 설치 

$ curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-6.8.5-amd64.deb

$ sudo dpkg -i metricbeat-6.8.5-amd64.deb

 

// Step 2: Metricbeat 설정 파일 수정 

- system module 활성화

$ metricbeat modules enable system 

- metricbeat.yml 설정파일

- 키바나와 엘라스틱 Output 설정

setup.kibana:
  host: "키바나서버IP:5601"
 
output.elasticsearch:
  hosts: "엘라스틱서치서버IP:9200"

 

- 기본 초기화 세팅

$ metricbeat setup -e

 

- 시스템 등록

$ systemctl enable metricbeat

$ systemctl restart metricbeat

$ systemctl status metricbeat

 

 // Step 3: Metricbeat 키바나 연결

- 아래와 같이 서버 모니터링 구성이 가능해진다

 

반응형