[Elasticsearch] Part 2.0: The true story behind Elasticsearch storage requirements

Elastic/Elasticsearch 2015. 9. 16. 10:39

원본글)


한 줄 요약)

doc_values 와 index.codec 설정을 사용하면 좋다!!


storage 용량을 압축을 통해서 15 ~ 25% 정도 절약 할 수 있다는 이야기 입니다.

더불어 주의 하셔야 할 점은 decompression 시 penalty 가 있다는 이야기도 있습니다. 

해결 방법(?)도 제시해 주고 있는데요. 

size 파라미터를 이용해서 size=0 으로 해서 사용하시면 됩니다.


압축 옵션의 경우 색인 시에는 성능 저하는 크기 않지만 질의 시에는 성능 저하가 있을 수 있습니다.


:

[Elastic] Elastic 제품들...

Elastic 2015. 9. 9. 10:30

Elasticsearch, Logstash, Kibana 를 주로 사용하고 있다 보니 다른 제품들은 크게 관심있게 보지를 않았습니다.

제가 관심 있게 보는건 저 한테 필요 하거나 오픈소스 이거나 인데요.

당연히 위에 제품들은 모두 제가 사용하고 있는 것들이고 오픈소스 입니다.


Elastic 에서 제공하고 있는 제품들은 아래 링크를 통해서 확인 하시면 되는데요.


제품 소개 링크) https://www.elastic.co/products


최근까지 제가 잘 못 알고 있던 제품이 있었는데 이것도 한번 사용해 보기 위해 elastic 제품들을 각각 한 줄로 정리해 보기로 했습니다.


Elasticsearch - 오픈소스 무료

루씬 기반의 분산 검색 엔진 입니다.


Logstash - 오픈소스 무료

다양한 input/filter/ouput/codec 들을 제공하는 collector 입니다.


Kibana - 오픈소스 무료

elasticsearch를 DB로 사용하는 visualization/dashboard 도구 입니다.


Packet Beat - 오픈소스 무료

OS 또는 Process 등에서 발생 하는 network 모니터링 도구 입니다.


Top Beat - 오픈소스 무료

기본적인 시스템(CPU, MEM, IO, DISK) 모니터링 도구 입니다.


Elasticsearch Hadoop Plugin - 오픈소스 무료

Hadoop component 들과 elasticsearch를 쉽게 연동 할 수 있도록 도와 주는 라이브러리 입니다.


Found - SaaS 형 서비스 유료

Cloud 환경에서 ELK 를 쉽게 구축하고 사용할 수 있도록 해주는 서비스 입니다.


Shield - 유료

ELK를 이용하여 기업에서 사용하기에는 부족했던 인증, 권한 등의 기능을 제공해 주는 제품 입니다.


Watcher - 유료

ELK를 이용하면서 아쉬웠던 alert 이나 notification 에 대한 기능을 제공해 주는 제품 입니다.


Marvel - 유료 (개발자 버전은 무료)

Elasticsearch에 대한 관리 및 모니터링을 제공하는 제품 입니다.


저는 기본적으로 ELK 기반으로 필요한건 다 만들어서 사용을 하고 있는 편입니다.

beats 도 역시 만들어서 사용하고 있었는데요. 

이건 한번 시도를 해봐야 겠내요. :)

:

[Elasticsearch] 2.0.0 beta 테스트를 위한 dependency 설정.

Elastic/Elasticsearch 2015. 8. 28. 12:27

오전에는 못찾았는데... 

지금은 2.0.0-bete1-SNAPSHOT 을 잘 찾내요.


===========================


기능 점검을 하기 위해서 maven dependency 수정을 해야 합니다.

beta 이고 snapshot 버전이다 보니 repository 설정을 제대로 해 놓지 않으면 jar 를 찾지 못하는 오류가 발생을 합니다.

혹시 테스트 해보실 분은 아래와 같이 정보 추가 또는 수정해 주시면 될 것 같습니다.


벌써 beta2 가 올라왔내요.


[pom.xml]

<elasticsearch.version>2.0.0-beta2-SNAPSHOT</elasticsearch.version>


<repositories>

  <repository>

    <id>elasticsearch-releases</id>

    <url>http://maven.elasticsearch.org/releases</url>

    <releases>

      <enabled>true</enabled>

    </releases>

    <snapshots>

      <enabled>false</enabled>

    </snapshots>

  </repository>

  <repository>

    <id>oss-snapshots</id>

    <name>Sonatype OSS Snapshots</name>

    <url>https://oss.sonatype.org/content/repositories/snapshots/</url>

  </repository>

</repositories>


