레이블이 Kibana인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Kibana인 게시물을 표시합니다. 모든 게시물 표시

2020-01-22

[ELK] ELK(Elasticsearch+Logstash+Kibana) 설치 및 구성


이번시간에는 ELK(Elasticsearch+Logstash+Kibana) 를 설치하여 ELK Stack 서버를 구축해 보겠습니다.
현재 Elasticsearch는 7.5 버전까지 출시가 되었으며, CentOS에서 Yum 패키지를 통해 설치해 보도록 하겠습니다.

Elasticsearch는 7.5 버전의 새로운 기능 및 릴리즈 정보는 아래 링크를 참고하시기 바랍니다.
Elastic Stack 7.5.0 출시
< OS 환경 설정 >  - OS : Centos 7 64bit
  - Partition : / 50G  (System 영역)
                   /ELK  300G (ELK Data  영역)
  - CPU : 8Core
  - RAM : 32G

1. Java 설치 ( java 8 이상)
  Elasticsearch 는 Java8 이상이 필요합니다. 만약 java가 설치되어 있지 않으면 jdk 1.8.0-openjdk 파일을 설치합니다.
yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel

[root@localhost ~]# yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
BDB2053 Freeing read locks for locker 0x1b: 5689/140083220739904
Loaded plugins: fastestmirror
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  mesa-libglapi.x86_64 0:18.3.4-5.el7                     pango.x86_64 0:1.42.4-4.el7_7                          
  pcsc-lite-libs.x86_64 0:1.8.8-8.el7                   pixman.x86_64 0:0.34.0-1.el7                                        python-javapackages.noarch 0:3.4.1-11.el7               python-lxml.x86_64 0:3.2.1-4.el7                       
  ttmkfdir.x86_64 0:3.0.9-42.el7                        tzdata-java.noarch 0:2019c-1.el7                                    xorg-x11-font-utils.x86_64 1:7.5-21.el7                 xorg-x11-fonts-Type1.noarch 0:7.5-9.el7                

Complete!
[root@localhost ~]# 
 Java 버전 확인
[root@localhost ~]# java -version
openjdk version "1.8.0_232"
OpenJDK Runtime Environment (build 1.8.0_232-b09)
OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode)
[root@localhost ~]# 

2. Elasticsearch PGP 키 가져오기   Elasticsearch 설치시 공개 서명키가 필요하며, 아래와 같이 공개 서명키(public signing key) 를 설치해줍니다. 
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

3. Elastic repository 설정  /etc/yum.repos.d 디렉토리 밑에 Elastic.repo 라는 파일을 만들고 아래의 Repository 정보를 등록합니다.
vi /etc/yum.repos.d/Elastic.repo
[Elastic-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
 Elasticsearch, Logstash, Kibana 모두 동일한 저장소를 사용하고 있어서 한번만 등록해 주면 됩니다. 
4. Elasticsearch/ Logstash / Kibana  설치
 
  Repository 등록 후 Yum을 통해 ELK 패키지를 설치합니다. 
yum -y install elasticsearch

yum -y install logstash

yum -y install kibana

5. 환경 설정  ELK 설치가 완료되면 아래와 같이 추가적으로 설정값을 변경해 주면 됩니다. 디스크 용량 관리차원에 서 로그 데이터 파티션을 별도 분리하여 관리하고, Java heap 메모리 설정 및 성능 튜닝등을 통해 퍼포먼스를 향상킬 수 있습니다. 
 1) Elasticsearch.yml 파일 수정 및 디렉토리 생성  -  elasticsearch가 환경 설정 파일 :  /etc/elasticsearch/elasticsearch.yml 
[root@localhost ~]# vi /etc/elasticsearch/elasticsearch.yml 

cluster.name: clustername        // 클러스터 이름 변경(선택)
path.logs: /ELK/log/elasticsearch   // elasticsearch 로그 파일 위치
path.data: /ELK/elasticsearch       // elasticsearch 데이터 파일 위치
network.host: 0.0.0.0    // elasticsearch 바인딩 정보
http.port: 9200    // elasticsearch 서비스 포트(default 9200)

## 성능 튜닝 관련 설정. 
thread_pool.search.queue_size: 10000  
indices.memory.index_buffer_size : 512mb  
cluster.max_shards_per_node : 3000 
  - elasticsearch 디렉토리 생성 및 소유권 변경 
mkdir /ELK/log                  // 로그 파일 디렉토리 생성
mkdir /ELK/log/elasticsearch    // elasticsearch 로그 디렉토리 생성
mkdir /ELK/elasticsearch        // elasticsearch 데이터 디렉토리 생성

