Ubuntu 22.04에 Elasticsearch 설치 및 구성하기

A previous version of this article was written by Toli.

소개

Elasticsearch는 데이터의 분산 검색 및 분석을 실시간으로 수행하는 플랫폼입니다. 이는 사용 편의성, 강력한 기능 및 확장 가능성으로 널리 선택되고 있습니다.

본 문서에서는 Elasticsearch를 설치하고 사용 사례에 맞게 구성하며, 설치를 보안하고 Elasticsearch 서버를 작업하기 시작하는 방법을 안내합니다.

전제 조건

이 튜토리얼을 따르기 전에 다음이 필요합니다:

  • 비 루트 sudo 사용자로 구성된 2GB RAM 및 2개의 CPU가 있는 Ubuntu 22.04 서버가 필요합니다. 이는 Ubuntu 22.04에서 초기 서버 설정을 따르면 얻을 수 있습니다.

이 튜토리얼에서는 Elasticsearch를 실행하는 데 필요한 최소 CPU 및 RAM 양으로 작업할 것입니다. Elasticsearch 서버가 필요로 하는 CPU, RAM 및 저장 공간 양은 예상되는 로그의 양에 따라 다를 수 있습니다.

단계 1 — Elasticsearch 설치 및 구성

Ubuntu의 기본 패키지 저장소에는 Elasticsearch 구성 요소가 포함되어 있지 않습니다. 그러나 Elastic의 패키지 소스 목록을 추가한 후 APT를 사용하여 설치할 수 있습니다.

모든 패키지는 시스템을 패키지 위조로부터 보호하기 위해 Elasticsearch 서명 키로 서명됩니다. 키를 사용하여 인증된 패키지는 패키지 관리자에 의해 신뢰할 수 있는 것으로 간주됩니다. 이 단계에서는 Elasticsearch 공개 GPG 키를 가져와 Elastic 패키지 소스 목록을 추가하여 Elasticsearch를 설치합니다.

먼저 cURL을 사용하여 Elasticsearch 공개 GPG 키를 APT에 가져옵니다. URL과 데이터를 전송하기위한 명령 줄 도구를 사용합니다. -fsSL 인수를 사용하여 모든 진행 상황 및 가능한 오류 (서버 오류 제외)를 억제하고 cURL이 새 위치로 리디렉션 된 경우 요청을 만들 수 있도록합니다. 출력을 apt가 다운로드 된 패키지를 확인하는 데 사용할 수있는 형식으로 키를 변환하는 gpg –dearmor 명령에 파이프합니다.

  1. curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic.gpg

다음으로 Elastic 소스 목록을 apt가 새로운 소스를 찾을 디렉터리인 sources.list.d 디렉터리에 추가하십시오:

  1. echo "deb [signed-by=/usr/share/keyrings/elastic.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

파일의 [signed-by=/usr/share/keyrings/elastic.gpg] 부분은 apt가 다운로드 한 키를 사용하여 Elasticsearch 패키지의 저장소 및 파일 정보를 확인하는 데 사용하도록 지시합니다.

다음으로, 패키지 목록을 업데이트하여 APT가 새로운 Elastic 소스를 읽을 수 있도록합니다:

  1. sudo apt update

그런 다음 다음 명령을 사용하여 Elasticsearch를 설치하십시오:

  1. sudo apt install elasticsearch

설치를 확인하라는 메시지가 나타나면 Y를 누르십시오. 서비스를 다시 시작하라는 메시지가 표시되면 기본값을 수락하고 계속하려면 ENTER를 누르십시오. Elasticsearch가 이제 설치되어 구성을 위해 준비되었습니다.

단계 2 — Elasticsearch 구성

Elasticsearch를 구성하려면 주 구성 파일인 elasticsearch.yml을 편집합니다. 이 파일에는 대부분의 구성 옵션이 저장되어 있습니다. 이 파일은 /etc/elasticsearch 디렉토리에 있습니다.

선호하는 텍스트 편집기를 사용하여 Elasticsearch의 구성 파일을 편집하십시오. 여기서는 nano를 사용합니다:

  1. sudo nano /etc/elasticsearch/elasticsearch.yml

참고: Elasticsearch의 구성 파일은 YAML 형식이므로 들여쓰기 형식을 유지해야 합니다. 이 파일을 편집하는 동안 추가 공백을 추가하지 않도록 주의하십시오.

