티스토리 뷰

반응형

사전 조사

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의 구조

https://cloud-img.hosting.kr/wp-content/uploads/2018/06/29155105/MEGAZONE-Elastic-Day-Elastic-Stack%EA%B3%BC-X-Pack%EC%9D%98-%EA%B8%B0%EB%B3%B8%EA%B5%AC%EC%84%B1-%EB%B0%8F-%ED%99%9C%EC%9A%A9%EC%82%AC%EB%A1%80.pdf

 

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

java 설치(sudo apt-get install openjdk-8-jdk)
설치된 Java 목록 조회(sudo update-alternatives --config java)
java 프로그램 위치 확인(which java )
java 프로그램 위치 확인(readlink -f /usr/bin/java)

/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

Elastic Search 구동
Elastic Search 구동 확인

 

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

Kibana 구동
Kibana 구동 확인

 

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(metricbeat) 초기화(템플릿 로드)
metricbeat 구동

Kibana Dashboard에서 'system'을 검색하면 다양한 템플릿이 뜸.

metricbeat Dashboards

 

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

logstash 구동

 

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

filebeat 구동

 

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

peer, orderer 로깅 형식 변경

 

네트워크 실행

# 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

index pattern 생성(docker_log_index-*)

이제 Discover 메뉴에서 docker_log_index에 대한 내용을 확인할 수 있습니다.

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함