top bar

글 목록

2017년 5월 4일 목요일

[Elasticsearch] 5.x 버전에서 'head' 플러그인, 'bigdesk' 플러그인 적용 방법

개요



 정말 오랫만에 엘라스틱서치에 관한 포스팅을 하려고한다. 필자가 한창 다루던 시절의 엘라스틱서치의 버전은 1.x 대 중반 이었다. 하지만 그동안 엘라스틱 서치는 끊임없이 발전하여 2.x을 넘어 5.x버전의 엘라스틱서치가 릴리즈 되어 버렸다.

 그동안 어떤 스펙들이 추가되었고, 삭제되었는지는 차차 알아가야 하겠지만, 이제와서 엘라스틱서치를 설치하고 돌려보려니, 예전엔 아주 유용하게 쓰였던 'head' 와 'bigdesk' 플러그인을 이제는 'plug in' 하여 쓰지 못한다는 사실을 알게 되었다. 이유는 아래 문서에 잘 설명이 되어 있다.

https://www.elastic.co/kr/blog/running-site-plugins-with-elasticsearch-5-0

 요약하자면, 이제까지의 플러그인들은 말그대로 엘라스틱서치 클러스터 서버에 플러그 '인' 되어서 마치 웹서비스처럼 제공 되었다. 하지만 이것은 보안 취약점을 낳았고, 때문에 플러그인에 대한 지원이 되지 않는다(라고 이해했음 ㄷㄷ) 라는 것이었다. 대신에 기존의 플로그인을 대체할 'X-Pack' 이라는 서비스를 제공하는데, 아주 기본적인 Basic package를 제외하고는 유료인것 같다... ㄷㄷ

 하지만 방법은 있다. 각 플러그인을 'standalone' 으로 구동시키고, Elasticsearch 클러스터에 붙이는 것이다. 하나씩 알아보자.


Head 사용



비교적 간단하다.

1) git clone 으로 소스 내려받기

$ git clone git://github.com/mobz/elasticsearch-head.git

2) npm install

해당 소스의 루트 디렉토리에서, npm install 을 통해 의존성을 설치한다

$ npm install

3) npm 을 이용해 standalone server 를 구동

$ npm run start

> elasticsearch-head@0.0.0 start /Users/rover/Devspace
/elastic-practice/head
> grunt server

Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100

4) localhost:9100 으로 접속하여 확인
























Bigdesk 사용




일단 http://bigdesk.org/ 이곳에서 zip이든, tar든, 다운 받고 압축을 해제 한다.
압축을 해제 하면 아래와 같은 파일들이 보일 것이다.

$ tree bigdesk -L 1
bigdesk
├── LICENSE
├── NOTICE
├── README.md
├── bigdesk-1.0.0.jpg
├── bigdesk-2.0.0-SNAPSHOT.jpg
├── css
├── images
├── index.html
└── js


여기서 그냥 index.html 을 브라우져로 연다. 그리고 ES node REST endpoint 의 텍스트 필드에 'localhost:9200' 으로 입력하고 'connection' 을 클릭한다.

어찌보면 매우 간단한 standalone 방법인데,
위와 같이 하면 아래와 같은 alert 창을 볼 것이다.












어찌된 일인지 버전을 막아 놓았다.
그래서... 다른 방법이 없어 자바스크립트 소스를 조금 손대 보았다.

자바스크립트 소스를 뒤져보면, js/store/BigdeskStore.js 파일에 위의 버전을 체크하는 로직이 숨어있다. 아래와 같다

version = version.number;
var _vArray = version.split(".");
if (_vArray.length > 2 && _model.checkVersion(_vArray)) {
    _model.versionVerified(version);
    _model.initCluster(connection);
} else {
    _model.yellAboutVersion(version);
}

'_model.checkVersion' 함수에서 버전을 체크 한 후, false 일 경우 _model.yellAboutVersion 함수를 호출한다.

yellAboutVersion: function(version) {
    var message =
        "*********************************\n" +
        "Bigdesk may not work correctly!\n" +
        "Found ES node version: " + version + "\n" +
        "Requires ES node version: >= 1.0.0.RC1\n" +
        "*********************************";
    console.log(message);
    if (alert) { alert(message); }
}

따라서.... 저 버전을 체크하는 if else 문을 제거하고, 바로 _model.initCluster 함수를 호출하게 했다. 그렇게 되면 connection에서 가져온 클러스터 정보를 model에 세팅하게 되고, 아래처럼 정상적으로 클러스터 현황이 모니터링 된다.




















결론



불과 몇년전에 비해 엘라스틱서치는 많은 기능이 추가/제거 되었고 개선되었다.
그러한 흐름속에서 built-in 방식으로 사용되었던 플러그인들이 어떠한 이슈(위에서 설명한 것처럼 보안 이슈 등등)로 인해 없어지는건 자연 스러울 지도 모르겠다.

어찌됬든, 사라진 플러그인을 실무에 정식으로 사용하는건 무리가 있겠으나, 뭐 학습용으로는 괜찮지 싶다.

그리고 'X-pack' 이라는것이 일단은 유료니까..




댓글 없음:

댓글 쓰기