elasticsearch.yml 파일에는 클러스터, 노드, 경로, 메모리, 네트워크, 검색 및 게이트웨이에 대한 구성 옵션이 제공됩니다. 이 파일에 대부분의 옵션이 미리 구성되어 있지만 필요에 따라 변경할 수 있습니다. 단일 서버 구성을 보여주기 위해 네트워크 호스트 설정만 조정하겠습니다.

Elasticsearch는 포트 9200에서 어디에서나 트래픽을 수신합니다. Elasticsearch 인스턴스에 대한 외부 액세스를 제한하여 데이터를 읽거나 Elasticsearch 클러스터를 [REST API] (https://en.wikipedia.org/wiki/Representational_state_transfer)를 통해 종료하는 외부 사용자를 방지하려면 네트워크.host를 지정하는 줄을 찾아서 주석 처리하고 그 값을 localhost로 바꾸어야 합니다. 이렇게 수정하면 다음과 같이 보입니다:

/etc/elasticsearch/elasticsearch.yml
. . .
# ---------------------------------- 네트워크 -----------------------------------
#
# 특정 IP (IPv4 또는 IPv6)에 바인드 주소 설정:
#
network.host: localhost
. . .

우리는 localhost를 지정하여 Elasticsearch가 모든 인터페이스 및 바운드 IP에서 수신하도록 했습니다. 특정 인터페이스에서만 수신하도록 하려면 localhost 대신 해당 IP를 지정할 수 있습니다. elasticsearch.yml을 저장하고 닫습니다. nano를 사용하는 경우 CTRL+X를 누르고 Y를 입력한 다음 ENTER를 누릅니다.

이러한 설정은 Elasticsearch를 사용하기 위해 시작할 때 시작할 수 있는 최소 설정입니다. 이제 Elasticsearch를 처음 시작할 수 있습니다.

systemctl을 사용하여 Elasticsearch 서비스를 시작합니다. Elasticsearch가 시작되는 데 몇 분 정도 시간이 걸립니다. 그렇지 않으면 연결할 수 없다는 오류가 발생할 수 있습니다.

  1. sudo systemctl start elasticsearch

다음으로 다음 명령을 실행하여 서버 부팅 시마다 Elasticsearch가 시작되도록합니다:

  1. sudo systemctl enable elasticsearch

시작시 Elasticsearch가 활성화되면 다음 단계로 이동하여 보안을 논의할 수 있습니다.

단계 3 — Elasticsearch 보안 설정

기본적으로 Elasticsearch는 HTTP API에 액세스할 수 있는 누구나에 의해 제어될 수 있습니다. 이는 Elasticsearch가 루프백 인터페이스(즉, 127.0.0.1)에서만 수신하므로 항상 보안 위험이 되는 것은 아닙니다. 따라서 공용 액세스가 불가능하며 모든 서버 사용자가 신뢰할 수 있다면, 보안은 주요 관심사가 아닐 수 있습니다.

HTTP API에 원격 액세스를 허용해야하는 경우, Ubuntu의 기본 방화벽 인 UFW를 사용하여 네트워크 노출을 제한할 수 있습니다. 이 방화벽은 사전 Ubuntu 22.04에서의 초기 서버 설정 튜토리얼의 단계를 따랐다면 이미 활성화되어 있어야 합니다.

이제 방화벽을 구성하여 신뢰할 수있는 원격 호스트에 대한 기본 Elasticsearch HTTP API 포트(TCP 9200)에 액세스를 허용합니다. 일반적으로 이 호스트는 단일 서버 설정에서 사용하는 서버입니다. 예를 들어 198.51.100.0와 같습니다. 액세스를 허용하려면 다음 명령을 입력하십시오:

  1. sudo ufw allow from 198.51.100.0 to any port 9200

그 후 다음 명령을 사용하여 UFW를 활성화할 수 있습니다:

  1. sudo ufw enable

마지막으로 다음 명령으로 UFW의 상태를 확인하십시오:

  1. sudo ufw status

규칙을 올바르게 지정한 경우 다음과 같은 출력을 받아야합니다:

Output
Status: active To Action From -- ------ ---- 9200 ALLOW 198.51.100.0 22 ALLOW Anywhere 22 (v6) ALLOW Anywhere (v6)

이제 UFW가 활성화되었으며 Elasticsearch 포트 9200을 보호하도록 설정되었습니다.

추가 보호를 위해 투자하려면 Elasticsearch가 상업용 Shield 플러그인을 구매할 수 있습니다.

단계 4 — Elasticsearch 테스트

이제 Elasticsearch가 포트 9200에서 실행되고 있어야 합니다. cURL과 GET 요청을 사용하여 테스트할 수 있습니다.

  1. curl -X GET 'http://localhost:9200'

다음과 같은 응답을 받아야 합니다:

Output
{ "name" : "elastic-22", "cluster_name" : "elasticsearch", "cluster_uuid" : "DEKKt_95QL6HLaqS9OkPdQ", "version" : { "number" : "7.17.1", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "e5acb99f822233d62d6444ce45a4543dc1c8059a", "build_date" : "2022-02-23T22:20:54.153567231Z", "build_snapshot" : false, "lucene_version" : "8.11.1", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }

위와 유사한 응답을 받으면 Elasticsearch가 올바르게 작동 중입니다. 그렇지 않은 경우, 설치 지침을 올바르게 따르고 Elasticsearch가 완전히 시작될 때까지 충분한 시간이 허용되었는지 확인하십시오.

Elasticsearch를 보다 철저하게 확인하려면 다음 명령을 실행하십시오:

  1. curl -X GET 'http://localhost:9200/_nodes?pretty'

위 명령의 출력에서 노드, 클러스터, 응용 프로그램 경로, 모듈 등 모든 현재 설정을 확인할 수 있습니다.

단계 5 — Elasticsearch 사용

Elasticsearch를 사용하기 위해 먼저 데이터를 추가해 보겠습니다. Elasticsearch는 RESTful API를 사용하며 일반적인 CRUD 명령에 응답합니다: create(생성), read(읽기), update(업데이트) 및 delete(삭제). 작업에는 다시 cURL 명령을 사용하겠습니다.

다음과 같이 첫 번째 항목을 추가할 수 있습니다:

  1. curl -XPOST -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'

다음과 같은 응답을 받아야 합니다:

Output
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":2,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":1,"_primary_term":1}

cURL을 사용하여 Elasticsearch 서버로 HTTP POST 요청을 보냈습니다. 요청의 URI는 /tutorial/helloworld/1이며 여러 매개변수가 있습니다:

  • tutorial은 Elasticsearch의 데이터 인덱스입니다.
  • helloworld는 유형입니다.
  • 1은 위의 인덱스 및 유형 아래 항목의 ID입니다.

HTTP GET 요청을 사용하여 이 첫 번째 항목을 검색할 수 있습니다.

  1. curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1'

이것이 예상되는 출력입니다:

Output
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello, World!" }}

기존 항목을 수정하려면 HTTP PUT 요청을 사용할 수 있습니다.

  1. curl -X PUT -H "Content-Type: application/json" 'localhost:9200/tutorial/helloworld/1?pretty' -d '
  2. {
  3. "message": "Hello, People!"
  4. }'

Elasticsearch는 다음과 같이 성공적인 수정을 인식해야 합니다:

Output
{ "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 2, "result" : "updated", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 1, "_primary_term" : 1 }

위의 예에서 첫 번째 항목의 message를 “안녕하세요, 여러분!”으로 수정했습니다. 이로써 버전 번호가 자동으로 2로 증가했습니다.

위 요청에서 추가 인수 pretty에 주목했을 것입니다. 이는 각 데이터 필드를 새 줄에 작성할 수 있도록 사람이 읽기 쉬운 형식을 활성화합니다. 결과를 검색할 때도 결과를 더 읽기 쉬운 출력으로 변환할 수 있습니다. 다음 명령을 입력하여 결과를 “예쁘게” 만들 수 있습니다:

  1. curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1?pretty'

이제 응답은 사람이 해석할 수 있도록 서식이 지정됩니다:

Output
{ "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 2, "_seq_no" : 1, "_primary_term" : 1, "found" : true, "_source" : { "message" : "Hello, People!" } } }

Elasticsearch에서 데이터를 추가하고 조회했습니다. 다른 작업에 대해 알아보려면 API 설명서를 확인하세요.

결론

이제 Elasticsearch를 설치, 구성 및 사용을 시작했습니다. Elasticsearch의 기능을 더 자세히 살펴보려면 공식 Elasticsearch 문서를 참조하십시오.

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-elasticsearch-on-ubuntu-22-04