KnP House for Daily

Centralized Log Server 를 위한 기본 세팅 (EC2 + ElasticSearch + Logstash + filebeat + kibana) 본문

Web/AWS

Centralized Log Server 를 위한 기본 세팅 (EC2 + ElasticSearch + Logstash + filebeat + kibana)

K.ung 2016.08.15 16:22


Centralized Log Server


EC2 + ElasticSearch + Logstash + filebeat + kibana ]

조합으로 이루어진 중앙 로그 서버를 세팅 하는 법에 대해 기본적인 세팅 경험을 공유하고자 한다.


  • 기본 구성도 및 개요

 - 각 운영되는 서버에서 수집되는 로그들을 'filebeat' 를 이용하여 전송 한다.

 - Centralized Log Server 에서 'logstash' 가 beat input plugin으로 받아 들여 로그들을 filterling 및 output 을 해준다.

 - output된 로그들은 'elasticsearch' 에 저장되며 'kibana' 를 통해 visualize 된 화면을 볼 수있다.


SPEC


Ubuntu 16.04.1 LTS EC2  기준으로 작성되었습니다.


  • ElasticSearch

  - Lucene을 바탕으로 실시간 분산 검색과 분석 엔진 이다.     (https://www.elastic.co/guide/en/elasticsearch/guide/current/getting-started.html)

  - 결국 수집한 log를 저장 하고 분석하게 도와주는 엔진

  - requirement



  • Logstash

  - 데이터 수집하는 오픈소스이다.

  - 실시간으로 로그들을 수집하여 filter에서 제공하는 여러 기능들로 로그들을 동적으로 변화시켜 원하는 form으로 완성 시켜준다.

   - input -> filter -> output  구조로 되어 있어 원하는 template을 설정 가능 하다.


  • Kibana

  - elasticsearch와 연동 하여 수집된 로그들을 분석 하여 visualization 하여 사용자가 쉽고 편하게 로그 분석 할 수 있는 툴을 제공한다.

  • ngix

  - 다들 아는 그 nginx

  • SSL

  - client 운영 server와 연동하기 위해 필요한 인증서


Install


  • Java 8 Install

   - elasticsearch를 설치 하기위해 Java8 을 설치하여야 한다.

   - apt-get repository에 webupd8team/java를 등록 한 후 oracle java8을 install한다.

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer

 - 설치가 완료 되면 정상적인 설치 확인 을 한다.


$ java -version


  - java8 환경 변수를 등록하게 도와주는 명령어를 실행한다

$ sudo apt-get install oracle-java8-set-default


  • nginx
$ sudo apt-get update
$ sudo apt-get install nginx

$ sudo service nginx start 

  - http://자신의_server_ip 로 정상적인 접속 화면을 확인 한다. 


  • elasticsearch

  - ElasticSearch package를 apt source list 에 추가를 하여 install 할 수 있다. 

  - apt에 Elasticsearch public GPG key 를 삽입한다.

$ wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

  - apt source list에 ElasticSearch 를추가한다.

$ echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list

  - ElasticSearch를 추가 하였으니깐  apt package 를 update 해야 한다.

$ sudo apt-get update

  - ElasticSearch 를 이제 install 한다.

 $ sudo apt-get -y install elasticsearch

  - 설치가 완료되면 elasticsearch를  service를 통해 실행 할 수 있다.

$ sudo service elasticsearch restart

  - ElasticSearch는 9200포트로 개방 되기에 http://server_ip:9200 으로 다음과 같은 health check를 할 수 있다.


  • logstash

  - elasticsearch와 같은 방식으로 설치를 진행한다.

$ wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
$ echo "deb https://packages.elastic.co/logstash/2.3/debian stable main" | sudo tee -a /etc/apt/sources.list

$ sudo apt-get update && sudo apt-get install logstash

  - 설치 directory는 /opt/logstash 에 위치해 있다.

  - logstash config 파일은 

$ cd /etc/logstash/conf.d

  로 이동하여 생성 을 한다. 여러 config 파일을 생성시킬수 있지만 한개로 통합하여 진행한다.

$ vi logstash-indexer.conf


input{
  beats {
    port => 5044
    ssl => true
    ssl_certificate => ssl crt 파일 위치
    ssl_key => ssl private 파일 위치
  }
}
filter {

}
output {
  elasticsearch {
    hosts => ["localhost:9200"]
    sniffing => true
    manage_template => false
    index => "filebeats-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
  }
}

  - 기본적인 logstahs config 내용이며, input에 beats input plugin을 작성하고, 원하는 log 처리 format은 filter에서 작성하여야 한다, 마지막으로 output을 elasticsearch로 연결 시키며, 내부적으로 실행하기 때문에 localhost로 host를 지정하였다. elasticsearch 정의 중 index는 database라고 생각하면 되고 kibana에서 index로 검색할 수 있다.


  - logstash 설치 bin 폴더로 이동한다.

$ cd /opt/logstash/bin
$ ln -s /etc/logstash/conf.d/logstash-indexer.conf logstash-indexer.conf

 - logstash config 파일을 logstash 설치 폴더 의 bin/ 에 심볼릭링크로 연결 한다.


  - 설치가 다 되었으므로 logstash를 실행 시킨다.

$ ./logstash -f logstash-indexer.conf &

  - 원래 service로 실행이 되지만 이상하게 config가 실행이 안되어서 직접 실행시키는 방식으로 한다.

백그라운드 로 돌려야 하기 때문에 마지막에 ‘&’ 를 붙여서 실행 시켰다.


  • kibana
  - elasticsearch  를 pubic key를 등록 하였으니 바로 kibana를 설치 할 수 있다.
$ echo "deb http://packages.elastic.co/kibana/4.5/debian stable main" | sudo tee -a /etc/apt/sources.list
$ sudo apt-get update && sudo apt-get install kibana

  - elasticsearch 와 같은 방식으로 설치를 완료 할 수 있다.

  - kibana port는 5601이므로, http://server_ip:5601 로 접속 확인이 가능하다.



  • generate ssl 

  - client real server가 filebeat로 log를 전송(ship)하기 위해 ssl key pair가 필요하다.

  - crt와 key가 설치될 위치를 지정 하여 디렉토리를 만든다.

$ sudo mkdir -p sudo /etc/ship/certs && sudo mkdir /etc/ship/keys

  - dns 가 없고 ip 주소만 있기 때문에 openssl config에 서버 private ip를 등록하여야 한다.

$ sudo vi  /etc/ssl/openssl.cnf

  - config 파일에서  [ v3_ca ] 영역을 찾는다.

  - subjectAltName = IP: EC2_server_private_IP  방식으로 subjectAltName을 추가 한다.

   * 꼭 ec2 private ip 를 추가 해야한다. 


  - 이제 ssl를 생성한다.

$ cd /etc/ship
$ sudo openssl req -config /etc/ssl/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout keys/logstash-forwarder.key -out certs/logstash-forwarder.crt

  - 생성되어진 파일 2개를 각 client real server 에 같은 위치에 copy & paste 해준다.


=> 여기까지 진행을 하게 되면 기본적인 log server 에 세팅은 완료 하였다. 

  각 포트별로 접속 하여 접속이 잘되어지면다면 수집할 대상의 real server에 filebeat를 설치 해보자.



Client Real Server


  • filebeat

  - filebeat도 elasticsearch public key가 같으므로 각 서버에 삽입 한다.

$ wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

  - 그 후 apt source list에 filebeat를 추가 하고 install을 진행 한다.

$ echo "deb https://packages.elastic.co/beats/apt stable main" |  sudo tee -a /etc/apt/sources.list.d/beats.list

$ sudo apt-get update

$ sudo apt-get install filebeat

  - 설치 완료 후 filebeat config를 수정을 한다.

$ sudo vi /etc/filebeat/filebeat.yml

 - 각 confi에 관련된 사항은 https://www.elastic.co/guide/en/beats/filebeat/current/configuring-howto-filebeat.html 에서 자세히 알아보고 간단히 설명하겠다.



  * 주의 사항  : yaml은 문법이 굉장히 민감하다. tab을 쓰지말고 스페이스바를 사용하고, 콜론(:)이나 하이픈(-)을 사용시 다음칸은 띄어쓰기를 하여야 한다. 하위 계층은 항상 공백을 주어 들여쓰기를 해주어야 한다.



  - prospectors 섹션은 수집하고자 하는 로그들의 input들을 정의하느 곳이라고 생각 하면 된다. 하이픈(-) 으로 각 로그 input 섹션을 구분하여 multiple 하게 수집할 수 있게 도와준다.

  - prospectors 섹션은 각자에 맞게 수정 진행 한다.

  - output 섹션을 찾으면 아래 elasticsearch 부분이 있다. 우린 logstash로 ship하기 때문에  #으로 모두 주석 처리 한다. 그리고 내려가면 logstash가 주석처리 되어 있으므로 주석을 해제 한다. 

  - hosts: [“ec2_log_server_private_ip:5044”] 를 작성하여 열어준다.

  - 5044 port를 통해 filebeat가 접근하기 때문에 port도 지정해준다.

  - 그다음 아래로 내려서 copy & paste 해준 ssl을 지정해준다.

    tls:

      # List of root certificates for HTTPS server verifications

      certificate_authorities: [“/etc/ship/certs/logstash-forwarder.crt"]

  - 모든 수정이 완료 되었고 저장 후 재시작 한다.

$ sudo service filebeat restart

  - 이제 모든 세팅이 완료 되었고 모든 서비스가 실행 되어지고 있기 때문에 로그 수집부터 저장 까지 진행 되어진다.


  • log server 에 접속 하여 curl 을 통해 elasticsearch 쿼리로 수집 결과를 테스트 해볼 수 있다.
$ curl -XGET 'http://localhost:9200/filebeats*/_search?pretty'


현재까지 진행 한 것으로는 결과물을 볼 수 없습니다. 

logstash config도 제대로 설정해야하며, 각 서버 로그파일에 맞게 filebeat config에 prospector도 수정해야합니다.



고찰 

위와 같이 다 해도 접속이 안되었습니다. 정말 하루종일 삽질 했죠

결국 원인은 EC2 인스턴스의 security group에 inbound에 각 시스템 포트를 개방하지 않았던게 문제였습니다.

 EC2 인스턴스 생성시 기본 security group에 

5044 / 5601 / 9200 port를 개방 후에 테스트 해보시길 바랍니다.~

저작자 표시
신고
3 Comments
댓글쓰기 폼