elasticsearch.yml을 고치고 재시작하지 않아도, api를 통해 cluster setting을 수정할 수 있다.
얼마전에 cluster setting값을 수정할일이 있어 문서를 찾아보니, 

es는 진짜 가이드문서가 잘 나와있다.
https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-update-settings.html

 

Cluster update settings API | Elasticsearch Reference [7.5] | Elastic

Cluster update settings APIedit Updates cluster-wide settings. With specifications in the request body, this API call can update cluster settings. Updates to settings can be persistent, meaning they apply across restarts, or transient, where they don’t sur

www.elastic.co

 

get  /_cluster/settings?include_defaults=true 으로 살펴보면
cluster setting 값들이 나온다.

setting값의 영역이  'persistent', 'transient', 'default' 로 나뉘는데,
default는 우리가 수정할 수 있는건 아니다.

default에 나와있는 설정값중에 수정할 부분을 persistent나 transient에 수정하면된다. 
persistent에 수정을 하면 클러스터를 재시작해도 설정이 유지된다.
transient에 수정을 하면 클러스터가 재시작되면 설정이 사라지고, 원복된다.

즉, es cluster에서 설정값이 transient->persistent->defaults 순의 우선순위를 갖게되는 것이다.

 

1. 예를 들어, node를 재시작할때 샤드 route를 피하기 위해 아래와 같이 잠시 설정을 none으로 바꿀때는 transient에 변경. 

PUT /_cluster/settings
{
	"transient": {
		"cluster.routing.allocation.enable": "all"
	}
}

 

2. node를 재시작해도 설정을 유지하고 싶으면 persistent에 변경.

PUT /_cluster/settings
{
	"persistent": {
		"search.default_allow_partial_results": "false"
	}
}

 

3. default 영역은 설정파악할때 참고용.
나는 계속 default영역에 바꾸려고.. 이렇게 삽질을 ㅠ.ㅠ
json에서 "default": { } 여기에 바로 update하는거 아니고, 참고용이고
transient, persistent 에 업뎃하세요~

{
	"default" : {
    	"search": {
        	xxx_xxx_xx : "false"
        }
	}
}

 

웹 초보인 나로서는 화면과 화면 이동, 그리고 화면의 전환 등 Routing에 대한 어려움이 있다. 텍스트를 눌러서 다른 페이지로 이동하거나 메뉴를 만들어서 메뉴를 클릭하면 다른 페이지를 이동하거나... 별거 아닌것 같은데 눌렀을때 404 뜨거나 하면 그만큼 열불나는게 없다! 이해하려고 하는 시간이 필요함에도 우리는 이해하지 않고 그냥... 꾸역꾸역 하나씩 찍기를 시작하지.. 그래서 좋은 사이트!!! 

https://reacttraining.com/react-router/web/example/auth-workflow

 

React Router: Declarative Routing for React

Learn once, Route Anywhere

reacttraining.com

Reacttraining.com에 들어가서 react-router에 대해서 튜토리얼이 정리가 아~주 잘되어있다. 로그인을 했을때 nested, redicrect, Route config 등등 10가지 정도 넘게 방법론에 대해서 코드와 함께 제공되고 있다. 코드도 샌드박스로 제공하고 있어서 코드와 화면을 바로바로 수정해가면서 볼 수 있으니 ... 이건 뭐 거저 주는 느낌? BasicURL ParametersNestingRedirects (Auth)Custom LinkPreventing TransitionsNo Match (404)Recursive PathsSidebarAnimated TransitionsRoute ConfigModal GalleryStaticRouter ContextQuery Parameters

 

이렇게 예제들을 보면서 코드를 구성해보자~ 일단 무작정 만드는게 좋다. 백날 이해하려고 글을 읽어도... 글만 읽게 되니까! router에 대한 이해는 reacttraining에서 해야지!

'우리는 개발자 > Web' 카테고리의 다른 글

Web UI 개발할때는 storybook을 이용해보자  (0) 2019.12.20
React 를 시작하다.  (0) 2019.12.20

