[Logstash] grok pattern test site.
Elastic/Logstash 2015. 11. 27. 11:38logstash grok 디버그용 웹사이트 입니다.
누군가 알려주셔서 일단 기록해 봅니다.
[Grok Debugger]
[Test grok pattern]
'Elastic'에 해당되는 글 498건
[Logstash] grok pattern test site.Elastic/Logstash 2015. 11. 27. 11:38logstash grok 디버그용 웹사이트 입니다. 누군가 알려주셔서 일단 기록해 봅니다. [Grok Debugger] [Test grok pattern] [Elasticsearch - The Definitive Guide] Scale HorizontallyElastic/TheDefinitiveGuide 2015. 11. 24. 17:46원본링크) https://www.elastic.co/guide/en/elasticsearch/guide/current/_scale_horizontally.html 성능 확보를 위한 가장 쉬운 방법은 scale up 또는 out 입니다. 여기서는 scale out 에 대한 재밌는(?) 글이 있어 뽑아 봤습니다. Of course, just having more replica shards on the same number of nodes doesn’t increase our performance at all because each shard has access to a smaller fraction of its node’s resources. You need to add hardware to increase throughput. 내용은 정말 별거 없습니다. - 같은 노드 수에 replica shard만 늘린다고 성능이 좋아 지지 않는다. - 성능을 향상 시키고 싶으면 장비를 더 넣어라. 이상입니다. [Elasticsearch - The Definitive Guide] An Empty ClusterElastic/TheDefinitiveGuide 2015. 11. 24. 17:04원본링크) https://www.elastic.co/guide/en/elasticsearch/guide/current/_an_empty_cluster.html Elasitcsearch에가 이야기 하는 master node 의 역할 과 주의 사항이랄까요? 아래는 원문에 대한 Snippet 입니다. One node in the cluster is elected to be the master node, which is in charge of managing cluster-wide changes like creating or deleting an index, or adding or removing a node from the cluster. The master node does not need to be involved in document-level changes or searches, which means that having just one master node will not become a bottleneck as traffic grows. Any node can become the master. Our example cluster has only one node, so it performs the master role. [마스터 노드가 하는 일?] 인덱스 생성/삭제 노드 추가/제거 [마스터 노드에서 하면 안되는 일?] 문서 레벨의 변경 작업 검색 하면 안될 일은 트래픽 증가 시 병목 현상이 마스터 노드에서 발생 하면 안되기 때문 입니다. (장애 납니다. ^^;) [Elasticsearch - The Definitive Guide] Indexing Employee DocumentsElastic/TheDefinitiveGuide 2015. 11. 24. 16:10원문 링크) https://www.elastic.co/guide/en/elasticsearch/guide/current/_indexing_employee_documents.html 예전에 비슷한 내용으로 언급한 적이 있었는데, the definitive guide 에도 잘 정리가 되어 있어서 공유해 봅니다. Index Versus Index Versus Index You may already have noticed that the word index is overloaded with several meanings in the context of Elasticsearch. A little clarification is necessary: Index (noun) As explained previously, an index is like a database in a traditional relational database. It is the place to store related documents. The plural of index is indices or indexes. Index (verb) To index a document is to store a document in an index (noun) so that it can be retrieved and queried. It is much like the INSERT keyword in SQL except that, if the document already exists, the new document would replace the old. Inverted index Relational databases add an index, such as a B-tree index, to specific columns in order to improve the speed of data retrieval. Elasticsearch and Lucene use a structure called an inv erted index for exactly the same purpose. By default, every field in a document is indexed (has an inverted index) and thus is searchable. A field without an inverted index is not searchable. We discuss inverted indexes in m ore detail in Inverted Index. 보통 우리도 이야기 할 때 그냥 인덱스 라고 합니다. 하지만 이건 앞뒤 문맥을 바탕으로 위와 같이 명사인지 동사인지 판단 해야 합니다. 간혹 루씬 기반의 검색엔진 개발이나 서비스 개발을 안해보신 분들의 경우 인덱스라는 용어에 대해서 헷갈려 하시는 분들도 있습니다. 이번에 한번 집고 넣어 가시면 좋지 않을까 생각 합니다. Inverted index 즉, 우리는 역인덱스 라고 부릅니다. 이것은 루씬에서 사용하는 색인된 데이터베이스 파일(?) 이라고 하면 쉽게 이해가 되지 않을까 합니다. (그리고 이 inverted index 정보가 있어야 검색이 가능 합니다.) [Elasticsearch] 한글 자모 형태소 분석기 플러그인.Elastic/Elasticsearch 2015. 11. 20. 00:07짜집기 코드를 활용해서 플러그인을 만들어 봤습니다. 소스 코드는 아래에서 받아 보실 수 있습니다. [repository] https://github.com/HowookJeong/elasticsearch-analysis-hangueljamo [빌드방법] $ mvn clean package
[Breaking changes in 2.0] translated by 서철규.Elastic/Elasticsearch 2015. 11. 16. 17:47내용이 많아서 그냥 저도원본 읽어 보는게 다였는데 Elasticsearch 유저그룹의 #서철규 님이 번역한 문서를 공유해 주셨습니다. 그래서 자료 저장 겸 ㅎㅎ 허락 받고 올려 봅니다. 원문) https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes-2.0.html 페북유저그룹) https://www.facebook.com/groups/elasticsearch.kr/909640302455144 첨부문서)
자료 감사합니다. :) [Elasticsearch] arirang analyzer offset 추출 오류.Elastic/Elasticsearch 2015. 11. 10. 15:38[아래 문제 회피] 기본적으로 pairmap 관련 기능을 사용하지 않으면 문제를 회피 할 수 있습니다. 더 근본적으로는 관련 기능에 대한 개선이 필요 하겠지만 일단 빠르게 해결 하기 위해서 코드를 제거해 보겠습니다. 대상파일) KoreanTokenizer.java 삭제 대상코드) if(pairstack.size()>0 && pairstack.get(0)==c) { pairstack.remove(0); continue; } int closechar = getPairChar(c); if(closechar!=0) { if((pairstack.size()==0 || pairstack.get(0)!=closechar) && length>0) { pairstack.add(0,closechar); break; } else { pairstack.add(0,closechar); continue; } } ▶ 위 코드를 주석 처리 후 빌드해서 배포 하시면 됩니다. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 최근에 arirang analyzer plugin을 만들어서 elasticsearch에서 사용하고 있습니다. 사용하다 발견된 버그 공유 합니다. [색인원본문서] (‘14.8월)의 일환으로 ’15.3.3 상반기중(행복서울대학교 등 활용) [Arirang Analyzed] { "tokens": [ { "token": "14", "start_offset": 2, "end_offset": 4, "type": "word", "position": 0 }, { "token": "8월", "start_offset": 5, "end_offset": 7, "type": "korean", "position": 1 }, { "token": "의", "start_offset": 8, "end_offset": 9, "type": "korean", "position": 2 }, { "token": "일환", "start_offset": 10, "end_offset": 12, "type": "korean", "position": 3 }, { "token": "15", "start_offset": 16, "end_offset": 18, "type": "word", "position": 4 }, { "token": "3", "start_offset": 19, "end_offset": 20, "type": "word", "position": 5 }, { "token": "3", "start_offset": 21, "end_offset": 22, "type": "word", "position": 6 }, { "token": "상반기중행복서울대학교", "start_offset": 23, "end_offset": 34, "type": "korean", "position": 7 }, { "token": "상반", "start_offset": 23, "end_offset": 25, "type": "korean", "position": 7 }, { "token": "기중", "start_offset": 25, "end_offset": 27, "type": "korean", "position": 8 }, { "token": "행복", "start_offset": 27, "end_offset": 29, "type": "korean", "position": 9 }, { "token": "서울", "start_offset": 29, "end_offset": 31, "type": "korean", "position": 10 }, { "token": "대학교", "start_offset": 31, "end_offset": 34, "type": "korean", "position": 11 }, { "token": "등", "start_offset": 36, "end_offset": 37, "type": "korean", "position": 12 }, { "token": "활용", "start_offset": 38, "end_offset": 40, "type": "korean", "position": 13 } ] } 여기서 보시면 "행복"에서 부터 offset 정보가 하나씩 줄어든것을 확인 할 수 있습니다. [원본 변경을 통한 문제해결 - 하나] (‘14.8월)의 일환으로 15.3.3 상반기중(행복서울대학교 등 활용) - ’15 (apostrophe) 제거 [원본 변경을 통한 문제해결 - 둘] (‘14.8월’)의 일환으로 ’15.3.3 상반기중(행복서울대학교 등 활용) - 8월’ (apostrophe) 추가 [원본 변경을 통한 문제해결 - 셋] (14.8월)의 일환으로 ’15.3.3 상반기중(행복서울대학교 등 활용) - ’14 (apostrophe) 제거 [원본 변경을 통한 문제해결 - 넷] ‘14.8월)의 일환으로 ’15.3.3 상반기중(행복서울대학교 등 활용) - ( 제거 [해결 방법?] - 복합 pairmap 구성에 대한 arirang analyzer 오류 수정 (tokenizer 와 filter 쪽 수정이 필요해 보입니다.) - 원본에 대한 character normalization 작업을 통해 filter 를 합니다. [Elasticsearch] lucene arirang analyzer 플러그인 적용 on elasticsearch 2.0Elastic/Elasticsearch 2015. 11. 4. 15:37elasticsearch 2.0 GA 기념으로 수명님의 lucene arirang 한글분석기 적용방법을 알아 보도록 하겠습니다. 이전에 작성된 elasticsearch analyzer arirang 은 아래 글 참고 부탁 드립니다. [Requirement] elasticsearch 2.0 jdk 1.7 이상 (elastic 에서 추천 하는 버전은 1.8 이상입니다.) maven 3.1 이상 arirang.lucene-analyzer-5.0-1.0.0.jar (http://cafe.naver.com/korlucene/1274) arirang-morph-1.0.0.jar (http://cafe.naver.com/korlucene/1274) [Analysis Plugins] https://www.elastic.co/guide/en/elasticsearch/plugins/2.0/analysis.html [Plugin 작성 시 변경 내용 - 하나] - es-plugin.properties 파일이 없어 지고 plugin-descriptor.properties 가 생겼습니다. - plugin-descriptor.properties 내용은 아래와 같습니다. classname=org.elasticsearch.plugin.analysis.arirang.AnalysisArirangPlugin name=arirang jvm=true java.version=1.7 site=false isolated=true description=Arirang plugin version=${project.version} elasticsearch.version=${elasticsearch.version} hash=${buildNumber} timestamp=${timestamp} ▶ 자세한 설명을 원하시는 분들은 아래 링크 참고 하시면 됩니다. [Plugin 작성 시 변경 내용 - 둘] - 기존에 상속 받았던 AbstractPlugin이 없어지고 Plugin을 상속 받아 구현하도록 변경 되었습니다. From. public class AnalysisArirangPlugin extends AbstractPlugin {...} To. public class AnalysisArirangPlugin extends Plugin {...} 그 밖에는 변경된 내용은 아래 arirang 에서 바뀐 부분이 적용된 내용이 전부 입니다. [Arirang 변경 내용] - KoreanAnalyzer 에서 lucene version 정보를 받았으나 이제는 정보를 받지 않습니다. From. analyzer = new KoreanAnalyzer(Lucene.VERSION.LUCENE_47); To. analyzer = new KoreanAnalyzer(); - KoreanTokenizer 에서는 기존에 reader 정보를 받았으나 이제는 정보를 받지 않습니다. From. return new KoreanTokenizer(reader); To. return new KoreanTokenizer(); [2.0 적용 시 바뀐 내용] - assemblies/plugin.xml을 수정 하였습니다. plugins 폴더에 zip 파일 올려 두고 압축 풀면 바로 동작 할 수 있도록 구성을 변경 하였습니다. <?xml version="1.0"?> <assembly> <id>plugin</id> <formats> <format>zip</format> </formats> <includeBaseDirectory>false</includeBaseDirectory> <files> <file> <source>lib/arirang.lucene-analyzer-5.0-1.0.0.jar</source> <outputDirectory>analysis-arirang</outputDirectory> </file> <file> <source>lib/arirang-morph-1.0.0.jar</source> <outputDirectory>analysis-arirang</outputDirectory> </file> <file> <source>target/elasticsearch-analysis-arirang-1.0.0.jar</source> <outputDirectory>analysis-arirang</outputDirectory> </file> <file> <source>${basedir}/src/main/resources/plugin-descriptor.properties</source> <outputDirectory>analysis-arirang</outputDirectory> <filtered>true</filtered> </file> </files> </assembly> 코드는 직관적이라서 쉽게 이해 하실 수 있을 거라 생각 합니다. 필요한 jar 파일들과 properties 파일을 analysis-arirang 이라는 폴더로 묶는 것입니다. <filtered>true</filtered> 옵션은 아래 링크 참고 하세요. (해당 파일이 filtering 되었는지 확인 하는 것입니다.) https://maven.apache.org/plugins/maven-assembly-plugin/assembly.html#class_file 여기서 plugin-descriptor.properties 파일이 포함이 안되어 있게 되면 elasticsearch 실행 시 에러가 발생하고 실행이 안됩니다. 주의 하셔야 하는 부분(?) 입니다. - plugin-descriptor.properties 파일 없을 때 에러 메시지 [2015-11-04 12:34:14,522][INFO ][node ] [Lady Jacqueline Falsworth Crichton] initializing ... Exception in thread "main" java.lang.IllegalStateException: Unable to initialize plugins Likely root cause: java.nio.file.NoSuchFileException: /Users/hwjeong/server/app/elasticsearch/elasticsearch-2.0.0/plugins/analysis-arirang/plugin-descriptor.properties at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86) at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102) at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107) at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214) at java.nio.file.Files.newByteChannel(Files.java:315) at java.nio.file.Files.newByteChannel(Files.java:361) at java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:380) at java.nio.file.Files.newInputStream(Files.java:106) at org.elasticsearch.plugins.PluginInfo.readFromProperties(PluginInfo.java:86) at org.elasticsearch.plugins.PluginsService.getPluginBundles(PluginsService.java:306) at org.elasticsearch.plugins.PluginsService.<init>(PluginsService.java:112) at org.elasticsearch.node.Node.<init>(Node.java:144) at org.elasticsearch.node.NodeBuilder.build(NodeBuilder.java:145) at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:170) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:270) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35) Refer to the log for complete error details. - Test Code 추가 뭐가 coverage 를 올리기 위한 그런 테스트 코드는 아닙니다. ;; ▶ ArirangAnalysisTest.java 이 테스트는 elasticsearch에서 실제 작성된 플러그인이 제대로 module 로 등록 되고 등록된 module에 대한 service 를 가져 오는지 보는 것입니다. elasticsearch 소스코드를 내려 받으시면 plugins 에 들어 있는 코드 그대로 copy & paste 한 것입니다. ▶ ArirangAnalyzerTest.java 이 테스트는 _analyze 에 대한 REST API 와 실제 index.analysis 세팅 사이에 구성이 어떻게 코드로 반영 되는지 상호 맵핑 하기 위해 작성 되었습니다. analyzer, tokenizer, tokenfilter 에 대해서 어떻게 동작 하는지 그나마 쉽게 이해 하시는데 도움이 될까 싶어 작성된 코드 입니다. ※ Elasticsearch Test Suite 이슈 - 자답(?) 현재 master branch 는 문제 없이 잘 됩니다. 다만 2.0 branch 에서는 아래와 같은 또는 다른 문제가 발생을 합니다. 그냥 master 받아서 테스트 하시길 권장 합니다. ※ Elasticsearch Test Suite 이슈. 이건 제가 잘못해서 발생 한 것일 수도 있기 때문에 혹시 해결 하신 분이 계시면 공유 좀 부탁 드립니다. ▶ 발생 에러 /Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/bin/java -ea -Didea.launcher.port=7533 "-Didea.launcher.bin.path=/Applications/IntelliJ IDEA 14 CE.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath "/Applications/IntelliJ IDEA 14 CE.app/Contents/lib/idea_rt.jar:/Applications/IntelliJ IDEA 14 CE.app/Contents/plugins/junit/lib/junit-rt.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/lib/javafx-doclet.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/lib/tools.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/jre/lib/htmlconverter.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/jre/lib/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home/jre/lib/rt.jar:/Users/hwjeong/git/elasticsearch-analysis-arirang/target/test-classes:/Users/hwjeong/git/elasticsearch-analysis-arirang/target/classes:/Users/hwjeong/.m2/repository/org/apache/lucene/lucene-core/5.2.1/lucene-core-5.2.1.jar:/Users/hwjeong/.m2/repository/org/elasticsearch/elasticsearch/2.0.0/elasticsearch-2.0.0.jar:/Users/hwjeong/.m2/repository/org/apache/lucene/lucene-backward-codecs/5.2.1/lucene-backward-codecs-5.2.1.jar:/Users/hwjeong/.m2/repository/org/apache/lucene/lucene-analyzers-common/5.2.1/lucene-analyzers-common-5.2.1.jar:/Users/hwjeong/.m2/repository/org/apache/lucene/lucene-queries/5.2.1/lucene-queries-5.2.1.jar:/Users/hwjeong/.m2/repository/org/apache/lucene/lucene-memory/5.2.1/lucene-memory-5.2.1.jar:/Users/hwjeong/.m2/repository/org/apache/lucene/lucene-highlighter/5.2.1/lucene-highlighter-5.2.1.jar:/Users/hwjeong/.m2/repository/org/apache/lucene/lucene-queryparser/5.2.1/lucene-queryparser-5.2.1.jar:/Users/hwjeong/.m2/repository/org/apache/lucene/lucene-sandbox/5.2.1/lucene-sandbox-5.2.1.jar:/Users/hwjeong/.m2/repository/org/apache/lucene/lucene-suggest/5.2.1/lucene-suggest-5.2.1.jar:/Users/hwjeong/.m2/repository/org/apache/lucene/lucene-misc/5.2.1/lucene-misc-5.2.1.jar:/Users/hwjeong/.m2/repository/org/apache/lucene/lucene-join/5.2.1/lucene-join-5.2.1.jar:/Users/hwjeong/.m2/repository/org/apache/lucene/lucene-grouping/5.2.1/lucene-grouping-5.2.1.jar:/Users/hwjeong/.m2/repository/org/apache/lucene/lucene-spatial/5.2.1/lucene-spatial-5.2.1.jar:/Users/hwjeong/.m2/repository/com/spatial4j/spatial4j/0.4.1/spatial4j-0.4.1.jar:/Users/hwjeong/.m2/repository/com/google/guava/guava/18.0/guava-18.0.jar:/Users/hwjeong/.m2/repository/com/carrotsearch/hppc/0.7.1/hppc-0.7.1.jar:/Users/hwjeong/.m2/repository/joda-time/joda-time/2.8.2/joda-time-2.8.2.jar:/Users/hwjeong/.m2/repository/org/joda/joda-convert/1.2/joda-convert-1.2.jar:/Users/hwjeong/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.5.3/jackson-core-2.5.3.jar:/Users/hwjeong/.m2/repository/com/fasterxml/jackson/dataformat/jackson-dataformat-smile/2.5.3/jackson-dataformat-smile-2.5.3.jar:/Users/hwjeong/.m2/repository/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.5.3/jackson-dataformat-yaml-2.5.3.jar:/Users/hwjeong/.m2/repository/org/yaml/snakeyaml/1.12/snakeyaml-1.12.jar:/Users/hwjeong/.m2/repository/com/fasterxml/jackson/dataformat/jackson-dataformat-cbor/2.5.3/jackson-dataformat-cbor-2.5.3.jar:/Users/hwjeong/.m2/repository/io/netty/netty/3.10.5.Final/netty-3.10.5.Final.jar:/Users/hwjeong/.m2/repository/com/ning/compress-lzf/1.0.2/compress-lzf-1.0.2.jar:/Users/hwjeong/.m2/repository/com/tdunning/t-digest/3.0/t-digest-3.0.jar:/Users/hwjeong/.m2/repository/org/hdrhistogram/HdrHistogram/2.1.6/HdrHistogram-2.1.6.jar:/Users/hwjeong/.m2/repository/commons-cli/commons-cli/1.3.1/commons-cli-1.3.1.jar:/Users/hwjeong/.m2/repository/com/twitter/jsr166e/1.1.0/jsr166e-1.1.0.jar:/Users/hwjeong/.m2/repository/log4j/log4j/1.2.16/log4j-1.2.16.jar:/Users/hwjeong/.m2/repository/org/slf4j/slf4j-api/1.6.2/slf4j-api-1.6.2.jar:/Users/hwjeong/.m2/repository/org/slf4j/slf4j-log4j12/1.6.2/slf4j-log4j12-1.6.2.jar:/Users/hwjeong/git/elasticsearch-analysis-arirang/lib/arirang-morph-1.0.0.jar:/Users/hwjeong/git/elasticsearch-analysis-arirang/lib/arirang.lucene-analyzer-5.0-1.0.0.jar:/Users/hwjeong/.m2/repository/junit/junit/4.11/junit-4.11.jar:/Users/hwjeong/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar:/Users/hwjeong/.m2/repository/com/carrotsearch/randomizedtesting/randomizedtesting-runner/2.1.16/randomizedtesting-runner-2.1.16.jar:/Users/hwjeong/.m2/repository/org/hamcrest/hamcrest-all/1.3/hamcrest-all-1.3.jar:/Users/hwjeong/.m2/repository/org/apache/lucene/lucene-test-framework/5.2.1/lucene-test-framework-5.2.1.jar:/Users/hwjeong/.m2/repository/org/apache/lucene/lucene-codecs/5.2.1/lucene-codecs-5.2.1.jar:/Users/hwjeong/.m2/repository/org/apache/ant/ant/1.8.2/ant-1.8.2.jar:/Users/hwjeong/.m2/repository/org/elasticsearch/elasticsearch/2.0.0/elasticsearch-2.0.0-tests.jar:/Users/hwjeong/.m2/repository/net/java/dev/jna/jna/4.1.0/jna-4.1.0.jar" com.intellij.rt.execution.application.AppMain com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 org.elasticsearch.index.analysis.ArirangAnalysisTest,testArirangAnalysis log4j:WARN No appenders could be found for logger (org.elasticsearch.bootstrap). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. java.lang.RuntimeException: found jar hell in test classpath at org.elasticsearch.bootstrap.BootstrapForTesting.<clinit>(BootstrapForTesting.java:63) at org.elasticsearch.test.ESTestCase.<clinit>(ESTestCase.java:106) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:270) at com.carrotsearch.randomizedtesting.RandomizedRunner$1.run(RandomizedRunner.java:573) Caused by: java.lang.IllegalStateException: jar hell! class: org.hamcrest.BaseDescription jar1: /Users/hwjeong/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar jar2: /Users/hwjeong/.m2/repository/org/hamcrest/hamcrest-all/1.3/hamcrest-all-1.3.jar at org.elasticsearch.bootstrap.JarHell.checkClass(JarHell.java:267) at org.elasticsearch.bootstrap.JarHell.checkJarHell(JarHell.java:185) at org.elasticsearch.bootstrap.JarHell.checkJarHell(JarHell.java:86) at org.elasticsearch.bootstrap.BootstrapForTesting.<clinit>(BootstrapForTesting.java:61) ... 4 more [Review] Modeling data for fast aggregations - on Elastic's BlogElastic/Elasticsearch 2015. 10. 30. 11:43elastic blog에 올라온 글에 대한 개인 리뷰 입니다. 그냥 정리 차원에서 작성해 보겠습니다. [원문] https://www.elastic.co/blog/modeling-data-for-fast-aggregations 글 제목이나 링크만 봐도 어떤 내용인지 감이 오실 겁니다. "aggregation 성능을 올리기 위한 모델링" 딱 봐도 끌리는 제목이죠. 이 글에서 제시해 주는 건 단순 명료 합니다. query와 aggregation 조건에 대한 attribute 를 각 문서에 미리 정의를 해 두는 것으로 aggregation operation 수를 줄여 주는 것입니다. 문서에서는 6번의 aggregation operations를 attribute 설정을 통해 2번의 aggregation operations 수행으로 줄어든 것을 확인 시켜 주고 있습니다. 당연히 색인시점에 query, aggregation 조건을 분리해서 문서에 대한 attribute 설정을 하고 색인을 해야 합니다. 즉, 여기서 단점이 바로 보이시죠. 문서에도 나와 있습니다. 조건이 변경 되면 reindexing 을 해야 한다는 것입니다. 잘 아시겠지만 모든 요건을 만족하는 그런 아키텍쳐도, 모델링도 저는 보지 못한 것 같습니다. 항상 그렇지만 연구하고 요건을 충족 시킬수 있는 구성과 모델이 뭔지 실험하고 적용해 보지 않고서는 답을 찾을 수 없지 않을까 생각 합니다. 정리하면, pre-compute 를 통한 문서의 attribute 정보 추가로 aggregation 수를 줄여 수행 성능을 빠르게 할 수 있다는 것입니다. [Filebeat] 가볍게 사용해 볼까요?Elastic/Beats 2015. 10. 27. 15:13filebeat 가 릴리즈 되었습니다.
▶ elastic blog : https://www.elastic.co/blog/weekly-beats-first-filebeat-release GA 버전은 아니고 beta4 이지만 그래도 의미 있는 릴리즈이기 때문에 소식을 전하지 않았나 싶습니다. 여기서는 가볍게 FEL (Filebeat + Elasticsearch + Logstash) 구성으로 /var/log 아래 파일로그에 대한 수집과 색인까지 살펴 보도록 하겠습니다. Kibana를 이용한 dashboard 구성은 제가 직접 만들면 되는데 귀찮아서 그냥 이건 skip 하도록 하겠습니다. 기본적으로 elastic에서 제공하고 있는 dashboard sample 데이터가 있으니 참고 하시면 좋을 것 같습니다. (2015.10.27일 기준으로 filebeat 는 등록되어 있지 않습니다.) ▶ elastic reference : https://www.elastic.co/guide/en/beats/libbeat/current/getting-started.html#load-kibana-dashboards curl -L -O http://download.elastic.co/beats/dashboards/beats-dashboards-1.0.0-beta4.tar.gz tar xzvf beats-dashboards-1.0.0-beta4.tar.gz cd beats-dashboards-1.0.0-beta4/ ./load.sh [FEL Architecture] 기본적인 아키텍쳐링은 elastic 문서에 잘 나와 있습니다. [Filebeat 란?] filebeat는 기본적으로 logstash forwarder를 기반으로 만들어 졌습니다. 개별 노드에 agent 형태로 설치가 되어 동작 하게 되며, log directories or specific log files, tails the files 에 대해서 elasticsearch로 색인하게 됩니다. 참고 문서) * "logstash-forwarder" : https://github.com/elastic/logstash-forwarder * "libbeat platform" : https://www.elastic.co/guide/en/beats/libbeat/current/index.html [Filebeat 설치] ※ 개발 장비로 macbook 을 사용중이기 때문에 mac 기준으로 작성 합니다. Step 1) 다운로드를 받고 압축을 해제 합니다. ▶ 다운로드 링크 : https://www.elastic.co/downloads/beats/filebeat $ tar -xvzf filebeat-1.0.0-beta4-darwin.tgz $ cd filebeat-1.0.0-beta4-darwin $ vi filebeat.yml Step 2) filebeat.yml 설정 ▶ filebeat configure : https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-configuration-details.html filebeat도 elasticsearch와 마찬가지로 잘 모르면 기본 설정으로 사용 하시면 됩니다. 기본적으로 설정 하셔야 하는 값들은 "paths", "log", "elasticsearch", "logstash" 설정입니다. ...중략... paths: - /var/log/*.log type: log ...중략... output: ### Elasticsearch as output elasticsearch: # Set to true to enable elasticsearch output enabled: false ...중략... logstash: # Uncomment out this option if you want to output to Logstash. The default is false. enabled: true # The Logstash hosts hosts: ["localhost:5044"] ...중략... ※ 여기서 elasticsearch.enabled: false 로 하는 것은 F -> L -> E 구조로 사용하기 위해서 입니다. ▶ filebeat logstash output configure : https://www.elastic.co/guide/en/beats/libbeat/master/configuration.html#logstash-output Step 3) dynamic template 설정 이 설정은 logstash를 사용해 보신 분이라면 어떤 용도인지 잘 아실거라고 생각 합니다. 짧게 설명 드리면 dynamic mapping에 의한 특정 index 패턴에 사전 mapping 구성을 통해 생성되는 field의 특성을 pre-define 하는 설정을 하는 것입니다. $ curl -XPUT 'http://localhost:9200/_template/filebeat?pretty' -d@filebeat.template.json ※ filebeat.template.json 파일은 압축 해제 하신 경로에 포함되어 있습니다. Step 4) filebeat 실행 ※ elasticsearch와 logstash를 먼저 실행 시켜 둔 후 아래 명령어로 실행 합니다. $ sudo ./filebeat -e -c filebeat.yml -d "publish" [Logstash 구성]
[Filebeat용 logstash config 생성] 아래 설정은 libbeat reference 문서에 자세히 나와 있습니다. ▶ libbeat reference : https://www.elastic.co/guide/en/beats/libbeat/current/getting-started.html input { beats { port => 5044 } } output { elasticsearch { host => "localhost" port => "9200" protocol => "http" index => "%{[@metadata][index]}" document_type => "%{[@metadata][type]}" } } 아래 그림은 제 맥북에서 실행 시킨 명령어 스크린샷 입니다. logstash) bin/logstash -f conf/filebeat.config filebeat) sudo ./filebeat -e -c filebeat.yml -d "publish" kibana) bin/kibana elasticsearch) bin/elasticsearch 간단하게 요약을 하면 이렇습니다.) 1. 수집 할 대상 서버에 filebeat 를 설치하고 실행 합니다. 2. logstash input beat 를 실행하고 output 으로 elasticsearch로 색인 되도록 합니다. 3. elasticsearch에 적재된 로그를 기반으로 kibana에서 dashboard를 구성 합니다. |