본문 바로가기

목록이 없습니다.

[elasticsearch] ELK 스택 서버 구성

Server/Elastic Search
    반응형

    검색엔진이라는 말은 포털사이트를 이용해본적이 있는 사람이라면 한번쯤은 들어봤을 것입니다. 듣기만 들어봤지 정말 어떤 기능을 하는지는 잘 모를것이라 생각이 듭니다. 포털사이트의 구조를 간단하게 분석해보면 크롤링 + 검색엔진이라고 볼 수도 있을 것 같습니다. 크롤링이란 데이터를 수집하는것을 의미하고 검색엔진이라는 툴로 수집한 데이터를 색인하고 색인을 통해서 빠른 속도로 사용자가 검색한 것을 찾아주는 서비스라고 생각합니다. 그 중에서 오늘은 검색엔진 서버를 구축하는 것을 정리해보려고 합니다. 검색엔진도 종류가 있겠지만 그 중에 엘라스틱서치(Elasticsearch)를 정리해보려고 합니다.

     


     

    서버생성

    저는 NCloud라는 네이버 클라우드 서비스를 이용해서 구축해보았습니다. 포털사이트를 구축하는게 목적이 아닌 거대한 데이터를 색인하고 빠르게 검색해서 사용자에게 전달하기 위해서 검색엔진을 선택했습니다. 서버는 우분투 서버를 생성했다는 가정하게 진행하겠습니다.

     

    개발계정 생성 ( 생략가능 )

    root계정으로 구축할 경우 보안상 위험한 부분이 있기 때문에 서버를 생성하고나서 제일 먼저 하는 작업이 개발용 계정을 생성하는 작업입니다. 이 과정은 생략하셔도 무방합니다.

     

     

    $ adduser apptm

    위의 adduser 명령어로 계정을 생성할 경우 홈디렉토리가 자동으로 생성되어집니다. 그에 반해 useradd 명령어로 생성할 경우 홈디렉토리가 생성되지 않습니다. 홈디렉토리가 필요없는경우 useradd 명령어로 생성하시면 됩니다.

     

     

    설치 디렉토리 생성

    엘라스틱서치를 설치할 디렉토리를 만들겠습니다.

     

    $ sudo mkdir /apps
    $ sudo chown apptm:apptm /apps

    원하는 위치에 디렉토리를 만드시면 됩니다. 저는 루트디렉토리 아래에 만들기 때문에 sudo 권한으로 진행했습니다.

     

    가상 메모리 최대값 증가

    엘라스틱서치를 실행하는데 필요한 가상 메모리 최대값을 설정해줍니다. 가상 메모리 최대값이 부족한 경우 로컬에서는 실행이 될 수는 있으나 외부에서 접속을 허용한 설정으로 엘라스틱서치 실행 시 실행이 안될 수 있습니다.

     

    $ sudo sysctl -w vm.max_map_count=262144

     

    JAVA 설치

    $ sudo apt-get update
    
    $ sudo apt-get install openjdk-8-jdk
    
    $ java -version

     

    JAVA 메모리 설정 (8g - 서버 사양에 맞게)

    JAVA 메모리 설정은 각자 서버의 사양에 알맞게 설정해주셔야 합니다. 너무 많이 설정할 경우 JAVA가 동작하지 않을 수 있습니다. 여기서는 8GB에 해당하지만 저사양의 서버의 경우 512m(512MB), 256m로 설정해주셔도 됩니다.

     

    $ vi /home/apptm/.configure
    
    # JAVA OPTION
    export _JAVA_OPTIONS='-Xms8g -Xmx8g'
    
    $ vi /home/apptm/.bashrc
    맨 아래에 추가
    
    # CUSTOM CONFIGURE
    . .configure
    
    $ soource /home/apptm/.configure

     

    elasticsearch 설치

    - 설치 폴더 이동	
    $ cd /apps	
    
    - elasticsearch 다운로드	
    $ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.3.tar.gz	
    
    - elasticsearch 압축 해제
    $ tar -xvf /apps/elasticsearch-6.4.3.tar.gz
    
    - elasticsearch 데몬 실행(pid log 생성) shell script 작성
    $ vim /apps/elasticsearch-6.4.3/startup.sh
    
    # shell script(startup.sh)
    echo '##### START ELASTIC SEARCH #####'
    /apps/elasticsearch-6.4.3/bin/elasticsearch -d -p /apps/elasticsearch-6.4.3/es_pid
    
    $ chmod 755 /apps/elasticsearch-6.4.3/startup.sh
    
    - elasticsearch 데몬 종료 shell script 작성
    $ vim /apps/elasticsearch-6.4.3/shutdown.sh
    
    # shell script(shutdown.sh)
    echo '##### STOP ELASTIC SEARCH #####'
    kill `cat es_pid`
    
    $ chmod 755 /apps/elasticsearch-6.4.3/shutdown.sh
    
    - elasticsearch 외부 접속 허용
    $ vim /apps/elasticsearch-6.4.3/config/elasticsearch.yml
    network.host: 0.0.0.0으로 수정
    
    - elasticsearch 실행
    $ /apps/elasticsearch-6.4.3/startup.sh
    
    - elasticsearch 확인
    $ ps -ef | grep elasticsearch
    
    - elasticsearch 종료
    $ /apps/elasticsearch-6.4.3/shutdown.sh
    
    - elasticsearch 실행 확인
    $ curl -XGET ip주소:9200
    
    {
    	"name" : "Q_UMQ2R",
    	"cluster_name" : "elasticsearch",
    	"cluster_uuid" : "VPSrSJrWTOyVT60u7_ptdg",
    	"version" : {
    		"number" : "6.4.3",
    		"build_flavor" : "default",
    		"build_type" : "tar",
    		"build_hash" : "fe40335",
    		"build_date" : "2018-10-30T23:17:19.084789Z",
    		"build_snapshot" : false,
    		"lucene_version" : "7.4.0",
    		"minimum_wire_compatibility_version" : "5.6.0",
    		"minimum_index_compatibility_version" : "5.0.0"
    	},
    	"tagline" : "You Know, for Search"
    }

     

    kibana 설치

    - kibana 설치
    $ cd /apps
    $ wget https://artifacts.elastic.co/downloads/kibana/kibana-6.4.3-linux-x86_64.tar.gz
    $ tar -xvf /apps/kibana-6.4.3-linux-x86_64.tar.gz
    $ mv /apps/kibana-6.4.3-linux-x86_64 /apps/kibana-6.4.3
    
    - kibana.yml 속성 수정
    $ vim /apps/kibana-6.4.3/config/kibana.yml
    
    server.port: 5601 # kibana port 설정
    server.host: "0.0.0.0" # 외부접속 허용
    elasticsearch.url: "http://엘라스틱IP주소:9200" # elasticsearch url 지정(같은 곳에 설치할 경우 localhost)
    pid.file: /apps/kibana-6.4.3/kibana.pid # kibana pid 파일 생성
    
    - startup.sh 작성
    $ vim /apps/kibana-6.4.3/startup.sh
    
    /apps/kibana-6.4.3/bin/kibana &
    echo '##### START KIBANA #####'
    
    $ chmod 755 /apps/kibana-6.4.3/startup.sh
    
    - shutdown.sh 작성
    $ vim /apps/kibana-6.4.3/shutdown.sh
    
    kill `cat kibana.pid`
    echo '##### STOP KIBANA #####'
    rm -rf /apps/kibana-6.4.3/kibana.pid
    
    $ chmod 755 /apps/kibana-6.4.3/shutdown.sh
    
    - kibana 실행
    $ /apps/kibana-6.4.3/startup.sh
    
    - 확인
    웹브라우저 접속 http://ip주소:5601

     

    logstash 설치

     

    - logstash 설치
    $ cd /apps
    $ wget https://artifacts.elastic.co/downloads/logstash/logstash-6.6.1.tar.gz
    $ tar -xvf /apps/logstash-6.6.1.tar.gz
    
    - mysql connector lib 다운로드
    $ mkdir /apps/logstash-6.6.1/lib/drivers
    $ cd /apps/logstash-6.6.1/lib/drivers
    $ wget http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.5/mysql-connector-java-5.1.5.jar
    
    - db.conf 작성
    $ vim /apps/logstash-6.6.1/db.conf
    
    input {
    	jdbc {
    			jdbc_connection_string => "jdbc:mysql://db_ip_주소:3306/ebricmall?characterEncoding=utf8"
    			jdbc_user => "apptm"
    			jdbc_password => "apptm"
    			jdbc_driver_library => "/apps/logstash-6.6.1/lib/drivers/mysql-connector-java-5.1.5.jar"
    			jdbc_driver_class => "com.mysql.jdbc.Driver"
    			statement => "SELECT columns1, columns2, ... FROM table_name"
    			jdbc_pool_timeout => 3000
    			jdbc_paging_enabled => true # page 처리하여 1page씩 import
    			jdbc_page_size => 100000 # 1page 개수
    			jdbc_validate_connection => true
    	}
    }
    output {
    		elasticsearch {
    				hosts => ["엘라스틱IP주소:9200"]
    				index => "prod_keyword_index"
    				document_type => "prod_keyword"
    				document_id => "%{prod_keyword_seq}"
    				hosts => "localhost"
    		}
    		stdout {
    				codec => rubydebug
    		}
    }
    
    - logstash 실행 하여 db import
    $ /apps/logstash-6.6.1/bin/logstash -f /apps/logstash-6.6.1/db.conf &

     


     

    감사합니다.

    반응형