2019. 5. 20. 08:55ㆍELK stack
ES, logstash, kibana는 각각 yml 파일을 통해 설정을 각자의 필요에 맞게 바꿀 수 있으며, 각각 jvmoption.yml 을 통해 jvm 관련 환경설정 까지 바꿀 수 있다. 또한 linux의 경우 루트계정을 이용하여 ES에 할당할 파일크기, 권한, 메모리크기 등을 바꿔줘야 하는 부분도 있다. 이러한 부분을 살펴보고자 한다.
먼저 ES와 관련된 설정이다.
· max file descriptors 늘려주기
o 설명
- Mac OS 및 Linux만 해당 (Windows는 불필요)
- Elasticsearch를 구동중인 사용자의 open files descriptors를 65536까지 올려야 함
- RPM and Debian 패키지의 경우 default로 65536으로 설정되어 있으므로 이 설정이 불필요하다
o 방법
- 작업 전 확인 : $ ulimit -Hn (default로 4096이 출력될 것이다)
- limits.conf 편집 : $ sudo vim /etc/security/limits.conf
- 편집 모드로 변경 : i 누르기
- 아래 코드를 limits.conf 가장 아래 입력
o * hard nofile 65536o * soft nofile 65536
- 저장 : ESC 누른 후 :wq 입력 후 Enter 누르기
- 재접속
o $ sudo suo $ su - ec2-user
- 작업 후 재확인 : $ ulimit -Hn
· virtual memory areas 늘리기
- 설명
- Elasticsearch는 mmapfs 디렉토리에 index를 저장한다 (default 설정)
- mmap counts에 대한 운영체제의 limit이 default로는 낮게 되어 있어서 높혀주지 않으면 out of memory 발생
- 방법
§ 임시 (재접속시 해제)
- 작업 전 확인 : $ sudo sysctl -a | grep vm.max_map_count => 65530
- 늘리기 : sudo sysctl -w vm.max_map_count=262144
- 작업 후 확인 : $ sudo sysctl -a | grep vm.max_map_count => 262144
§ 영구적 (재접속 후에도 효과 지속)
- $ sudo vim /etc/sysctl.conf
- 편집 모드 변경 : i 입력
- sysctl.conf 가장 아래에 vm.max_map_count=262144 입력
- 저장 : ESC 누르고 :wq 입력 후 Enter
- Putty.exe 실행
- 저장한 Settings 불러오기
- Category - Session에서 저장한 Settings Load 선택
- 밑에 Open 선택
JVM Options
· 설명
- minimum heap size (Xms)와 maximum heap size (Xmx) 일치 권장
- 일반적으로는 서버 메모리의 절반정도 할당할 것 권장 (나머지는 시스템 사용 위해 남겨둔다)
- JVM heap size를 높게 설정하면 caching을 더 많이할 수 있지만 지나치게 많을 경우 garbage collection pause이 길게 발생할 수 있다
· 방법
- elasticsearch config 디렉토리 이동
- jvm 설정 파일 편집 : $ vim jvm.options
- 편집 모드 : i 입력
- Xms와 Xmx를 모두 4g로 변경
· -Xms4g· -Xmx4g
- 저장 : ESC 누르고 :wq 입력 후 Enter
Network 설정 -외부에서 접속해야 할 경우 localhost가 아닌 0.0.0.0으로 설정을 해야한다.
- elasticsearch config 디렉토리 이동
- elasticsearch.yml 파일 편집 : $ vim elasticsearch.yml
- 입력 모드 전환 : i 입력
- network.host에 주소를 입력한다
- 형식 : network.host: {Public DNS}
- 예시 : network.host: "0.0.0.0"
- 저장 : ESC 입력 후 :wq 후 Enter
Bootstrap check 회피 설정
- elasticsearch config 디렉토리 이동
- elasticsearch.yml 파일 편집 : $ vim elasticsearch.yml
- 입력 모드 전환 : i 입력, bootstrap.system_call_filter: false 를 추가
- 저장 : ESC 입력 후 :wq 후 Enter
외부에서 ES를 접속하고자 할때는 리눅스 환경에 아파치 웹서버의 경우 httpd.conf 에서 proxy module을 활성화 하고 가상 프록시 설정을 해 주어야 한다.
다음으로 elasticsearch.yml의 구체적인 환경설정을 알아보자. ES의 구체적인 환경에 대한 설정이며, 기본적으로 default 상태로 사용해도 큰 문제는 없으나 클러스터 네임, 노드에 대한 설정, 네트워크 호스트 설정 등 알아두어야 할 설정들이 있다.
Cluster.name : 클러스터 식별 이름
Node.name : 노드 식별 이름
Node.master : true/false. 마스터 노드가 될 수 있는지 여부
Node.data: true/false. 데이터를 저장하는 노드인지에 대한 설정.
Index.number_of_shards: 숫자 (기본 샤드 생성 숫자. Default는 5개이다)
Index.number_of_replicas: 숫자 (기본 복제 레플리카 숫자. Default는 1개이다)
Bootstrap.mlockall : true (JVM의 스왑을 방지하는 옵션)
Discovery.zen.ping.timeout: 10s (클러스터 내의 각 노드의 상태 체크를 위한 타임아웃 값으로 너무 작게 하면 노드가 클러스터에서 자주 이탈할 수 있음. 기본 값은 3초)
Discovery.zen.ping.multicast.enabled:false
Discovery.zen.ping.unicast.hosts:[“host1”,”host2:port”,”host3[portX-portY]”]
기본 값은 멀티캐스트를 사용하지만, 실환경에서는 다른 클러스터와 노드가 섞이는 위험이 발생할 수 있으므로 두 번째 설정인 유니캐스트를 통해 마스터가 될 수 있는 서버호스트의 목록을 나열해 주는 것이 좋다. Default 상태로 두어도 큰 문제는 없음.
http.port, transport 관련 설정은 default값으로 두는 편이 관리하기가 좋다. 만일 사용 환경에서 9200, 9300포트를 이미 사용하고 있을 때에만 바꿔준다.
여기까지 설정의 확인이 끝났다면 ES의 기본적인 설정은 끝이다.
Logstash의 경우 특별히 설정해 줄 것이 없다. 위에서 언급했듯이 .conf를 통해 input과 output에 대한 옵션을 주는 것이 중요하며, JVM에 관련된 옵션만 필요에따라 설정해주면 된다. JVM옵션과 관련된 설정은 ES와 동일하다.
Kibana의 환경설정은 kibana.yml을 통해 변경할 수 있다.
기본적으로 설치과정에서 확인했듯 server.host: 의 부분에 ES의 접속 주소를 넣어주는 것이 중요하다. 만일 사용하는 환경에서 5601 포트를 사용할 수 없을 경우에는 server.port 를 5601외의 다른 것으로 변경해주면 된다.
'ELK stack' 카테고리의 다른 글
[검색엔진 라이브서치 개발과정 정리] Logstash JDBC 활용 및 ES plugin 설치 (0) | 2019.05.27 |
---|---|
[검색엔진 라이브서치 개발과정 정리]Curl 을 통한 기본적인 확인 (0) | 2019.05.22 |
[검색엔진 라이브서치 개발과정 정리]ELK stack의 설치 (0) | 2019.05.17 |
[검색엔진 라이브서치 개발과정 정리]ElasticSearch 와 기존 RDBMS 와의 비교 (0) | 2019.05.16 |
[검색엔진 라이브서치 개발과정 정리]ElasticSearch의 개요 (0) | 2019.05.16 |