항상 웹페이지, 웹앱을 만들고 싶다는 생각이 컸었는데, 이제는 만들수 있을것 같아서 이제서야 시작한다.!! 사람들에게 직접적인 서비스를 할 수 있다고, 그리고 꼭 필요하다고 생각하기 때문에 웹 앱을 만드는 것은 정말 매력적이라고 생각한다. 웹앱과 사실 웹페이지는 다르지만.. 요즘에는 React를 알고 있으면 React-Native를 통해서 ios, android 의 웹앱을 만들 수 있다! React-natvie를 하기 전에 React를 반드시 알아야 할 수 있기 때문에 React를 먼저 시작해볼까 한다. 

React는 facebook에서 만들었고, Angular랑 많이 고민하던데 고민하는 시간에 React를 해보기로한다! 역시 튜토리얼도 너무 잘되어있어서 한번 쭉 읽어보니 그래도 대충 크게 어떻게 학습을 해야할지 윤곽이 잡혔다. 아래 튜토리얼을 무조건 보길 바란다. 무작정 개발하기 보다는 어떻게 앱을 만들고 배포는 어떻게 하는지 환경설정은 어떻게 하는지 등등에 대해서 나와 있어서 한번 꼭 읽어보면 좋은것 같다. 

https://create-react-app.dev/

 

Create React App · Set up a modern web app by running one command.

Set up a modern web app by running one command.

create-react-app.dev

예전에 봤을때는 이런게 없었는데 이제 이렇게 제공! 보다보면 중간중간에 유용한 패키지나 IDE에 대해서 소개도 하니 한번은 꼭 읽어보는게 좋을듯! 안에 나이트 모드가 있는데, 이런 섬세한 기능까지 제공!

react 공홈에 가면 튜토리얼이 있지만 그 튜토리얼 보다는 위에 튜토리얼이 수백배 나으니 일단 위에 create-react-app.dev를 먼저 살펴보자! 그래도 공홈은 한번 방문..해야하나..

https://reactjs.org/

 

React – A JavaScript library for building user interfaces

A JavaScript library for building user interfaces

reactjs.org

 

현재 memory 128기가, 코어40개의 node 5개를 운영중인데, memory는 몇기가로 설정하면 좋을까?
es가이드를 보면 30기가로 설정하는 것을 추천한다.

자바 명령어로 손쉽게 30기가로 설정하는 것이 좋다는 것을 알 수 있다.
31기가, 30기가, 32기가로 설정했을때 보면 30기가일때가 compressedzero base가 됨.

1.

java -Xmx31G -XX:+PrintFlagsFinal -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode 2>/dev/null | grep Compressed | grep Oops

> heap address: 0x00007fc918200000, size: 31744 MB, Compressed Oops mode: Non-zero based:0x00007fc9181ff000, Oop shift amount: 3 bool PrintCompressedOopsMode := true {diagnostic} bool UseCompressedOops := true {lp64_product}

2.

java -Xmx30G -XX:+PrintFlagsFinal -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode
2>/dev/null | grep Compressed | grep Oops

 

> heap address: 0x0000000080000000, size: 30720 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 bool PrintCompressedOopsMode := true {diagnostic} bool UseCompressedOops := true {lp64_product}

3.

java -Xmx32G -XX:+PrintFlagsFinal -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode 2>/dev/null | grep Compressed | grep Oops

 

> bool PrintCompressedOopsMode := true {diagnostic}
bool UseCompressedOops = false {lp64_product}

 

30g로 옵션을 변경한 후에는 재시작을 해줘야하는데, 이미 인덱스가 존재하고 있었으므로 _cluster/settings api로 allocation.enable=none으로 변경해준 뒤에 재시작하고, 다시 all로 변경해주자.

PUT _cluster/settings 
{ 
	"transient": { 
    	"cluster.routing.allocation.enable": "none"
        } 
} 

# after node restart.

