diff --git a/md/ELK/Elasticsearch_Tips.md b/md/ELK/Elasticsearch_Tips.md new file mode 100644 index 0000000..f3bd2d7 --- /dev/null +++ b/md/ELK/Elasticsearch_Tips.md @@ -0,0 +1,86 @@ +# Elasticsearch Tips + +## Elastic search.in.sh 설정 + +* 자바 메모리 옵션은 메모리 용량이 변경되는 불필요한 오버헤드를 방지하기 위해 최소/최대 메모리를 동일하게 지정해서 사용하는 것을 권장 + + * ES_HEAP_SIZE 옵션을 조정하면 최소/최대 값이 동일하게 적용된다. + +* 힙 덤프 파일의 저장경로 지정 + + * JAVA_OPTS 설정 + + ```shell + JAVA_OPTS="$JAVA_OPTS -XX:HeapDumpPath=$ES_HOME/logs/heapdump.hprof" + ``` + + + +## elasticsearch.yml 설정 + +* path.data의 경로 설정에서 쉼표(,)로 구분하여 여러 경로를 지정할 수 있다. + + * 이 방법으로 색인 된 데이터를 여러 개의 드라이브에 나눠서 저장 가능 + +* plugin.mandatory에 쉼표(,)로 구분하여 지정된 플러그인들이 반드시 설치되어야만 elasticsearch가 구동되도록 할 수 있다. + +* Bootstrap.mlockall 옵션을 true로 설정하면 자바 가상 머신 위에서 실행 중인 엘라스틱서치가 점유하는 메모리를 고정시킨다. + + * ES_HEAP_SIZE를 통해 자바 힙 메모리의 최소/최대 값을 동일하게 설정하고 bootstrap.mlockall 설정을 true로 지정하면 엘라스틱서치에서 메모리가 부족하지 않도록 방지할 수 있으므로 true로 설정할 것을 권장 + * 메모리를 미리 점유하고 사용하기 때문에 다른 자바 프로세스가 메모리를 swap하는 것을 방지할 수 있다. + +* 슬로우 로그 설정 + + ```yaml + # 질의 + index.search.slowlog.threshold.query.warn: 10s + index.search.slowlog.threshold.query.info: 5s + index.search.slowlog.threshold.query.debug: 2s + index.search.slowlog.threshold.query.trace: 500ms + + # 불러오기 + index.search.slowlog.threshold.fetch.warn: 1s + index.search.slowlog.threshold.fetch.info: 800ms + index.search.slowlog.threshold.fetch.debug: 500ms + index.search.slowlog.threshold.fetch.trace: 200ms + + # 색인 + index.indexing.slowlog.threshold.index.warn: 1s + index.indexing.slowlog.threshold.index.info: 800ms + index.indexing.slowlog.threshold.index.debug: 500ms + index.indexing.slowlog.threshold.index.trace: 200ms + ``` + + * 엘라스틱서치는 log4j 라이브러리를 사용 + * 각 로그 레벨에 따라 slow 로그 설정 + * query/fetch/indexing 작업이 지정된 시간이상 소요되었을 경우 이에 해당하는 슬로우 로그가 찍힘. + * 예를들어 query에 2초가 지연되면 debug레벨의 슬로우 로그가 찍히고, 더 지연되어 5초가 되었을 때는 info 레벨로 슬로우 로그가 찍히고 10초까지 지연된 경우 warn 레벨의 로그가 찍힘 + * 슬로우 로그에 대한 설정은 `config/logging.yml`파일에서 설정 + + + +## docker + +* 클러스터링 지원을 위해서는 environment 옵션이 필요 + + ```shell + $ docker run -d --name elas elasticsearch -Etransport.host=0.0.0.0 -Ediscovery.zen.minimum_master_nodes=1 + ``` + +* 엘라스틱서치는 indice들을 저장하기 위해서 hybrid mmapfs / niofs 디렉토리를 사용한다. + + * [가상 메모리 설정](https://www.elastic.co/guide/en/elasticsearch/reference/5.0/vm-max-map-count.html)이 필요. + + * mmap count의 한계치를 증가시켜야함 ([최소 262144 이상](https://www.elastic.co/guide/en/elasticsearch/reference/5.0/_maximum_map_count_check.html)) + + ```shell + $ sysctl -w vm.max_map_count=262144 + ``` + + * 위 명령을 수행하거나 /etc/sysctl.conf 파일을 수정하여 위 설정을 추가시켜야한다. + + ``` + vm.max_map_count=262144 + ``` + +* ​ \ No newline at end of file diff --git a/md/Pinpoint/pinpoint.md b/md/Pinpoint/pinpoint.md index 477b0f6..59a789c 100644 --- a/md/Pinpoint/pinpoint.md +++ b/md/Pinpoint/pinpoint.md @@ -131,7 +131,15 @@ * 기본값은 20인데 20번의 request당 하나의 패킷을 전달한다는 의미 * 1로 설정하면 무조건 수집 - ​ + + + +## 독립형 주키퍼 클라이언트 실행 + +```shell +$ bin/hbase zkcli -server localhost:2181 +``` + ## 완전 분산형 설치 diff --git "a/md/Review/images/\354\213\244\354\240\204_\354\212\244\355\224\204\353\247\201_\353\266\200\355\212\270_\354\233\214\355\201\254\353\266\201_1.JPG" "b/md/Review/images/\354\213\244\354\240\204_\354\212\244\355\224\204\353\247\201_\353\266\200\355\212\270_\354\233\214\355\201\254\353\266\201_1.JPG" new file mode 100755 index 0000000..fd6d6d8 Binary files /dev/null and "b/md/Review/images/\354\213\244\354\240\204_\354\212\244\355\224\204\353\247\201_\353\266\200\355\212\270_\354\233\214\355\201\254\353\266\201_1.JPG" differ diff --git "a/md/Review/images/\354\213\244\354\240\204_\354\212\244\355\224\204\353\247\201_\353\266\200\355\212\270_\354\233\214\355\201\254\353\266\201_2.JPG" "b/md/Review/images/\354\213\244\354\240\204_\354\212\244\355\224\204\353\247\201_\353\266\200\355\212\270_\354\233\214\355\201\254\353\266\201_2.JPG" new file mode 100755 index 0000000..e35a4f3 Binary files /dev/null and "b/md/Review/images/\354\213\244\354\240\204_\354\212\244\355\224\204\353\247\201_\353\266\200\355\212\270_\354\233\214\355\201\254\353\266\201_2.JPG" differ diff --git "a/md/Review/images/\354\213\244\354\240\204_\354\212\244\355\224\204\353\247\201_\353\266\200\355\212\270_\354\233\214\355\201\254\353\266\201_3.JPG" "b/md/Review/images/\354\213\244\354\240\204_\354\212\244\355\224\204\353\247\201_\353\266\200\355\212\270_\354\233\214\355\201\254\353\266\201_3.JPG" new file mode 100755 index 0000000..2962d67 Binary files /dev/null and "b/md/Review/images/\354\213\244\354\240\204_\354\212\244\355\224\204\353\247\201_\353\266\200\355\212\270_\354\233\214\355\201\254\353\266\201_3.JPG" differ diff --git "a/md/Review/images/\354\213\244\354\240\204_\354\212\244\355\224\204\353\247\201_\353\266\200\355\212\270_\354\233\214\355\201\254\353\266\201_4.JPG" "b/md/Review/images/\354\213\244\354\240\204_\354\212\244\355\224\204\353\247\201_\353\266\200\355\212\270_\354\233\214\355\201\254\353\266\201_4.JPG" new file mode 100755 index 0000000..c13b596 Binary files /dev/null and "b/md/Review/images/\354\213\244\354\240\204_\354\212\244\355\224\204\353\247\201_\353\266\200\355\212\270_\354\233\214\355\201\254\353\266\201_4.JPG" differ diff --git "a/md/Review/\354\213\244\354\240\204_\354\212\244\355\224\204\353\247\201_\353\266\200\355\212\270_\354\233\214\355\201\254\353\266\201.md" "b/md/Review/\354\213\244\354\240\204_\354\212\244\355\224\204\353\247\201_\353\266\200\355\212\270_\354\233\214\355\201\254\353\266\201.md" new file mode 100644 index 0000000..aaa42d0 --- /dev/null +++ "b/md/Review/\354\213\244\354\240\204_\354\212\244\355\224\204\353\247\201_\353\266\200\355\212\270_\354\233\214\355\201\254\353\266\201.md" @@ -0,0 +1,25 @@ +# [리뷰] 실전 스프링 부트 워크북 + +![](images/실전_스프링_부트_워크북_1.JPG) + +평소에 스프링에 대한 관심은 가지고 있었지만 사내에서는 서블릿 기반의 웹 서버를 사용하기 때문에 업무에서 사용할 기회가 없어서 깊이 있게 공부하지는 못하고 있었습니다. 또한 스프링을 장애 없이 현업에서 사용하기 위해서는 깊은 이해가 필요한데 팀원 모두가 공부하고 테스트해보고 적용하기까지는 많은 시간을 필요로 했습니다. 이러한 진입장벽 때문에 스프링은 거의 배제한 채로 비교적 Old한 방식의 서블릿 기반 웹서버를 계속해서 사용해오고 있었습니다. + +그러던 중 커뮤니티에서 스프링 부트에 대한 세미나를 듣게 되었고, 급 관심이 생기게 되었습니다. 가장 매력적이었던 부분은 스프링에서 복잡했던 xml 파일 작성부분이 스프링 부트에서는 필요가 없다는 것이었습니다. 스프링 부트 웹 페이지에서 원하는 설정들을 체크박스 형태로 선택한 후에 Generate를 수행하면 기본 프로젝트 구성을 알아서 다 해줍니다. 그러므로 설정은 최소화하고 개발자는 개발에만 신경쓸 수 있게끔 해주고 있기 때문에 이 정도면 팀원들을 설득하고 짧은시간 내에 활용할 수 있을 것 같다는 생각이 들었습니다. + +![](images/실전_스프링_부트_워크북_2.JPG) + +이러한 생각을 가지고 설레는 마음으로 실전 스프링 부트 워크북이라는 책을 읽어보게 되었는데, 표지만 봐도 공부를 하고 싶어지는 욕구가 생겼습니다. 그만큼 최근에 나오는 개발 서적들의 표지나 내용물이 점점 더 깔끔하고 눈에 잘 들어오게 변화하고 있는 것 같습니다. + +![](images/실전_스프링_부트_워크북_3.JPG) + +대부분의 기술 서적들과 같이 시작은 스프링 부트가 무엇인지, 그리고 왜 스프링 부트를 사용해야 하는지에 대해 설명을 해주고 있습니다. 스프링과 스프링 부트의 차이가 무엇인지, 그리고 스프링 부트를 사용하면 무엇이 좋은지에 대해 궁금하신 독자들은 이부분에서 궁금증을 해소하실 수 있을 것입니다. + +![](images/실전_스프링_부트_워크북_3.JPG) + +책의 구성은 기본적으로 이론을 설명해주고, 이론을 활용한 코드를 생략 없이 모두 수록하고 있습니다. 그리고 이 코드에 대한 설명을 뒤에 덧붙이면서 독자의 이해를 도와줍니다. 실행에 필요한 전체 코드를 수록하고 있기 때문에 하나씩 따라 쳐 보면서 직접 어플리케이션을 구현해볼 수 있다는 것이 이 책의 장점이라고 생각합니다. + +아쉬웠던 점은 책의 대부분이 텍스트로만 이루어져 있었기 때문에 각 애너테이션 간의 관계나 클래스들 간의 관계 등 이론적인 설명들이 머릿속에 잘 그려지지 않았습니다. 그래서 같은 내용을 여러번 반복해서 읽고, 연습장에 클래스 다이어그램이나 그림을 그려가면서 읽어야 했습니다. 또한, 예제에서 사용되는 css와 js 파일이 이 예제의 프로젝트가 아닌 외부의 프로젝트에서 가져온 것이므로 해당 파일들을 직접 다운받아서 프로젝트에 첨부를 시켜주어야 하기 때문에 초반에 정상적으로 서버를 구동하는데 어려움을 겪었었습니다.(스프링 부트를 처음 사용해봐서 어떤 위치에 css와 js파일들을 위치시켜야 하는지 몰라서) + +![](images/실전_스프링_부트_워크북_4.JPG) + +책에서 스프링 부트에 대한 깊은 내용은 다루고 있지 않지만 예제를 따라해보며 스프링 부트가 이런 것이다라는 것은 분명하게 느낄 수 있게 해준 책이었습니다. 데이터베이스를 사용하는 부분에 있어서도 현재 DBCP를 사용하는 것에 비해 굉장히 편리했고 매력적이었습니다. 데이터베이스나 네트워크, 보안 관련된 모듈들을 각각 신경써야 했던 기존과는 다르게 스프링 부트를 사용하면 일관된 방식으로 사용할 수 있다는 것 또한 큰 장점이라고 생각합니다. 다음 프로젝트에서는 스프링 부트를 사용하여 개발하는 것을 목표로 더 깊이 있게 살펴봐야겠습니다. \ No newline at end of file