레이블이 로그 분석인 게시물을 표시합니다. 모든 게시물 표시
레이블이 로그 분석인 게시물을 표시합니다. 모든 게시물 표시

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-13

MRTG Log 파일 분석


네트워크 트래픽 모니터링 도구 MRTG 를 실행하면 아래와 같은 Format으로 Log 파일이 생성된다. 


첫번째 줄 ( 3 Number )
 가장 최근에 실행된 시간(기준:1970.1.1/초단위)  //  ifIlnOctets 로 부터 가져온 값  //  ifOutOctets 로 부터 가져온 값
Timestamp 변환 방법 : 

 excel : 
 =(x+y)/86400+DATE(1970,1,1)

perl :
 perl -e 'print scalar localtime(x),"\n"'
     x: timestamp        y: the offset in seconds from UTC  (우리나라 9시간)   >
두번째 줄 ( 5 number ) 
  1st column  : 최근에 실행된 시간으로 일정 시간의 간격으로 증가한다. 5분 간격으로 실행이 되도록 설정이 되어
                       있으며, 300초가 차이가 난다. 
  2nd column : 수신된 트래픽의 평균 값(Incoming) ( byte/sec ) . 이 값은 현재 라인의 값과 이전 라인의 값의
                       평균값으로 계산된다. 
  3rd column : 송신된 트래픽의 평균 값(outgoing) ( byte/sec ) . 계산방법은 위와 동일. 
  4th column : 수신된 트래픽의 최대값으로 현재 측정되는 간격중에서 갱신된 값중의 최대값으로 계산된다. 만약
                      현재의 간격이 1시간이고 5분마다 갱신이 된다면 1시간동안 5분마다 갱신된 값중에 가장 큰 값이
                      선정된다. 
  5th column : 현재 간격에서 송신된 트래픽의 최대 값. 계산 방법은 위와 동일. 

Elasticsearch Heap Size

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