PUT _cluster/settings
{ 
	"transient": {
    	"cluster.routing.allocation.enable": "all"
        }
}

 

설정값을 none으로 변경뒤에 node를 일단 내리면 해당 node에 있던 primary shard가 다른 node에 있던 replica shard와 교환 하게 되고, 교환된 replica shard는 unassigend 상태가 된다. 그리고 node를 올리고 설정값을 all로 변경되면 unassigend replica shard가 그  node에 할당된다. 

 

 

# kibana 설치.

kibana 설치는 아래 가이드처럼 rpm으로 간단하게 설치 가능하다.
elasticsearch는 공식홈페이지에 모든게 다 잘 정리되어있다.

"중요한 것은 elasticsearch와 kibana의 버전이 동일해야한다는 것"

<<elasticsearch 공홈에 가이드가 아주 잘 나와있음>>
https://www.elastic.co/guide/en/kibana/7.2/rpm.html

 

Install Kibana with RPM | Kibana Guide [7.2] | Elastic

An alternative package, kibana-oss, which contains only features that are available under the Apache 2.0 license is also available. To install it, use the following baseurl in your kibana.repo file: baseurl=https://artifacts.elastic.co/packages/oss-7.x/yum

www.elastic.co

- RPM설치후에 kibana.yml 에서 elasticsearch.hosts 부분을 array로 넣어주었고, kibana port만 만번대로 변경하여, kibana를 시작했다.

elasticsearch.hosts : ["node1", "node2", "node3"]

 

- kibana configuration을 더 하려면 아래 문서 참고.
https://www.elastic.co/guide/en/kibana/7.2/settings.html

- 이렇게 kibana를 설치하면 kibana에서 node현황도 볼수있고, indexing된 데이터도 볼 수 있고, elasticsearch의 restapi로 request도 날릴수있다.

 

# Filebeat 설치.

- 이번에는 filebeat를 설치하여, 로그를 kibana로 전송해보자. <<역시 가이드 잘 나와있음>>
- 역시나 elasticsearch/kibana와 "버전을 잘 맞춰 설치한다".
https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-elasticsearch.html

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.4.1-x86_64.rpm 
sudo rpm -vi filebeat-7.4.1-x86_64.rpm

- filebeat configure : log path잡아주고, elasticsearch hosts와 kibana host만 내꺼에 잘 맞춰서 넣어줬다.

