[검색엔진 라이브서치 개발과정 정리]ELK stack의 설정 - Elasticsearch

2019. 5. 20. 08:55ELK 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외의 다른 것으로 변경해주면 된다.