Copy & Run

Ubuntu에서 Elasticsearch 설치하고 기동하기

Elastic 공식 저장소 서명 키 등록부터 apt 설치, 설정 파일 수정, JVM 힙 고정, 클러스터 상태 확인을 차례로 진행합니다.

글쓴이 최경호 · 실습 노트 · 2026-10-14 발행 · 5분 · 2026-08 확인

1. Elastic 패키지 저장소 등록 (약 5분)

ELK는 우분투 기본 저장소에 없습니다. Elastic 공식 저장소를 등록해야 apt로 설치할 수 있습니다.

# 1) 패키지 서명 검증용 공개키를 내려받아 키링에 넣습니다
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch \
  | gpg --dearmor -o /usr/share/keyrings/elastic-keyring.gpg

# 2) 저장소 주소를 등록합니다 (signed-by 로 위 키를 지정 - 서명이 맞아야만 설치됩니다)
KEY=/usr/share/keyrings/elastic-keyring.gpg
REPO=https://artifacts.elastic.co/packages/8.x/apt
LIST=/etc/apt/sources.list.d/elastic-8.x.list
printf 'deb [signed-by=%s] %s stable main\n' "$KEY" "$REPO" > "$LIST"

# 등록 내용이 "한 줄"인지 반드시 확인합니다
cat "$LIST"

# 3) 패키지 목록 갱신 후 설치 가능한 버전을 봅니다
apt-get update
apt-cache madison elasticsearch | head -3

기대: elasticsearch | 8.19.x | https://artifacts.elastic.co/... 형태로 버전 목록이 보입니다.

서명 키를 등록하는 이유가 오늘 배울 공급망 관점의 첫 장면입니다. 키 없이 저장소만 등록하면 apt-get update가 NO_PUBKEY 오류로 거부합니다.

deb ... 는 반드시 한 줄이어야 합니다. PDF에서 이 줄이 화면 폭에 맞춰 접혀 보이는데, 접힌 지점에서 복사하면 줄바꿈이 함께 들어가 apt-get update 가 Malformed entry 1 in list file ... (URI) 로 실패합니다. 그때는 위 printf 로 파일을 다시 쓰고 cat 으로 한 줄인지 확인합니다.

2. Elasticsearch 설치·설정·기동 (약 25분)

2-1. 설치

apt-get install -y elasticsearch

설치가 끝나면 화면에 자동 보안 구성 안내가 출력됩니다.

The generated password for the elastic built-in superuser is : xxxxxxxxxxxx

Elasticsearch 8은 설치 시점에 TLS 인증서와 superuser 비밀번호를 스스로 만듭니다. 운영에서는 이 값을 반드시 보관합니다. 오늘 실습에서는 분석에 집중하기 위해 이 보안 설정을 끄고 진행합니다.

Java를 따로 설치하지 않았는데도 동작하는 이유를 함께 확인합니다.

ls /usr/share/elasticsearch/jdk/bin/java     # 패키지에 전용 JDK가 함께 들어 있습니다

2-2. 설정

자동 생성된 보안 블록을 지우고 실습 설정을 넣습니다. 지우지 않고 아래 설정을 덧붙이면 같은 키가 두 번 들어가 기동이 실패합니다(H절 케이스 2).

# 1) 자동 보안 구성 블록 삭제
sed -i '/BEGIN SECURITY AUTO CONFIGURATION/,/END SECURITY AUTO CONFIGURATION/d' \
  /etc/elasticsearch/elasticsearch.yml

# 2) 실습 설정 추가
cat >> /etc/elasticsearch/elasticsearch.yml <<'EOF'

# ===== 실습 설정 (교육 전용) =====
cluster.name: elk-lab
node.name: elk-vm
discovery.type: single-node
http.host: 0.0.0.0
transport.host: 127.0.0.1
path.repo: /var/lib/elasticsearch/snapshots
xpack.security.enabled: false
xpack.security.enrollment.enabled: false
xpack.security.http.ssl.enabled: false
xpack.security.transport.ssl.enabled: false
EOF

# 3) 스냅샷 저장소로 쓸 폴더를 만들고 소유자를 맞춥니다
mkdir -p /var/lib/elasticsearch/snapshots
chown elasticsearch:elasticsearch /var/lib/elasticsearch/snapshots

# 4) JVM 힙을 1GB로 고정합니다 (최소=최대)
printf -- "-Xms1g\n-Xmx1g\n" > /etc/elasticsearch/jvm.options.d/heap.options

각 설정의 뜻은 다음과 같습니다.

설정 뜻
discovery.type: single-node 노드 한 대로 클러스터를 구성합니다(실습 환경)
http.host: 0.0.0.0 서버 밖(내 PC 브라우저)에서 9200으로 붙을 수 있게 합니다
transport.host: 127.0.0.1 노드 간 통신은 서버 내부로 제한합니다
path.repo 스냅샷을 저장할 수 있는 경로를 허용합니다(지정 안 하면 저장소 등록이 거부됩니다)
xpack.security.*: false 실습 간소화용입니다. 운영에서는 절대 끄지 않습니다
힙 최소=최대 1GB 실행 중 힙 크기가 변하지 않게 고정합니다

2-3. 기동

Elasticsearch는 보안상 root로 실행되지 않습니다. 전용 계정으로 기동합니다.

sudo -u elasticsearch env ES_PATH_CONF=/etc/elasticsearch \
  /usr/share/elasticsearch/bin/elasticsearch -d -p /tmp/es.pid > /dev/null 2>&1

# 기동될 때까지 기다립니다(1~2분)
until curl -sf -o /dev/null http://127.0.0.1:9200/_cluster/health; do sleep 3; done
echo "기동 완료"
curl -s "http://127.0.0.1:9200/_cluster/health?pretty" | head -6
curl -s http://127.0.0.1:9200 | head -8      # 버전 확인

기대: "cluster_name" : "elk-lab", "status" : "green", "number_of_nodes" : 1. (아직 Kibana를 설치하기 전이라 green입니다. Kibana 기동 후에는 yellow로 바뀌는데, 이것도 정상입니다 - H절 관문 1.)

기동에 실패하면 로그부터 봅니다.

tail -30 /var/log/elasticsearch/elk-lab.log

내 PC 브라우저에서도 열리는지 확인합니다: http://127.0.0.1:9200

글쓴이 최경호
Copy & Run

IT와 사이버보안 분야에서 15년 이상 일했고 AI, 클라우드, 개발, 보안을 주로 다룹니다. 교육에서 직접 쓰는 실습을 글로 정리합니다.

SIEM 관제 실습 (ELK) 과정의 일부입니다

이 실습은 교육에서 참가자마다 독립된 환경으로 진행합니다. 팀 교육으로 구성이 필요하면 문의해 주세요.

과정 보기교육 문의