## 디렉토리 소유권 변경 ( root => elasticsearch )
chown elasticsearch.elasticsearch /ELK/log/elasticsearch -R
chown elasticsearch.elasticsearch /ELK/elasticsearch -R

  2) elasticsearch jvm.options heap 메모리 사이즈 조절
   Heap 메모리 사이즈는 최대 32G 이하로 세팅하는 것을 권장하며, 여기서는 32G 메모리의 절반인 16G 로 세팅하였습니다.  heap 메모리 관련이나  성능 튜닝관련해서는 차후에 따로 포스팅을 하도록 하겠습니다. 
vi /etc/elasticsearch/jvm.option
-Xms1g    =>  Xms16g
-Xmx1g    =>  Xms16g

 3)  logstash.yml 파일 수정 및 디렉토리 생성  -  logstash 환경 설정 파일 : /etc/logstash/logstash.yml
vi /etc/logstash/logstash.yml

path.data: /ELK/logstash/
path.logs: /ELK/log/logstash

  - logstash 디렉토리 생성 및 소유권 변경
mkdir /ELK/log/logstash    // logstash 로그 디렉토리 생성
mkdir /ELK/logstash        // logstash 데이터 디렉토리 생성

## 디렉토리 소유권 변경 ( root => logstash )
chown logstash.logstash /ELK/log/logstash -R
chown logstash.logstash /ELK/logstash -R

 4) logstash jvm 옵션 heap 메모리 조절 ( 1G => 4G )
   logstash heap 메모리도 시스템 사양에 따라 적절하게 값을 할당해 주시면 됩니다. 여기서는 4G로 할당하였습니다
vi /etc/logstash/jvm.option
-Xms1g    =>  Xms4g
-Xmx1g    =>  Xms4g

  5) kibana.yml 환경 설정

  -  kibana 환경 설정 파일 : /etc/kibana/kibana.yml
vi /etc/kibana/kibana.yml

server.host: 0.0.0.0
elasticsearch.hosts: "http://localhost:9200"

6. Elasticsearch , Kibana 시작 및 서비스 등록
systemctl enable elasticsearch
systemctl start elasticsearch
systemctl enable kibana
systemctl start kibana

7. Logstash  파일 생성 및 Logstash 실행
  Logstash는 외부 로그데이터 전송시 로그를 수집하고(Input), 변환한 후(filter), elasticsearch로 전송(output) 해주는 역할을 합니다. logstash 실행시 데이터 수집 및 변환 출력을 위한 필터가 필요합니다. 
  1) logstash 필터 파일 구조 ( logstash.conf , 파일 이름 임의 생성 가능 )
    원하는 이름으로 생성하시면 되며 아래와 같은 구조로 작성을 합니다.
