본문 바로가기
infra/ELK

[ELK] ELK Stack을 구축해 보자 - Elasticsearch

by hjhello423 2019. 12. 18.

 


사전 준비

ELK를 설치하려면 java가 설치되어 있어야 합니다. openJDK 8을 설치해 보도록 하겠습니다.

설치 방법은 링크를 참고!

[자바/설정] - [Java] CentOS 환경에서 openJDK 8 설치 및 환경변수 설정

 


Download and Install

wget을 이용하여 rpm 파일을 다운로드합니다.

우리는 elasticsearch-7.5.0을 다운로드할 것입니다.

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.0-x86_64.rpm
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.0-x86_64.rpm.sha512
shasum -a 512 -c elasticsearch-7.5.0-x86_64.rpm.sha512 
sudo rpm --install elasticsearch-7.5.0-x86_64.rpm

 

shasum 명령어 수행 시에 command not found 가 나왔나요? 아래와 같이 해결하면 됩니다.

CentOS환경을 사용한다면 perl-Digest-SHA, 데비안 계열을 사용한다면 libdigest-sha-perl package를 설치합니다.

저는 CentOS환경이므로 perl-Digest-SHA를 설치했습니다.

아래 명령어로 패키지를 설치하면 정상적으로 shasum명령어를 실행할 수 있습니다.

[itsme@localhost elk]$ sudo yum -y install perl-Digest-SHA

 

다운로드 한 RPM과 checksum의 SHA를 비교하여 elasticsearch- {version} -x86_64.rpm을 확인합니다.

아래처럼 OK 메시지가 나온다면 정상입니다.

[itsme@localhost elk]$ shasum -a 512 -c elasticsearch-7.5.0-x86_64.rpm.sha512
elasticsearch-7.5.0-x86_64.rpm: OK

 

체크섬을 확인했으면 rpm install을 진행해보겠습니다.

[itsme@localhost elk]$ sudo rpm --install elasticsearch-7.5.0-x86_64.rpm
warning: elasticsearch-7.5.0-x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
Creating elasticsearch group... OK
Creating elasticsearch user... OK

 


시스템 인덱스 자동 생성

일부 상용 기능은 Elasticsearch 내에서 시스템 인덱스를 자동으로 생성합니다.

기본적으로 Elasticsearch는 자동 인덱스 생성을 허용하도록 구성되며 추가 단계가 필요하지 않습니다. 그러나 Elasticsearch에서 자동 인덱스 생성을 비활성화한 경우 상업용 기능이 다음 인덱스를 생성할 수 있도록 elasticsearch.yml에서 action.auto_create_index를 구성해야 합니다.

action.auto_create_index: .monitoring*,.watches,.triggered_watches,.watcher-history*,.ml*

 

Logstash 또는 Beats를 사용하는 경우 action.auto_create_index 설정에 추가 색인 이름이 필요할 수 있으며 정확한 값은 로컬 구성에 따라 다릅니다.

환경에 맞는 올바른 값을 모를 경우 값을 *로 설정하면 모든 인덱스를 자동으로 만들 수 있습니다.

 


init과 systemd를 이용한 서비스 등록

이제 설치가 끝났다! 하지만 Elasticsearch는 자동으로 시작되지 않을 거예요.

Elasticsearch를 시작 및 중지하는 방법은 OS에 따라 SysV init을 사용하는지 아니면 systemd을 사용하는지 여부에 따라 다른데 아래 명령을 실행하여 사용 중인 방법을 알아보면 됩니다.

[itsme@localhost elk]$ ps -p 1
   PID TTY          TIME CMD
     1 ?        00:00:02 systemd

 

systemd를 사용하는 것으로 확인했으니  systemd에 서비스를 등록해보겠습니다.

sudo /bin/systemctl systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service

서비스를 실행/중지하려면 아래의 명령어를 입력하면 됩니다.

sudo systemctl start elasticsearch.service
sudo systemctl stop elasticsearch.service

 

이 명령은 Elasticsearch가 성공적으로 시작되었는지 여부에 대한 피드백을 제공하지 않습니다.

대신이 정보는 /var/log/elasticsearch 에있는 로그 파일에 기록됩니다.

기본적으로 Elasticsearch 서비스는 systemd journal에 로그를 기록하지 않습니다. journalctl 로깅을 활성화하려면 elasticsearch.service 파일의 ExecStart 명령 줄에서 --quiet 옵션을 제거해야 합니다.
systemd 로깅이 활성화되면 journalctl 명령을 사용하여 로깅 정보를 사용할 수 있습니다.

To tail the journal:

sudo journalctl -f

To list journal entries for the elasticsearch service:

sudo journalctl --unit elasticsearch

To list journal entries for the elasticsearch service starting from a given time:

sudo journalctl --unit elasticsearch --since  "2016-10-30 18:17:16"

이 부분에 대한 설명은 생략했다 링크를 통해 확인하길 바랍니다.

 


Elasticsearch 동작 확인

이제 Elasticsearch가 정상적으로 동작하는지 확인해 보겠습니다.

localhost의 9200 port로 GET 요청을 던져 보면 됩니다.

curl을 이용해서 확인했고, 아래와 같은 응답이 온다면 정상 실행되고 있는 것입니다.

[root@localhost elasticsearch]# curl -X GET localhost:9200