filebeat.inputs:
	type: log
	enabled: true
	paths:
		/var/log/*.log
		/var/log/elasticsearch/elasticsearch.log

output.elasticsearch:
	hosts: ["myEShost:9200"]

setup.kibana:
	host: "mykibanahost:5601"

 

- 가이드대로 filebeat 에서 elasticsearch module을 활성화 시키고, 초기 환경변수를 setup하고, 시작하는 command를 날렸다.

filebeat setup --dashboards
filebeat modules enable elasticsearch
filebeat setup -e
service filebeat start

<<참고문서>>

 

# 마무리.

- kibana에서 index pattern을 생성도 해보고,
- kibana gui에서 mornitoring 옵션을 활성화 시키면
- 이제 node상태들도 보이고, index도 보이고, 로그도 보인다~

https://ipywidgets.readthedocs.io/en/latest/

노트북에서 widgets을 이용해서 변수를 변경할때 사용하면 좋은 (그래프 할때 사용하면 좋을듯)

 

ipywidgets — Jupyter Widgets 7.5.1 documentation

© Copyright 2017 Project Jupyter Revision ab54ea03.

ipywidgets.readthedocs.io

Tensorflow 를 하는 ML 유저라며 고려해볼만한 ml-tooling 

(tensorflow, tensorboard, docker,, anaconda, pytorch, .... 관련된게 모두~ 설치가 되어있음

https://github.com/ml-tooling/ml-workspace

 

Build software better, together

GitHub is where people build software. More than 40 million people use GitHub to discover, fork, and contribute to over 100 million projects.

github.com

git을 사용하는 유저라면

https://github.com/jupyterlab/jupyterlab-git

 

jupyterlab/jupyterlab-git

A Git extension for JupyterLab. Contribute to jupyterlab/jupyterlab-git development by creating an account on GitHub.

github.com

메모장으로 markdown을 많이 작성한다면

https://github.com/jupyterlab/jupyterlab-toc

 

jupyterlab/jupyterlab-toc

Table of Contents extension for JupyterLab. Contribute to jupyterlab/jupyterlab-toc development by creating an account on GitHub.

github.com

tensorboard 함께 사용한다면

https://github.com/chaoleili/jupyterlab_tensorboard

 

chaoleili/jupyterlab_tensorboard

Tensorboard extension for jupyterlab. Contribute to chaoleili/jupyterlab_tensorboard development by creating an account on GitHub.

github.com

지도를 사용한다면 (geospatial visualization)

https://github.com/OpenGeoscience/geonotebook

 

OpenGeoscience/geonotebook

A Jupyter notebook extension for geospatial visualization and analysis - OpenGeoscience/geonotebook

github.com

 

파이썬에서 데이터 시각화를 자주 사용한다. 그래도 좀더... 폼나는 그래프를 그리는게 좋겠지? 우리가 그래프를 그리는 이유는 보통 정보를 공유할때 사용하니까! 나만 본다면 사실 그렇게 크지 않지만 그래도 예쁘게 잘 보는게 중요하니까 시각화인만큼!

https://seaborn.pydata.org/

 

seaborn: statistical data visualization — seaborn 0.9.0 documentation

Seaborn is a Python data visualization library based on matplotlib. It provides a high-level interface for drawing attractive and informative statistical graphics. For a brief introduction to the ideas behind the library, you can read the introductory note

seaborn.pydata.org

seaborn은 matplotlib를 기반으로 작성한 라이브러리이고, pandas와 함께 사용할때 훌륭하다. 일단 시각화를 할때는 여러가지의 변수들의 관계를 어떻게 표현을 쉽게 하느냐가 중요한데 그런 dataset-oriented API를 제공하기 때문에 쉽게 작성이 가능하다. 

https://seaborn.pydata.org/introduction.html

 

An introduction to seaborn — seaborn 0.9.0 documentation

Seaborn is a library for making statistical graphics in Python. It is built on top of matplotlib and closely integrated with pandas data structures. Seaborn aims to make visualization a central part of exploring and understanding data. Its dataset-oriented

seaborn.pydata.org

에서 여러가지 어떤 상황에 어떤 방식으로 차트를 나타내는지 나오니... 살펴보면 좋을듯! 데이터를 표현하는것도 중요하지만 어떻게 잘 표현하는지도 연구가 있는거 보면 이렇게 이미 그려진 차트를 보면서 어떻게 표현을 해야할지 인사이트를 얻는것도 중요할듯

Jupyter 에서 한글이 네모로 표시되면 Jupyter에 한글 글씨체가 설정이 되어 있지 않다는 의미다. 한글 글씨체를 설정해보자! 그래도 이왕 보는거 차트 볼때 예쁘게하기 위해서 배달의 민족 글씨체를 적용해보았다. 

글씨체 폰트는 아래에서 다운로드 받는다

http://font.woowahan.com/jua/

 

배달의민족 폰트 주아체 다운로드

배달의민족 주아체 다운로드 배달의민족 주아체는 붓으로 직접 그려서 만든 손글씨 간판을 모티브로 만들었습니다. 붓으로 그려 획의 굵기가 일정하지 않고 동글동글한 느낌을 주는 서체로 옛날 간판의 푸근함과 정겨움이 묻어나는 것이 특징입니다.

font.woowahan.com

아래 코드를 실행하고, 차트를 실행하면 글씨체가 적용된다.

from matplotlib import font_manager, rc
font_name = font_manager.FontProperties(fname="/Users/direcision/Library/Fonts/BMDOHYEON_otf.otf").get_name()
rc('font', family=font_name)

+ Recent posts