• (1/3)ELK Stack 설치 (Elasticsearch+Kibana+Logstash: elasticsearch 버전 6.4.0 기준)- Debian 9 [프레임워크/기타]
  • 공돌이
    조회 수: 4036, 2018.09.20 09:54:21
  • 결심한 대로 일주일에 하나씩 글도 올리는 겸, 프로젝트에 검색엔진을 Elasticsearch로 구현작업 중에 정리 겸 해서 강좌형태로 시리즈 올리려고 합니다.

    강좌는 총 3개의 파트로 구성할 예정이며 오늘은 그 첫번째입니다.

     

    1) Elasticsearch Product의 3총사인 ELK Stack 설치

    2) 한글 형태소분석기 (은전한닢) 설치 ==> Nori로 변경!

    3) Logstash를 이용해서 MYSQL Pipeline 만들기

     

     

    작업환경:

    Debian 9 Stretch

    NGINX

     

     

    사전 준비

    1. 시스템 패키지 업데이트 & 필요한 패키지들 사전설치
     
    sudo apt-get update && sudo apt-get upgrade
    sudo apt-get install apt-transport-https software-properties-common wget
    1. java 설치
     
    sudo apt install openjdk-8-jdk

    제대로 설치가 되었는지 확인하려면,

     
    java -version

    해서 openjdk 버전과 런타임정보가 나타나면 준비가 완료되었음.

    Elasticsearch 설치

     
    wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
    echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
    sudo apt-get update
     
    sudo apt-get install elasticsearch
    • 외부에서의 접속을 제한하려면 /etc/elasticsearch/elasticsearch.yml 파일을 열어 아래와 같이 설정
     
    # ---------------------------------- Network -----------------------------------
    #
    # Set the bind address to a specific IP (IPv4 or IPv6):
    #
    #network.host: 192.168.0.1
    network.host: localhost

    필요한 사전 설정이 끝났다면 아래와 같이 서비스로 등록하고 서비스 시작

     
    sudo systemctl restart elasticsearch
    sudo systemctl enable elasticsearch

    서비스가 잘 시작 되었는지 확인

     
    curl -X GET http://localhost:9200

    아래와 비슷한 메시지가 나오면 성공임

     
    {
    "name": "H5JpOy7",
    "cluster_name": "elasticsearch",
    "cluster_uuid": "k_kZmpgASx6WuMnQyjc86g",
    "version": {
    "number": "6.4.0",
    "build_flavor": "default",
    "build_type": "deb",
    "build_hash": "595516e",
    "build_date": "2018-08-17T23:18:47.308994Z",
    "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 설치

    Elasticsearch 에 있는 데이터를 차트나 그래프로 시각화해서 보여주는 관리 툴입니다. 콘솔에서 편리하게 전용 rest client로 사용할 수 있으므로 설치하면 좋음.

     
    sudo apt-get install kibana

    /etc/kibana/kibana.yml 파일에서 환경설정
    elasticsearch 가 설치되어있어서 연결할 서버 지정 (로컬에 연결할 경우에는 localhost)

     
    # Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.
    # The default is 'localhost', which usually means remote machines will not be able to connect.
    # To allow connections from remote users, set this parameter to a non-loopback address.
    server.host: "localhost"

    필요한 설정이 완료되었으면 서비스 등록 & 시작

     
    sudo systemctl restart kibana
    sudo systemctl enable kibana
     

    서비스가 잘 시작되었는지 확인하려면,

    http://localhost:5601 에 브라우저로 접속 (localhost에 설치한 경우)

    Bonus: nginx reverse proxy를 이용해서 Kibana 접속하기 ( with 암호)

    kibana/elasticsearch 서버를 public ip를 이용해서 접속하는 경우, 종종 안전상의 이유로 reverse proxy를 사용합니다.
    보안은 간단하게 암호를 걸어서 접속제한 하겠습니다.
    추가로 SSL 접속을 거는 부분은 별도로 다루는 것으로 하고 여기서는 80포트로 http 접속을 한다고 가정하겠습니다.

    제가 nginx를 사용하는 관계로 nginx 기준으로 설명합니다.

    nginx 설치(이미설치되어있다면 skip)
    그냥 간단하게 sudo apt-get install nginx 해도 되지만, debian 패키지 업데이트가 좀 보수적인 관계로, 가능한 최신버전을 설치하려면 nginx 공식저장소를 통해서 아래와 같이 합니다.

    1. 저장소 추가 (debian 9 stretch 기준. 버전이 다르면 stretch를 해당 버전으로 변경)
     
    echo "deb http://nginx.org/packages/mainline/debian/ stretch nginx" | sudo tee -a /etc/apt/sources.list.d/nginx.list
    1. signing key 등록
     
    sudo wget http://nginx.org/keys/nginx_signing.key
    sudo apt-key add nginx_signing.key
    1. 저장소 리프레시 후 설치
     
    sudo apt-get update
    sudo apt-get install nginx
     
    1. 서비스 등록&시작
     
    sudo systemctl start nginx
    sudo systemctl enable nginx

    nginx 설정

    1. site접속시 사용할 id/pw 생성: 쉘에서 실행 (id를 kibana 로 설정한다고 가정)
     
    sudo sh -c "echo -n 'kibana' >> /etc/nginx/kibana.htpasswd"
    sudo sh -c "openssl passwd -apr1 >> /etc/nginx/kibana.htpasswd"

    암호까지 입력하면 /etc/nginx 디렉토리 하에 kibana.htpasswd 파일이 만들어짐 (파일명은 아무거나 가능)

    1. nginx 사이트 설정

    *이전에는 /etc/nginx/sites_available 하에 각 site설정파일을 넣고 /etc/nginx/sites_enabled 에 심링크로 사용할 설정파일을 생성했지만, debian9 부터는 /etc/nginx/conf.d/ 폴더 안에 그냥 사이트 설정파일을 만들어 넣으면 되도록 바뀐것 같음.

    /etc/nginx/conf.d/default.conf (기존의 사이트가 존재한다면 별도의 이름으로 conf파일을 생성 - 예를들어 kibana.conf)

     
    server {
    listen 80;
    ## www.abc.com( ip address)
    server_name www.abc.com;
     
    root /var/www;
    index index.html index.htm index.php;
     
    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/kibana.htpasswd;
     
    # - kibana
    location / {
    proxy_pass http://localhost:5601;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    }
    }
     

    conf 파일 설정이 끝나면 서버 설정에 오류가 없는지 테스트

     
    sudo nginx -t

    이상이 없으면 서버 재시작

     
    sudo service nginx restart

    이제 브라우저에서 localhost 접속해보면, 짠~ kibana가 나옵니다.

    logstash 설치

    logstash 는 외부 데이터소스로부터 데이터를 받아서 elasticsearch에 공급하는 역할. 예를 들어 mysql db에 있는 데이터를 검색을 위해 elasticsearch와 연동하는 경우.

    설치 및 시작은 간단.

     
    sudo apt-get install logstash
     
    sudo systemctl restart logstash
    sudo systemctl enable logstash

     

    이제 ELK 스택이 (최신버전으로) 잘 설치되었고, 서비스로도 등록되어 서버를 껐다 켜더라도 잘 실행됩니다.

    Elasticsearch는 상당히 강력한 기능을 가지고 있음에도 불구하고 자체적으로는 한글검색에 필요한 형태소 분석기능이 없는 까닭에 한글검색시 실망스러운 결과를 보여줍니다.

    그러나, 은전한닢 프로젝트 덕분에 elasticsearch의 한글처리에 대한 문제점을 상당부분 해소할수가 있지요.

    다음시간에는 은전한닢 프로젝트에서 만들어진 플러그인을 elasticsearch 6.4.0 에 설치하는 방법에 대해 알아보겠습니다.

    ==============================
    오홋! 모르고 있었는데 elasticsearch에서 얼마전에 한글 형태소분석기를 공식적으로 릴리즈했군요!
    Nori 라는 이름으로, 특이하게도 한국인이 아니고 한글을 거의(?) 모르는 프랑스인 개발자가 개발을 했다고 합니다.
    공식적으로 나왔으니 버전업할때마다 플러그인 수정해줘야 하는 번거로움도 없고, 은전한닢과 마찬가지로 Mecab-ko-dic 사전을 사용하고 있지만, 좀 더 효율적인 방식으로 사전을 빌드해서, 훨씬 작은 용량과 더 빠른 퍼포먼스를 보여준다고 하네요.
     
    2편은 그래서, 은전한닢 설치에 대해서 다루려던거를 급선회해서 nori 설치로 가겠습니다.