<dependencies>

  <dependency>

    <groupId>org.elasticsearch</groupId>

    <artifactId>elasticsearch</artifactId>

    <version>${elasticsearch.version}</version>

    <type>jar</type>

  </dependency>

</dependencies>


:

[Elasticsearch] _id 와 _routing 이해하기.

Elastic/Elasticsearch 2015. 8. 27. 11:55

Elasticsearch에서 routing 기능은 다양하게 활용이 가능 합니다.

이게 무엇인지는 아래 elastic official document 를 먼저 읽어 보시면 좋을 것 같습니다.


[Reference. _routing]

https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-routing-field.html


위 문서의 요약 내용은 아래와 같습니다.

- store set to true

- index set to not_analyzed


여기서 not_analyzed로 설정 하는 이유는 shard routing 을 위한 shard id 를 구하기 위해서 입니다.

즉, 단일 구성의 key로 만들어야 routing 정보가 정해지기 때문입니다.


[Reference. _id]

https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-id-field.html

※ _routing 과 동일한 mapping 속성을 갖습니다.


_id와 _routing 의 이해


기본적으로 문서를 색인하기 위해서는 문서의 unique id 가 필요 합니다.

elasticsearch 에서는 _id 라는 필드를 이용해서 문서의 uniqueness 를 보장해 주고 있는데요.

이 값은 hash 알고리즘을 이용해서 색인할 shard id 를 생성 합니다. 

또한, _id 값은 Get API 를 이용해서  문서를 직접 access 할 수 있게 해줍니다.


[Get API]

$ curl -XGET http://localhost:9200/INDEX/TYPE/_id


_routing은 쉽게는 문서에 대한 그룹이나 분류에 활용을 할 수 있는 기능이라고 이해 하시면 좋습니다.

즉, 문서를 색인 할 때 같은 분류에 속하는 문서들을 특정 shard로 색인을 하고 검색 시에도 모든 shard를 대상으로 하지 않기 때문에 성능적인 부분이나 활용에서도 유용합니다.


_routing도 _id 와 동일하게 해당 값을 이용해서 shard id 를 구한다는 점에서 동일하며 mapping 설정도 동일 합니다.

차이점이 있다면 _id 는 문서 자체에 대한 routing 이고, _routing 은 문서 집단 또는 그룹에 대한 routing 이라는 것입니다.

또한 검색 입장에서는 _id 는 문서 하나를 검색해서 가져오지만, _routing 은 지정된 key 값에 의한 shard 들을 대상으로 검색을 하게 됩니다.


아래는 REST API 형태의 예제 입니다.


※ _id 가 1 인 문서 검색

$ curl -XGET http://localhost:9200/INDEX/TYPE/1


※ _routing 을 하나 만 지정한 문서 검색 (routing 값은 sports)

$ curl -XGET http://localhost:9200/_search?routing=sports

sports 에 해당하는 shard id 가 0 이라면 0 번 shard 로만 검색 질의가 실행 됩니다.


※ _routing 을 두 개 지정한 문서 검색 (routing 값은 sports, entertainment)

$ curl -XGET http://localhost:9200/_search?routing=sports,entertainment

sports 에 해당하는 shard id 가 0이고 entertainment 에 해당하는 shard id 가 1 이라면 0과 1번 shard 로만 검색 질의가 실행 됩니다.


:

[Logstash] 플러그인 작성 시 register method.

Elastic/Logstash 2015. 8. 26. 11:53

플러그인을 처음 만들다 보면 필요 없겠다 싶은 코드를 별 생각 없이 지우게 되는 경우가 있습니다.

일단 먼저 실행에 옮기는 잘못으로 인해서 오류를 경험 하게 되는데요.

저 역시 비슷한 실수를 해서 또 하지 말자는 의미로 공유해 봅니다.


기본적으로 생성된 플러그인을 등록하는 과정이 코드 상에 포함이 되어 있어야 합니다.

이런 등록 관련 코드가 없다면 아래의 에러 메시지를 경험 하게 됩니다.


[logstash 실행 시 에러 메시지]

The error reported is:

  LogStash::Inputs::Telnet#register must be overidden


해당 문구는 base.rb 에 들어 있습니다.

  def register
    raise "#{self.class}#register must be overidden"
  end # def register


이 에러 메시지는 구현한 플러스인에 register 함수가 없기 때문에 발생 하는 것입니다.

아래는 logstash-input-example 플러그인에 포함된 코드입니다.

  def register

      @host = Socket.gethostname

  end # def register


제가 한 실 수는 @host 정보가 필요 없어서 저 register method 부분을 몽땅 삭제 한 것입니다.

다른 분들은 이 같은 초딩같은 실수는 하지 마시길 바랍니다. ^^;

: