[Filebeat+ELK 7.5] 로그 모니터링 서버 구축 (설치부터 설정까지)
[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 설치 기준)
// 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을 다시 확인한다
- 정상적으로 설치가 된 것을 확인 할 수 있다.
// 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기능을 사용
// 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 키바나 연결
- 아래와 같이 서버 모니터링 구성이 가능해진다