input {
    udp {      
        host => "0.0.0.0"
        port =>  514
    }

filter {
     grok {
           match => ["message", "%{SYSLOG5424PRI:syslog_index}%{GREEDYDATA:message}"]
           overwrite => [ "message" ]
     }
}

output {
       elasticsearch { hosts => ["localhost:9200"] }
       stdout { codec => rubydebug }
}
  ※  input : 로그데이터를 수신할 프로토콜 및 포트, 코덱 등을 정의
  ※  filter :  수신한 로그에 대한 파싱, 인덱싱 및 변환 작업
  ※  output :  변환한 데이터를 Elasticsearch 등 외부 저장소로 출력

8. ELK 서비스 포트 방화벽 허용
## Allow Logstash Input
firewall-cmd --add-port=514/udp
firewall-cmd --add-port=514/udp --permanent

## Allow Elasticsearch
firewall-cmd --add-port=9200/tcp
firewall-cmd --add-port=9200/tcp --permanent

## Allow Kibana
firewall-cmd --add-port=5601/tcp
firewall-cmd --add-port=5601/tcp --permanent

9. Kibana 웹 URL 접속
http://ELK_ServerIP:5601

웹브라우저에서 http://elk_server_ip:5601 로 접속하면 아래와 같이 Kibana Web UI 화면이 보이게 됩니다. 



다음번에는 Kibana 접속시 아파치 웹 서버를 통한 로그인 인증 설정 방법,
logstash.conf 에 다양한 로그 형식에 대한 필터링 설정 예시 등 대해서 포스팅 하도록 하겠습니다. 
궁금하신 내용 있으면 댓글 남겨 주시면 답변 드리도록 하겠습니다. 

2020-01-17

[ELK] Elastic Stack(ELK + Beats) 이란?

Elastic Stack?   ELK Stack ? 
  "ELK"는 Elasticsearch, Logstash 및 Kibana, 이 세게의 프로젝트의 각 첫글자의 조합입니다.

   Elasticsearch는 검색 및 분석 앤진,
   Logstash는 데이터를 수집 및 변환하는 데이터 처리 파이프라인
   Kibana는 데이터를 차트와 그래프등을 이용해 볼수 있는 시각화 도구

   최근에는 ELK Stack에 단일 목적 데이터 수집기 제품인 Beat 를 추가했으며, 이 네개의 조합을 합쳐서 Elastic Stack 이라고 부르고 있습니다.
  즉, Elastic Stack은 ELK Stack이 그 다음 단계로 발전한 것이라고 할 수 있습니다. 




Elasticsearch
Elasticsearch는 Lucene 검색 엔진을 기반으로하며 RESTful API로 구축 된 NoSQL 데이터베이스입니다. 매우 유연하고 분산 된 검색 및 분석 엔진입니다. 또한 수평 확장 성을 통해 간단한 배포, 최대 안정성 및 손쉬운 관리 기능을 제공합니다. 고급 쿼리를 제공하여 상세 분석을 수행하고 문서를 빠르게 검색 할 수 있도록 모든 데이터를 중앙에 저장합니다. 




Logstash
Logstash는 데이터 수집 파이프 라인 도구입니다. 데이터 입력을 수집하여 Elasticsearch에 공급하는 ELK Stack의 첫 번째 구성 요소입니다. 다양한 소스에서 다양한 유형의 데이터를 한꺼번에 수집하여 즉시 사용할 수 있습니다.






Kibana
Kibana는 데이터 시각화 도구입니다. Elasticsearch 문서를 시각화하는 데 사용되며 개발자가 문서에 대한 즉각적인 통찰력을 갖도록 도와줍니다. Kibana 대시 보드는 Elasticsearch를 사용하여 수행 한 복잡한 쿼리를 시각화하기 위해 다양한 대화 형 다이어그램, 지리 공간 데이터, 타임 라인 및 그래프를 제공합니다.Kibana를 사용하면 특정 요구에 따라 사용자 정의 그래프를 작성하고 저장할 수 있습니다.



ELK Stack Architecture

 다양한 형태의 로그는 Logstash에 수집이 되고, 필터 기준에 따라 변환이 이루어 집니다. 그 다음 Logstash는 해당 로그를 Elasticsearch로 전달 한 후 Elasticsearch는 해당 로그를 분석하고 검색합니다. 마지막으로 Kibana를 사용하여 원하는 형태에 따라 로그를 시각화 하고 관리하게 됩니다. 



이미지 출처 : https://www.edureka.co/blog/elk-stack-tutorial/





여기에 Beats 가 추가가 되었습니다. 
단일 목적의 데이터 수집기 플랫폼인 Beats는 수백 수천 개의 장비와 시스템으로부터 Logstash나 Elasticsearch에 데이터를 전송합니다.

 

Beats 동작 방식.

Beat는 서버에 에이전트 형식으로 설치하는 오픈소스 데이터 수집기 입니다. Beats 는 데이터를 Elasticsearch에 직접 전송할 수 있으며, Logstash를 통해서 데이터를 전송할 수도 있습니다.


이미지 출처 : https://www.elastic.co/guide/en/beats/libbeat/7.x/beats-reference.html#beats-reference


Beats 제품군

Filebeat  -  Real-time insight into log data
  로그와 파일을 경량화된 방식으로 전달하고 중앙 집중화하여 작업을 보다 간편하게 만들어 주는 역할을 합니다
Download

Packetbeat  - Analyze network packet data.
  Packetbeat는 데이터에 실시간으로 접근하여 내용을 분석하면 네트워크 트래픽의 흐름이 어떤지 파악할 수 있습니다
Download

Winlogbeat   Analyze Windows event logs.
 Winlogbeat를 이용해 Windows 이벤트 로그를 Elasticsearch와 Logstash로 스트리밍할 수 있습니다
Download

Metricbeat  - Ship and analyze metrics. 
  CPU부터 메모리, Redis, NGINX까지 Metricbeat를 통해 다양한 시스템 서비스 통계를 가볍게 전송할 수 있습니다
Download

Heartbeat   Ping your Infrastructure.
 Heartbeat를 통해 가동 시간과 반응 시간등 활성 상태를 탐지하고 서비스가 가능한지 모니터링합니다
Download

Auditbeat   Send audit data to Elasticsearch.
  Auditbeat는 Linux 감사 프레임워크 데이터를 수집하고 수집한 데이터를 Elastic Stack에 실시간 전송합니다
Download

Functionbeat   Ship cloud data with serverless infrastructure.
 클라우드 서비스의 Function-as-a-Service (FaaS) 플랫폼에서 기능으로 배포하여 데이터를 수집, 전송, 모니터링합니다
Download

Elasticsearch Heap Size

  Elasticsearch는 Java 기반으로 동작을 합니다. Java는 가비시 컬렉터 (garbage-collected)에 의해서 관리가 되며, Java 객체는 힙(Heap) 이라고하는 메모리의 런타임 영역에 상주합니다.  Elasticsear...