티스토리 뷰
[Monitiring Tool] Elastic Stack(Filebeat, Logstash, Elasticsearch, Kibana) 구성 실습
miiingo 2019. 6. 19. 16:36사전 조사
Elastic Stack이란?
사용자가 서버로부터 원하는 모든 유형의 데이터를 가져와서 실시간으로 해당 데이터를 검색, 분석 및 시각화 할 수 있도록 도와주는 Elastic의 오픈소스 서비스 제품
Elastic Stack = Beats + Logstash + Elastic Search + Kibana
influxDB + grafana 서비스와 비슷
Beats
- 데이터 수집기
- e.g. Filebeat, Metricbeat, Packetbeat, Winlogbeat, 등
- Fabric 네트워크의 로그는 파일 형태로 저장되기 때문에 로그 수집을 위해서는 Filebeat이 필요
Logstash
- 다양한 플러그인을 이용하여 데이터 집계 및 보관, 서버 데이터 처리
- 파이프라인으로 데이터를 수집하여 필터를 통해 변환 후 Elastic Search로 전송
Elastic Search
- 루씬 기반의 Full Text로 검색이 가능한 오픈소스 분석엔진
- 주로 REST API를 이용해 처리
- 대량의 데이터를 신속하고 거의 실시간으로 저장, 검색 및 분석 가능
Kibana
- 데이터를 시각화해주는 도구
Elastic Stack의 구조
Elastic Stack 개요
Elastic Stack Overview
마스터 노드는 3대 이상 필요
REST API를 지원
로그인 관리나 보안쪽은 엔터프라이즈용을 구매해야 사용가능. 최근에 구글에서 무료로 오픈소스를 공개함. 연결해서 사용 가능.(Open Distro)
- Beats : 데이터 수집기 e.g. Filebeat, Metricbeat, Packetbeat, Winlogbeat, etc (Fabric 네트워크의 로그는 파일 형태로 저장되기 때문에 Filebeat이 필요)
- Logstash : 전처리 (Elasticsearch도 전처리가 가능하긴 하지만 부담이 되기 때문에 따로 처리)
- Elasticsearch : 검색 및 분석 엔진
- Kibana : 대시보드. 단순히 지켜보는것 뿐만 아니라 작업이 가능
Beats와 Logstash 사이에 Kafka를 사용하기도 함
Beats는 데이터를 수집하다가 오류가 나면 해당 위치에서 멈춰있다가 오류가 해결되면 해당 위치에서부터 다시 전송을 시작하기 때문에 딜레이가 걸릴 수 있음. Kafka를 이용해서 이런 문제를 해결 가능.
Getting Started with Elasticsearch
Elastic XPack이 엔터프라이즈용
Elastic Search는 7.x까지 나오긴 했는데, 아직 6.x를 쓰는 걸 권장 (Open Distro에서 아직 7.x를 지원하지 않음)
Elastic Search의 버전을 지정하면 Beats, Logstash, Kibana 등을 동일한 버전으로 맞춰줘야함
JDK는 Java 8 이상
클러스터에 노드를 추가할 때 마스터 노드 정보만 입력하면 알아서 설정됨.
Filebeat, Logstash, Elasticsearch 구성(Getting started with the Elastic Stack)
※ elastic stack이 java로 구현되다 보니 메모리가 많이 필요합니다. VM 생성하실때 core하고 memory 최대로 설정해주세요.~
-> Memory: 8GB, Core: 3 정도로 설정 -> 이정도도 메모리가 충분하지는 않음
OpenJDK 설치
sudo apt-get update
sudo apt-get install openjdk-8-jdk
# 설치된 Java 목록 조회(한개 이상의 JRE/JDK설치 시 출력됨)
sudo update-alternatives --config java
# java 프로그램 위치 확인
which java
/usr/bin/java
readlink -f /usr/bin/java
/usr/lib/jvm/java-8-openjdk-amd64/bin/
# Elastic Stack 설치 계정에 Java 관련 환경 변수 설정
# 환경변수
sudo vi /etc/profile
/etc/profile 파일의 제일 하단에 다음 내용을 추가합니다.
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export CLASS_PATH=$JAVA_HOME/lib:$CLASS_PATH
Elastic Search 구성
# 설치
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.7.2.tar.gz
tar -xzvf elasticsearch-6.7.2.tar.gz
cd elasticsearch-6.7.2
# 구동
./bin/elasticsearch
# 구동 여부 확인
curl http://127.0.0.1:9200
Kibana 구성
# 설치
curl -L -O https://artifacts.elastic.co/downloads/kibana/kibana-6.7.2-linux-x86_64.tar.gz
tar xzvf kibana-6.7.2-linux-x86_64.tar.gz
cd kibana-6.7.2-linux-x86_64/
# Host에서 접속하기 위해 Binding Host주소 변경
vi config/kibana.yml
config/kibana.yml 파일에서 server.host를 다음과 같이 설정합니다.
server.host: "0.0.0.0"
# 구동
./bin/kibana
# 구동 여부 확인
http://{VM IP}:5601
Beats 구성
# 설치
curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-6.7.2-linux-x86_64.tar.gz
tar xzvf metricbeat-6.7.2-linux-x86_64.tar.gz
cd metricbeat-6.7.2-linux-x86_64
# 소유권 변경(실행 계정과 소유 계정이 동일해야함. 동일하지 않을 경우 오류 발생)
sudo chown -R root:root .
# Kibana Dashboard(metricbeat) 초기화(템플릿 로드)
sudo ./metricbeat setup -e
# 구동
sudo ./metricbeat -e
Kibana Dashboard에서 'system'을 검색하면 다양한 템플릿이 뜸.
Logstash 구성
# 설치
curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-6.7.2.tar.gz
tar -xzvf logstash-6.7.2.tar.gz
cd logstash-6.7.2
# 설정 파일
vi config/logstash.conf
config/logstash.conf 파일을 다음과 같이 작성합니다.
input {
beats {
port => 5044 # 리스닝 포트
}
}
filter {
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "docker_log_index-%{+YYYY.MM.dd}"
}
}
이제 logstash를 구동합니다.
# 구동
./bin/logstash -f config/logstash.conf
filebeat 구성
Docker 컨테이너의 로그를 수집하기 위해 filebeat을 구성합니다. (Docker 컨테이너의 로그는 파일로 저장되기 때문에 filebeat이 필요)
# 디렉터리 생성
mkdir filebeat
cd filebeat
# 설정 파일
vi filebeat.yml
filebeat.yml 파일을 다음과 같이 작성합니다.
# https://github.com/rmalchow/docker-json-filebeat-example
filebeat.autodiscover:
providers:
- type: docker
hints.enabled: true
json.message_key: log
templates:
- condition:
equals:
docker.container.labels.filebeat_enable: "true"
config:
- type: docker
containers.ids:
- "${data.docker.container.id}"
json.keys_under_root: true
json.add_error_key: false
processors:
- add_cloud_metadata: ~
- add_docker_metadata: ~
output.logstash:
hosts: ["${LOGSTASH_HOST}"]
filebeat의 정상 실행을 위해 설정 파일의 소유권과 권한을 변경합니다.
# 소유권 및 권한 변경
sudo chown root:root filebeat.yml
sudo chmod go-w filebeat.yml
filebeat을 docker로 실행하기 위해 docker-compose 파일을 작성합니다. byfn 네트워크의 로그를 수집해야하기 때문에 networks는 byfn으로 설정합니다.
# docker-compose 설정 파일
vi docker-compose-filebeat.yml
docker-compose-filebeat.yml 파일을 다음과 같이 작성합니다.
version: '2'
networks:
byfn:
services:
filebeat:
image: docker.elastic.co/beats/filebeat:6.7.2
container_name: filebeat
hostname: filebeat # Docker Hostname
environment:
- LOGSTASH_HOST=node1:5044 # Logstash Host(extra_hosts에서 정의한 node1의 IP로 연결)
user: root # root 계정 필요
volumes:
# Filebeat 설정 파일
- ./filebeat.yml:/usr/share/filebeat/filebeat.yml
# for accessing docker
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/containers/:/var/lib/docker/containers/:ro
extra_hosts:
- "node1:192.168.133.129" # Logstash Host IP(자신의 IP 주소에 맞게 설정. ex: 192.168.133.129)
networks:
- byfn
extra_hosts의 node1의 IP 부분에는 Logstash가 실행중인 호스트의 IP를 적어줍니다. (※ Docker 컨테이너로 실행하기 때문에 127.0.0.1 등으로 설정할 수 없습니다.)
이제 filebeat을 구동합니다.
# 구동
docker-compose -f docker-compose-filebeat.yml up
byfn 네트워크와의 연결
로깅 형식 변경
peer, orderer의 로깅 형식을 json으로 변경합니다.
참고 - https://hyperledger-fabric.readthedocs.io/en/release-1.4/logging-control.html#overview
/opt/gopath/src/github.com/hyperledger/fabric-samples/first-network/base/peer-base.yaml 파일안에 services/peer-base/environment, services/orderer-base/environment 에 추가하세요!
environment:
- FABRIC_LOGGING_FORMAT=json
네트워크 실행
# byfn 네트워크 실행
cd /opt/gopath/src/github.com/hyperledger/fabric-samples/first-network
./byfn.sh up
Kibana 설정
Kibana 웹 페이지 > Management > Index Patterns > Create index pattern을 클릭해 docker_log_index를 추가합니다.
- Index pattern : docker_log_index-*
- Time Filter field name : @timestamp
이제 Discover 메뉴에서 docker_log_index에 대한 내용을 확인할 수 있습니다.
'개발도구 > Monitoring Tool' 카테고리의 다른 글
- Total
- Today
- Yesterday
- 하이퍼레저 패브릭
- docker
- Hyperledger Fabric v1.2
- 하이퍼레저 페브릭
- 빅데이터 강의
- 알고리즘
- Hyperledger Indy
- javascript
- 어서와 데이터는 처음이지
- codility
- 코테
- ambrosus
- 문제풀이
- Blockchain
- Hyperledger Fabric v1.1
- 코딩테스트
- 기초 of 기초 데이터 개념
- 빅데이터 기초
- 빅데이터
- ubuntu
- 직딩잇템
- 코딜리티
- 블록체인
- 빅데이터 교육
- Hyperledger Fabric
- 암브로셔스
- Private Data
- DOCs
- 하이퍼레저 인디
- 블록 체인
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |