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