elasticsearch cluster and filebeat with kibana dashboard

in elasticsearch •  7 years ago 

파일 분석을 위해 엘라스틱 과 filebeat , kibana 를 사용하도록 한다.

spring boot 어플리케이션에서 발생하는 로그를 filebeat 로그 수집기를 통해 엘라스틱 으로 쌓은 후 kibana 를 통한 대시보드로 모니터링 하도록 한다.

최종적인 결과는 아래 그림과 같다.

es.png

파일 분석 시스템의 구성 설명

3 대의 물리적 머신에 엘라스틱서치를 클러스터링 하도록 한다.
standby / active 로 구성 하기 위해 3대의 노드들 모두 master 설정을 하였다.
master 노드들 도한 데이터를 저장 하도록 한다.
아래 설치 정보들은 모든 노드들에 공통으로 적용 한다.
elasticsearch 의 jvm.option 설정은 하지 않았음. 시스템 퍼포먼스는 테스트 진행후 해도 되기때문에 나중에 하도록 한다.
elasticsearch,kibana,logstash 등 기타 정보들에 대한 인증 설정을 위해 x-pack 을 적용한다.
x-pack 은 모든 노드들의 elasticsearch,kibana,logstash 등 모든 제품들에 개별적으로 설치 해주어야 한다.
(추후 기본으로 설치 된다고도 함)
x-pack 적용시 이점은 클러스터링 상태 모니터링 및 각종 관리들을 kibana 웹기반으로 편리하게 관리 가능하다는것, 그리고 이외 +++
x-pack 은 라이센스가 있어야 사용가능함.
x-pack 최초 설치시 한달 무료 적용 된다.
x-pack basic license 는 무료이며, 1년단위로 라이센스를 적용해주어야 한다.
신청하면 이메일로 다운로드 링크를 받게 되며, 라이센스 적용은 공식 홈페이지에 자세히 나와있으므로 큰 무리 없이 적용 할 수있다.
현재 테스트하려는 시스템에서는 인증은 필요 없기때문에 설치 및 적용은 하지 않도록 한다.

참고 및 시스템 정보

각 엘라스틱 서버이름을 변경하기 위해 시스템의 hostname 을 변경하도록 한다. (서버 1,2,3 모두 동일)

hostnamectl set-hostname es-data-1
hostnamectl set-hostname es-data-2
hostnamectl set-hostname es-data-3

or
vi /etc/sysconfig/network
HOSTNAME=es-master

hostname 변경 적용을 위해 시스템을 재시작 하도록 한다.

reboot

jdk 1.8 설치 (엘라스틱서치는 자바기반이므로 jdk 를 설치 해야함.)

yum install -y java-1.8.0-openjdk-devel.x86_64

엘라스틱 설치 (rpm 패키지로 설치하기 위해 아래 repo 생성 및 설치 - 서버 1,2,3 모두 동일)

vi /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

yum -y install elasticsearch

엘라스틱 서치 설정 (서버 1,2,3 모두 동일 )

클러스터링 이름 설정

cluster.name: es-cluster

해당 노드가 마스터가 되도록설정

node.master: true

해당 노드에 데이터를 저장하도록 설정 (만약 마스터 역할만 할경우 false 로 설정)

node.data: true

해당 노드의 이름 (위에서 설정한 이름으로 할것이므로 시스템의 hostname 으로 설정)

node.name: ${HOSTNAME}

해당 노드에 접근하도록 하기 위한 설정 (ip or local, global etc...)

network.host: site

클러스터링 되어있는 노드들간의 유니캐스팅 하기 위해 각 노드들의 ip:port 설정 (내부아이피)

discovery.zen.ping.unicast.hosts: ["10.10.10.1:9300","110.10.10.2:9300","10.10.10.3:9300"]

*** jvm.options 를 비롯한 시스템 퍼포먼스를 위한 설정을 해야하지만 기본으로도 현재 시스템에서는 문제가 없으므로 패스 하도록 한다.

#엘라스틱 서치 구동 및 재시작시 자동 시작되도록 등록

systemctl enable elasticsearch

systemctl start elasticsearch

엘라스틱 서치 클러스터 상태 확인

http://10.10.10.1:9200/_cat/health?v&pretty
http://10.10.10.2:9200/_cat/health?v&pretty
http://10.10.10.3:9200/_cat/health?v&pretty

epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1521187495 04:04:55 es-cluster green 3 3 85 42 0 0 0 0 - 100.0%

엘라스틱 서치 클러스터 노드 확인