{
  "name" : "localhost.localdomain",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "5fXH5EFDQ4ylGGfhZE3g-w",
  "version" : {
    "number" : "7.5.0",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "e9ccaed468e2fac2275a3761849cbee64b39519f",
    "build_date" : "2019-11-26T01:06:52.518245Z",
    "build_snapshot" : false,
    "lucene_version" : "8.3.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

 


Elasticsearch 설정

Elasticsearch에 관한 설정은 양도 많지만 번역 과정에서 오번역이 있을 수 있으므로 링크를 통해 참고하길 바랍니다.

 

Elasticsearch는 기본적으로 런타임 구성에 /etc/elasticsearch/를 사용합니다. 이 디렉토리에 있는 모든 파일의 소유권은 패키지 설치 시 root : elasticsearch로 설정되며 디렉토리에는 setgid 플래그가 설정되어 /etc/elasticsearch/ 에서 작성된 모든 파일 및 서브 디렉토리도 이 소유권으로 작성됩니다 (e.g., if a keystore is created using the keystore tool).

Elasticsearch 프로세스가 그룹 권한을 통해이 디렉토리 아래의 파일을 읽을 수 있도록 이를 유지해야 합니다.

Elasticsearch는 기본적으로 /etc/elasticsearch/elasticsearch.yml 파일에서 구성을 로드합니다. 이 구성 파일의 형식은 Elasticsearch 구성에서 설명합니다.

또한 RPM에는 시스템 구성 파일 (/ etc / sysconfig / elasticsearch)이 있으며 다음과 같은 매개 변수를 설정할 수 있습니다.

 

JAVA_HOME

Set a custom Java path to be used.

custom Java 경로를 설정

MAX_OPEN_FILES

Maximum number of open files, defaults to 65535.

open 파일의 최대 수

default 값 :  65535

MAX_LOCKED_MEMORY

Maximum locked memory size. Set to unlimited if you use the bootstrap.memory_lock option in elasticsearch.yml.

최대 잠금 메모리 크기.

만약 elasticsearch.yml에서bootstrap.memory_lock 옵션을 사용하는 경우 unlimited로 설정하십시오

MAX_MAP_COUNT

Maximum number of memory map areas a process may have. If you use mmapfs as index store type, make sure this is set to a high value. For more information, check the linux kernel documentation about max_map_count. This is set via sysctl before starting Elasticsearch. Defaults to 262144.

 

ES_PATH_CONF

Configuration file directory (which needs to include elasticsearch.yml, jvm.options, and log4j2.properties files); defaults to /etc/elasticsearch.

 

ES_JAVA_OPTS

Any additional JVM system properties you may want to apply.

 

RESTART_ON_UPGRADE

Configure restart on package upgrade, defaults to false. This means you will have to restart your Elasticsearch instance after installing a package manually. The reason for this is to ensure, that upgrades in a cluster do not result in a continuous shard reallocation resulting in high network traffic and reducing the response times of your cluster.

 

 


Directory layout

RPM은 구성 파일, 로그 및 데이터 디렉토리를 RPM 기반 시스템의 적절한 위치에 배치합니다.

 

home

Elasticsearch home directory or $ES_HOME

/usr/share/elasticsearch

 

bin

Binary scripts  including elasticsearch to  start a node and elasticsearch-plugin to  install plugins

/usr/share/elasticsearch/bin

 

conf

Configuration files  including elasticsearch.yml

/etc/elasticsearch

ES_PATH_CONF

conf

Environment variables  including heap size, file descriptors.

/etc/sysconfig/elasticsearch

 

data

The location of the data files of each index / shard allocated on the node. Can hold multiple locations.

/var/lib/elasticsearch

path.data

jdk

The bundled Java Development Kit used to run Elasticsearch. Can be overriden by setting the JAVA_HOME environment variable in /etc/sysconfig/elasticsearch.

/usr/share/elasticsearch/jdk

 

logs

Log files location.

/var/log/elasticsearch

path.logs

plugins

Plugin files location. Each plugin will be contained in a subdirectory.

/usr/share/elasticsearch/plugins

 

repo

Shared file system repository locations. Can hold multiple locations. A file system repository can be placed in to any subdirectory of any directory specified here.

Not configured

path.repo

 


Configuring Elasticsearch

Elasticsearch에는 기본적으로 3가지 구성 파일이 있습니다.

  • elasticsearch.yml : Elasticsearch 구성을 위한
  • jvm.options : Elasticsearch JVM 설정 구성
  • log4j2.properties : Elasticsearch 로깅 구성

이 파일은 config 디렉토리에 있습니다.

아카이브 배포 ( tar.gz 또는 zip)인지 패키지 배포 (Debian 또는 RPM 패키지) 인지에 따라 다릅니다.

아카이브 배포의 경우 구성 디렉토리 위치는 $ES_HOME/config로 기본 설정됩니다. 

ES_PATH_CONF 환경 변수를 통해 구성 디렉토리의 위치를 다음과 같이 변경할 수 있습니다.

 

ES_PATH_CONF=/path/to/my/config ./bin/elasticsearch

저는 RPM을 이용하여 기본 설치하였기 때문에 /etc/elasticsearc 경로에 있습니다.

 

설정 파일은 YAML 형식으로 아래와 같이 지정할 수 있습니다.

path:
    data: /var/lib/elasticsearch
    logs: /var/log/elasticsearch

${...} 표기법으로 참조된 변수는 환경변수 값으로 대체됩니다.

node.name:    ${HOSTNAME}
network.host: ${ES_NETWORK_HOST}

 


참고

 

 

반응형

댓글