Elasticsearch 구축

강정우·2024년 6월 11일
0
post-thumbnail

linux 에 elasticsearch 구축하기

우선 총 3 가지를 설치해줘야한다.

1. Elasticsearch 설치

Elasticsearch는 데이터 저장 및 검색을 담당하는 핵심 구성요소이다.

아래는 쌩 linux 혹은 macOS 를 사용하는 사람들이 사용하는 거고
우리는 linux 배포판인 데비안의 대장격이 ubuntu를 사용하니 여기로 들어가서 따라하면 된다.

이걸 너무 늦게 봤다 젠장..
아래 kibana 도 마찬가지.


# Elasticsearch 8.14.0 버전의 Linux 64비트 압축 파일을 다운로드
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.14.0-linux-x86_64.tar.gz
# 다운로드한 파일의 SHA-512 체크섬 파일을 함께 다운로드
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.14.0-linux-x86_64.tar.gz.sha512
# 다운로드한 압축 파일의 SHA-512 체크섬을 확인하여 파일 무결성을 검증
shasum -a 512 -c elasticsearch-8.14.0-linux-x86_64.tar.gz.sha512 
# 압축 파일을 압축 해제
tar -xzf elasticsearch-8.14.0-linux-x86_64.tar.gz
압축 해제된 Elasticsearch 디렉토리로 이동
cd elasticsearch-8.14.0/ 

혹시 주석 없이 명령줄만 원한다면 공홈 제일 위 코드블럭에 있음.

그리고 완료되었다면 마지막 부분에 아래와 같은 문구를 볼 수 있는데

Compares the SHA of the downloaded .tar.gz archive and the published checksum, which should output elasticsearch-{version}-linux-x86_64.tar.gz: OK.

This directory is known as $ES_HOME."

첫 문장은 압축파일의 SHA 체크섬 확인한느 과정으로 잘 다운됐는지 확인하는거고
두번째 문장은 Elasticsearch가 설치된 디렉토리를 의미한다.
압축 해제된 디렉토리를 $ES_HOME이라고 부른다. 아마 Elastic_Search 를 줄여 ES_HOME 인듯하다.
이 디렉토리는 Elasticsearch 실행, 설정 파일 수정 등 Elasticsearch 관련 작업을 수행할 때 중요한 참조 경로가 된다.

그리고 elasticsearch-8.14.0 위치에서

sudo /bin/elasticsearch

를 하면 아래와 같은 최종 결과값을 받아볼 수 있다.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ Elasticsearch security features have been automatically configured!
✅ Authentication is enabled and cluster connections are encrypted.

ℹ️  Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`):
  q7Ot1kX=kKaYL2ULJVgU

ℹ️  HTTP CA certificate SHA-256 fingerprint:
  fd4d7c1aa1eca4008bcbb2233ff33946ff5ab9204551d3dd0ff59efba9778079

ℹ️  Configure Kibana to use this cluster:
• Run Kibana and click the configuration link in the terminal when Kibana starts.
• Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30 minutes):
  eyJ2ZXIiOiI4LjE0LjAiLCJhZHIiOlsiMTcyLjE3LjAuMTo5MjAwIl0sImZnciI6ImZkNGQ3YzFhYTFlY2E0MDA4YmNiYjIyMzNmZjMzOTQ2ZmY1YWI5MjA0NTUxZDNkZDBmZjU5ZWZiYTk3NzgwNzkiLCJrZXkiOiJNdW9MQVpBQmJ6Ylk5dVo3dEdSazo2R1NCT1AxRVNkcXJMNTBPcHg4UWp3In0=

ℹ️  Configure other nodes to join this cluster:
• On this node:
  ⁃ Create an enrollment token with `bin/elasticsearch-create-enrollment-token -s node`.
  ⁃ Uncomment the transport.host setting at the end of config/elasticsearch.yml.
  ⁃ Restart Elasticsearch.
• On other nodes:
  ⁃ Start Elasticsearch with `bin/elasticsearch --enrollment-token <token>`, using the enrollment token that you generated.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

위 메시지를 대충 보면

인증이 활성화되었고 클러스터 연결이 암호화되었음.
elastic 사용자의 비밀번호가 자동으로 생성되었음.
이 비밀번호는 필요할 때 bin/elasticsearch-reset-password -u elastic 으로 재설정할 수 있음.

HTTP CA 인증서의 SHA-256 fingerprint가 제공되었음.
Kibana를 이 Elasticsearch 클러스터에 연결하기 위한 enrollment token이 제공되었음.
또 마지막으로 다른 노드를 이 클러스터에 참여시키기 위한 방법이 설명되어있다.

이렇게 하면 절반 성공.

는 Elasticsearch가 보안을 위해 자동으로 구성된 것을 의미하며, 이제 Kibana를 설치하고 이 값들을 잘 저장해 두었다가 enrollment token을 사용하여 Elasticsearch와 연결하면 ELK 스택을 사용하면 된다.

  • 만약 추가 노드 연결 하고싶다면
# Elasticsearch 노드에서 노드 등록 토큰 생성
./bin/elasticsearch-create-enrollment-token -s node

생성된 토큰을 복사.
Elasticsearch 구성 파일 config/elasticsearch.yml에서 transport.host 설정을 주석 해제.
Elasticsearch를 다시 시작.

./bin/elasticsearch

다른 노드에서 생성된 토큰을 사용하여 Elasticsearch를 시작.

./bin/elasticsearch --enrollment-token <token>

이렇게 Kibana를 설치하고 Elasticsearch 클러스터에 연결하면 ELK 스택 사용을 시작할 수 있다.
추가 노드를 클러스터에 연결하여 확장할 수 있다.

2. Kibana 설치

Kibana는 Elasticsearch에 저장된 데이터를 시각화하고 대시보드를 제공한다.
마찬가지로 linux 혹은 macOS 용 으로 설치했는데 이것도 여기를 보고 따라하면 된다.


공식 웹사이트에서 Kibana 패키지를 다운로드하여 설치한다.

curl -O https://artifacts.elastic.co/downloads/kibana/kibana-8.14.0-linux-x86_64.tar.gz
curl https://artifacts.elastic.co/downloads/kibana/kibana-8.14.0-linux-x86_64.tar.gz.sha512 | shasum -a 512 -c - 
tar -xzf kibana-8.14.0-linux-x86_64.tar.gz
cd kibana-8.14.0/ 
sudo vi /etc/kibana/kibana.yml
# 윗 부분에 있음 이걸 잡아줘야 다른 자리에서 접속이 됨.
server.host: 0.0.0.0
# 가장 밑에 
elasticsearch.hosts: ["http://localhost:9200"]

그리고 똑같이 실행해준다.

kibana-8.14.0 => sudo /bin/elasticsearch

3. Logstash 설치

Logstash는 다양한 소스의 로그 데이터를 수집하고 가공하는 pipe-line 역할

공식 웹사이트에서 Logstash 패키지를 다운로드하여 설치.

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic-keyring.gpg
sudo apt-get install apt-transport-https
echo "deb [signed-by=/usr/share/keyrings/elastic-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list
sudo apt-get update && sudo apt-get install logstash

얘는 키바나, elastic search 와 설치하는 방법이 조금 다르다. kibana, elastic search 는 압축 파일을 직접 받았다면 logstash 는 그런거 없기 때문에 리포지토리를 활성화 하고 리포지토리 GPG 키를 가져온 다음 설치를 하는 방법이다.

다음 ELK 스택 실행 및 연결을 해준다.

Logstash 구성 파일 작성

Logstash는 입력, 필터, 출력 단계로 구성된다.
로그 데이터 수집을 위한 Logstash 구성 파일을 작성한다.

sudo nano /etc/logstash/conf.d/syslog.conf

그리고 아래 구성 파일을 넣는다.

# config/pipeline/example.conf
input {
  file {
    path => ["/var/log/syslog", "/var/log/auth.log"]
    start_position => "beginning"
  }
}

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
}

output {
  elasticsearch {
    hosts => ["https://본인ip:9200"]
    index => "logstash-%{+YYYY.MM.dd}"
  }
}
sudo systemctl start logstash
sudo systemctl status logstash

4. Logstash 재시작 및 Kibana 확인 및 방화벽 열어주기

Logstash 구성 파일 변경 후 Logstash를 재시작한다.

sudo systemctl restart logstash

Kibana 대시보드에서 "Management" 섹션으로 이동하여 "Index Patterns"을 생성한다.
이제 "Discover" 섹션에서 수집된 시스템 로그 데이터를 확인할 수 있다.

# ubuntu 기분
sudo ufw allow 9200/tcp
sudo ufw allow 5601/tcp
sudo ufw status

5. 참고

logstash 구성에 output/elasticsearch/hosts 부분은 내 ip:9200 혹은 그냥 elasticsearch:9200 으로도 쓸 수 있는데 이 두가지엔 차이점이 존재한다.

hosts => ["http://elasticsearch:9200"]

이 방식은 Logstash와 Elasticsearch가 동일한 네트워크 상에 있고, Elasticsearch 호스트 이름이 "elasticsearch"로 설정되어 있을 때 사용할 수 있다.
호스트 이름을 사용하면 IP 주소가 변경되더라도 구성을 변경할 필요가 없다.

hosts => ["http://내_ip:9200"]

이 방식은 Logstash와 Elasticsearch가 다른 네트워크 상에 있거나, Elasticsearch 호스트 이름이 "elasticsearch"가 아닐 때 사용할 수 있다.

두 가지 방법 모두 정상적으로 동작한다.
어떤 방식을 선택할지는 Logstash와 Elasticsearch의 네트워크 구성에 따라 달라진다.

일반적으로 호스트 이름을 사용하는 것이 더 유연하고 관리하기 쉽다.
하지만 네트워크 구성이나 DNS 설정에 따라 IP 주소를 직접 지정해야 할 수도 있다.

따라서 Logstash와 Elasticsearch의 네트워크 환경을 고려하여 적절한 방식을 선택하면 된다.
하지만 우리는 앞서 Kibana 설정에 외부에서도 접속 가능하도록 server.host: 옵션을 설정해두었으니 그냥 내_ip 로 설정하는 것이 좋겠다.

6. 실행

엘라스틱 서치를 켜고 키바나를 실행하면 아래와 같은 url 이 뜬다.

그리고 해당 url 로 들어가면 이런 페이지가 뜬다.

여기서 앞서 저장해둔 문구의 아래 부분을 넣어준다.

그럼 코드를 입력하라고 뜬다면

이제 url 제일 뒷 부분 code 부분을 넣어주면 된다.

그럼 이제 이런 페이지가 나오는데

만약 앞서 말 한대로 pw 초기화 명령어를 따로 입력하지 안 았다면 아래 코드를 치고 들어가면 된다.
참고로 id 는 elastic 이 기본값이다.

결과

reference

https://jjeongil.tistory.com/2007
https://knu-cd2.github.io/blog/

profile
智(지)! 德(덕)! 體(체)!

0개의 댓글