http://10.10.10.1:9200/_cat/nodes?v&pretty
http://10.10.10.2:9200/_cat/nodes?v&pretty
http://10.10.10.3:9200/_cat/nodes?v&pretty

ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
10.10.10.1 23 25 43 0.01 0.03 0.05 mdi * es-data-1
10.10.10.2 44 43 42 0.00 0.01 0.05 mdi - es-data-2
10.10.10.3 30 89 0 0.01 0.03 0.05 mdi - es-data-3

참고로 shards ,replica 설정은 index 설정시 해주면 된다.

#kibana 설치를 위해 repo 설정 후 설치하도록 한다.

#서버 1,2,3 모두 동일하게 설치해준다. (fail over 를 위해 )

vi /etc/yum.repos.d/kibana.repo
[kibana-6.x]
name=Kibana repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

#kibana 설치 및 시작 , 부팅시 자동 시작되도록 등록

yum -y install kibana

systemctl enable kibana

systemctl start kibana

kibana 구성 설정 (서버 1,2,3 모두 동일)

vi /etc/kibana/kibana.yml

외부접근 포트 설정

server.port: 5601
server.host: "10.10.10.1" #서버 아이피

elasticsearch 접근 url 지정

elasticsearch.url: "http://10.10.10.1:9200"
kibana 재시작

logstash 설치 (여기서 logstash 사용은 하지 않는다 , 하지만 설치 방법을 기록하기위해 작성함)

vi /etc/yum.repos.d/logstash.repo
[logstash-6.x]
name=Elastic repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

yum -y install logstash #부팅시 자동 시작하도록 logstash 등록 systemctl enable logstash #logstash 시작 systemctl start logstash

logstash 는 무겁기 때문에 앞으로 파일 로그 혹은 특정 시스템으로부터 로그를 받을경우 beat 를 사용하도록 한다.
beat를 각 시스템들에 agent 형식으로 설치 후 logstash  로 데이터를 전송하도록 설정한다.
beat는 가볍고 단독으로 설치 후 logstash  와 연동 할수있다.

#kibana 샘플 데이터 테스트 (공식 가이드 데이터를 기준으로 테스트함)

참고:
6.x 설치하였기때문에 6.0 튜토리얼 참고 하였으며, 5.x 버전은 한글번역이 되어있어서 참고함.
https://www.elastic.co/guide/en/kibana/6.0/tutorial-load-dataset.html
https://www.elastic.co/guide/kr/kibana/current/tutorial-visualizing.html

6.x 버전의 샘플 데이터를 가이드 대로 따라 함

#filebeat 설치

vi /etc/yum.repos.d/filebeat.repo

[filebeat-6.x]
name=Elastic repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

yum -y install filebeat

#filebeat 설정

vi /etc/filebeat/filebeat.yml

filebeat.prospectors:
#log파일 경로 설정은 패턴 설정으로도 가능함.
#공식 가이드에 잘 나와있으므로 경로 설정은 공식 가이드를 참고하도록 한다.

  • type: log
    enabled: true
    paths:
    • "log file path"
elasticsearch

output.elasticsearch:

Array of hosts to connect to.

hosts: ["10.10.10.1:9200","10.10.10.2:9200","10.10.10.3:9200"]
setup.kibana:
host: "10.10.10.1:port"
host: "10.10.10.2:port"
host: "10.10.10.3:port"

kibana 에서 indexpattern 추가 및 discover 에서 해당 index pattern 기반으로 로그들을 볼수 있게 된다.

filebeat 를 통해 elasticsearch 에 로그를 쌓게 되면 기본적으로 filebeat-버전명-날짜 패턴으로 생성 된다. (이부분도 설정 가능할까?)

엘라스틱에 생성된 index 들을 보기 위해서는 아래와같이 요청하면 볼수있게 된다.

http://10.10.10.1:9200/_cat/indices?v&pretty
http://10.10.10.2:9200/_cat/indices?v&pretty
http://10.10.10.3:9200/_cat/indices?v&pretty

여기까지 간단하게 엘라스틱 서치 클러스터링 및 파일 수집기인 filebeat 를 통해 로그를 수집한 후 kibana 로 모니터링 하기 이다.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Congratulations @gavinworld! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 1 year!

Click here to view your Board

Support SteemitBoard's project! Vote for its witness and get one more award!

Congratulations @gavinworld! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 2 years!

You can view your badges on your Steem Board and compare to others on the Steem Ranking

Vote for @Steemitboard as a witness to get one more award and increased upvotes!