본문 바로가기
Elastic Stack

Elasticsearch5, Logstash5, Kibana5 and Redis (ELKR5 Stack) install CentOS 7

*Stack 구성


1)Logstash: 로그를 받아서 해당 로그를 elasticsearch 로 전달 하는 역할 을 한다.
2)Redis: filebeat 에서 전송한 로그를 redis의 list형태로 저장하여 logstash 로 보내는 mq 의 역할을 한다
3)Elasticsearch : 로그를 저장, 검색 인덱싱 하는 과정을 한다.
4)Kibana: nginx proxy 를 통하여 전달되는 웹인터페이스로 각 로그를 유저가 볼 수 있게 가시화 하는  역할을 한다.
5)Filebeat:각각의 target 이되는 서버는 로그를 filebeat 를 이용하여 logstash 에 로그를 보낸다. 로그를 전달하는 agent 역할을 한다

*설피 필요 패키지 다운 로그 및 시간 동기화

본격적인 설치 과정에 앞서, 설치에 필요한 패키지 및 시간 동기화를 진행 한다.
[root@localhost ~]# yum install wget net-tools gcc rdate unzipepel-release epel*  -y && rdate -s time.bora.net


* Install Redis

메세지큐의 역할을 하는 redis를 서버형태로 설치 한다.

[root@localhost ~]# cd /usr/local/
[root@localhost local]# wget http://download.redis.io/releases/redis-3.2.6.tar.gz
[root@localhost local]# tar xvzf redis-3.2.6.tar.gz
[root@localhost local]# mv redis-3.2.6 redis
[root@localhost local]# cd redis/deps/  
[root@localhost local]# make    geohash-int  hiredis  jemalloc  linenoise  lua
[root@localhost src]# cd ../src && make && make install
[root@localhost src]# cd ../utils/
[root@localhost utils]# ./install_server.sh
[root@localhost utils]# /etc/init.d/redis_6379 start

외부에서 redis에 로그를 전달 할 수 있도록 공인아이피도 bind 지시자에 추가 해 준다.
[root@localhost utils]#  vi /etc/redis/6379.conf
bind 127.0.0.1  1.1.1.1(공인아이피)
 
[root@pp_log src]# /etc/init.d/redis_6379 restart
[root@pp_log src]# netstat  -nltp | grep redis
tcp        0      0 1.1.1.1:6379     0.0.0.0:*               LISTEN      4890/redis-server 1
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      4890/redis-server 1

* Install Java 8
Elasticsearch, Logstash 는 java 기반으로 동작 하기 때문에 openJDK 를 이용하여 설치한다.
[root@localhost utils]# cd ~
[root@plocalhost _log ~]# cd ~ && wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u73-b02/jdk-8u73-linux-x64.rpm"
[root@pp_log ~]# yum -y localinstall jdk-8u73-linux-x64.rpm &&  rm -rf ~/jdk-8u*-linux-x64.rpm &&  java -version
java version "1.8.0_73"


* Install es5
Elasticsearch5 패키지 저장소를 등록후 Elasticsearch5를 설치 한다. 하위 버전과 다르게 해당 repo 등록시 
kibana,logstash 등도 동일한 버전으로 설치 가능 하게 제공 된다.

[root@localhost ~]# rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
[root@localhost ~]#  echo '[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md' | sudo tee /etc/yum.repos.d/elasticsearch.repo

[root@localhost ~]# yum -y install elasticsearch


elasticsearch.yml 파일을 수정하여, elasticsearch가 binding 될 아이피를 설정 한다.
해당 과정에서는 별도의 cluster 없이 진행 하기 때문에 locashot 로 설정 한다.

[root@localhost ~]#  vi /etc/elasticsearch/elasticsearch.yml

     54 # network.host: 192.168.0.1
     55 network.host: localhost

[root@localhost ~]#  systemctl start elasticsearch && systemctl enable elasticsearch
[root@localhost ~]# curl  http://localhost:9200
{
  "name" : "ecJIf0x",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "scfl5q7HQuGmfiZc-fvsRA",
  "version" : {
    "number" : "5.1.1",
    "build_hash" : "5395e21",
    "build_date" : "2016-12-06T12:36:15.409Z",
    "build_snapshot" : false,
    "lucene_version" : "6.3.0"
  },



* Install kibana5

es5 설치전 등록된 repo 를 이용하여 , kibana5 를 설치 한다.
[root@localhost ~]# yum -y install kibana
[root@localhost ~]# vi /etc/kibana/kibana.yml
      5 # server.host: "0.0.0.0"
      6 server.host: localhost
[root@localhost ~]# systemctl start kibana && systemctl enable kibana

* Install nginx


kibana 는 별도의 인증이 없기 때문에 nginx proxy 를 통하여 nginx 로 접근 하며, nginx 의 웹 인증을 이용하여 프록시 설정을 아래와 같이 진행 한다.

[root@localhost ~]# yum -y install nginx httpd-tools
[root@localhost ~]# htpasswd -c /etc/nginx/htpasswd.users admin
New password:
Re-type new password:
Adding password for user admin
[root@localhost ~]# vi /etc/nginx/nginx.conf
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        location / {


                auth_basic "Restricted Access";
                auth_basic_user_file /etc/nginx/htpasswd.users;

                proxy_set_header X-Forwarded-Host $host;
                proxy_set_header X-Forwarded-Server $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_pass http://localhost:5601;
        }
[root@localhost ~]# systemctl start nginx && systemctl enable nginx


* Install logstash5

logstash도 동일하게 설정된 es5 repo 를 이용하여, logstash5 를 yum 으로 설치 한다.
[root@localhost ~]# yum list | grep logstash       
logstash.noarch                           1:5.1.1-1                      elasticsearch-5.x
[root@localhost ~]# yum install logstash   

* Configure Logstash


[root@localhost ~]# vi /etc/logstash/conf.d/11-redis-input.conf 
input {
  redis {
  host => '1.1.1.1'
  port => '6379'
  data_type => 'list'
  key => 'filebeat'
  type => "redis-input"
  }
}

[root@localhost ~]# vim /etc/logstash/conf.d/14-syslog-filter.conf
filter {
  if [type] == "syslog" {
    grok {
        match => [ "message", "%{SYSLOGTIMESTAMP:syslog_timestamp}%{SPACE}%{WORD:syslog_hostname}%{SPACE}%{DATA:syslog_program}\:%{SPACE}%{GREEDYDATA:syslog_message}" ]
        add_field => [ "received_at", "%{@timestamp}" ]
        add_field => [ "received_from", "%{host}" ]
        }
        syslog_pri { }
        }
}


[root@localhost ~]# vi /etc/logstash/conf.d/13-el5-output.conf       
output {
  elasticsearch {
      hosts => "localhost:9200"
  }
}



모든 설정이 끝나면 아래와 같이 logstash 를 재시작 한다.
[root@localhost tls]# systemctl restart logstash && systemctl enable logstash


정상적으로 logstash 가 실행 된다면 아래와 같이 정상적으로 로그를 확인 할 수 있다.
[root@localhost  src]# tail -f /var/log/logstash/logstash-plain.log

[2016-12-24T21:45:32,148][INFO ][logstash.pipeline        ] Pipeline main started
[2016-12-24T21:45:32,176][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}

*filebeat install ,configuration

해당 데모 에서는 ELK 서버 자체의 syslog 를 수집 하기 위해 ELK 서버 자체에 filebeat 를 설치 하여, 로그를 전송 하게 한다.

[root@localhost src]#  yum -y install filebeat
[root@localhost src]# vi /etc/filebeat/filebeat.yml

#=========================== Filebeat prospectors =============================
filebeat.prospectors:

# Each - is a prospector. Most options can be set at the prospector level, so
# you can use different prospectors for various configurations.
# Below are the prospector specific configurations.

- input_type: log
  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    #- /var/log/*.log
     - /var/log/messages
    #- c:\programdata\elasticsearch\logs\*
  document_type: syslog

.. 생략..
#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
  # Array of hosts to connect to.
  #hosts: ["localhost:9200"]

  # Optional protocol and basic auth credentials.
  #protocol: "https"
  #username: "elastic"
  #password: "changeme"


#----------------------------- redis output --------------------------------

output.redis:
  # Boolean flag to enable or disable the output module.
  enabled: true

  # The list of Redis servers to connect to. If load balancing is enabled, the
  # events are distributed to the servers in the list. If one server becomes
  # unreachable, the events are distributed to the reachable servers only.
  hosts: ["1.1.1.1:6379"]

  # The Redis port to use if hosts does not contain a port number. The default
  # is 6379.
  port: 6379

[root@localhost tls]# systemctl restart filebeat

*kibana setting 
웹 브라우저를 통하여 kibana 를 접속 하면 처음 접속시 index pattern 이 등록 된것이 없기 때문에 아래와 같이 index pattern 
설정 부분으로 들어 온다. index 는 logstash-* 로 설정 후 생성 한다.




정상적으로 될 경우 아래와 같이 필드를 확인 할 수 있다.


Discovery 를 통하여 로그를 확인 할 수 있다.
기본적인 메뉴는 하위 버전과 유사 하며, 설정 방법도 동일하다.






반응형