[Elasticsearch]AWS EC2에 Elasticsearch/Kibana 설치하기

차보경·2023년 1월 5일
1

ElasticSearch

목록 보기
6/6
post-thumbnail

1. EC2에 보안모드 신규 작성

2. EC2 Ubuntu 생성

3. EC2에 Elasticsearch 설치

0) 기본 system packages Update

  • sudo apt update
  • 혹시 https에 접속하려면 install 해준다 (우선 생략)
    Install the apt-transport-https package to access repository over HTTPS

1) OpenJDK 설치

  • OpenJDK 11를 깔아준다 (ES의 경우 8이상만 되면 됨)
    sudo apt install openjdk-11-jdk
    • Hoxy 나는 8version으로 받고 싶다면,
      sudo apt-add-repository 'deb http://security.debian.org/debian-security stretch/updates main'
      sudo apt install openjdk-8-jdk
      요렇게 하면 됩니당. 참고 stackoverflow
  • 자바 설치 확인 java --version
openjdk 11.0.17 2022-10-18
OpenJDK Runtime Environment (build 11.0.17+8-post-Ubuntu-1ubuntu222.04)
OpenJDK 64-Bit Server VM (build 11.0.17+8-post-Ubuntu-1ubuntu222.04, mixed mode, sharing)

이렇게 나오면 성공!

2) ElasticSearch 8 설치

  • How to Install Elasticsearch on Ubuntu 18.04
  • public signing key 다운
    wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
  • 레파지토리 위치 저장
    echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
    • 8버전이 아니라면 상기 위치에서 8대신 7 또는 원하는 버전으로 변경하면 됨
  • 이제 진짜 Elasticsearch 다운!
    sudo apt-get update
    sudo apt-get install elasticsearch

3) Kibana 설치

  • sudo apt-get install kibana

4) logstash, filebeat 설치

  • sudo apt-get install logstash && sudo apt-get install filebeat

4) net-tools 패키지, curl 패키지 설치

  • 서버와 통신하는지 확인할 수 있는 net-tools 패키지, url 서버와 통신할 수 있는 curl 패키지 설치.
    sudo apt-get install net-tools $$ sudo apt-get install curl

4. Elastic Program 실행

1) elasticsearch 실행

  • 실행
    sudo systemctl start elasticsearch
    • Error 발생~~~
  Job for elasticsearch.service failed because a timeout was exceeded.
See "systemctl status elasticsearch.service" and "journalctl -xeu elasticsearch.service" for details.

이런 내용이 발생해서 확인을 해보니 아래처럼 뜬다...

  ubuntu@ip-172-31-4-103:~$ systemctl status elasticsearch.service
× elasticsearch.service - Elasticsearch
     Loaded: loaded (/lib/systemd/system/elasticsearch.service; disabled; vendor preset: enabled)
     Active: failed (Result: timeout) since Thu 2023-01-05 08:39:14 UTC; 1min 3s ago
       Docs: https://www.elastic.co
    Process: 4715 ExecStart=/usr/share/elasticsearch/bin/systemd-entrypoint -p ${PID_DIR}/elasti>
   Main PID: 4715 (code=exited, status=143)
        CPU: 42.758s

Jan 05 08:37:50 ip-172-31-4-103 systemd[1]: Starting Elasticsearch...
Jan 05 08:39:10 ip-172-31-4-103 systemd[1]: elasticsearch.service: start operation timed out. Te>
Jan 05 08:39:14 ip-172-31-4-103 systemd[1]: elasticsearch.service: Failed with result 'timeout'.
Jan 05 08:39:14 ip-172-31-4-103 systemd[1]: elasticsearch.service: Unit process 4774 (java) rema>
Jan 05 08:39:14 ip-172-31-4-103 systemd[1]: elasticsearch.service: Unit process 4795 (controller>
Jan 05 08:39:14 ip-172-31-4-103 systemd[1]: Failed to start Elasticsearch.
Jan 05 08:39:14 ip-172-31-4-103 systemd[1]: elasticsearch.service: Consumed 39.936s CPU time.


CPU를 많이 쓰는 것도 아닌데? 우선 timeout 해제하니까 실행됐다^0^관련블로그

  • 서버 열면 자동 실행 저장
    sudo systemctl enable elasticsearch
  • 실행 상태 확인
    sudo systemctl status elasticsearch

    이렇게 나오면 성공!

하고 curl -XGET 'localhost:9200'curl 을 날려서 확인할 수 있다!

ubuntu@ip-172-31-2-67:~$ curl -XGET 'localhost:9200'
{
  "name" : "ip-172-31-2-67",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "D7S7Fei0QAuzcm2J_11-5A",
  "version" : {
    "number" : "7.17.8",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "120eabe1c8a0cb2ae87cffc109a5b65d213e9df1",
    "build_date" : "2022-12-02T17:33:09.727072865Z",
    "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"
}

사실 이부분은 내가 프리티어인 t2.micro로 진행해서 cpu, ram이 딸려서 이렇게 나왔다...ㅎ.... 메모리 1기가라니
ES는 최소 4GB의 램이 필요하다고 합니다 → medium으로 올림
참고) AWS 인스턴트 유형

5. config 수정

1) ElasticSearch Config 수정

  • sudo nano /etc/elasticsearch/elasticsearch.yml 입력
    cluster.name, node.name # 제거
    network.host: 0.0.0.0
    http.port: 9200
    discovery.seed_hosts: []
    xpack.security.enabled: false


    저는 이렇게 수정해서 클러스터 이름부여(cluster.name), 외부접속 허용(network.host: 0.0.0.0), 포드부여(http.port: 9200) 해줬습니다!
  • 자세한건 공식문서참고!

    💡nano 모드 팁
    i 누를 필요없이 바로 수정가능
    Ctrl + O를 눌러 저장해주고, Ctrl + X로 나와준다.
    (개인적으로 vi모드랑 헷갈려서 적음! vi모드하면 잘 안보여ㅜㅜㅜ)

sudo systemctl restart elasticsearch 재부팅~

해당 http로 들어가면 이렇게 설정한대로 출력되는 것을 확인할 수 있습니다!

2) Kibana config 수정

  • sudo nano /etc/kibana/kibana.yml 입력
  • 해당 port인 5601을 부여해주고, server.host를 "0.0.0.0"으로 외부접속이 가능하도록 바꿔줍니다.
  • 그리고 ES와 연동하기위해
    elasticsearch.hosts: ["http://"ES 부여 IP":9200"]도 변경해줬습니다.
  • 각각이 뭘 의미하는지 궁금하다면 공식문서를 참고합시당:)

sudo systemctl restart kibana 재부팅~

키바나도 http를 통해 접속하면 이렇게 들어가지는게 보입니다!

이제 저장한 데이터들만 넣어주면 되겠....죠? (사망플래그^___^)


참고 블로그 :

profile
차보의 Data Engineer 도전기♥ (근데 기록을 곁들인)

1개의 댓글

comment-user-thumbnail
2023년 10월 18일

안녕하세요
5-1. ElasticSearch Config 수정에서 클러스터 이름부여(cluster.name)는 왜 필요한지
5-2. Kibana Config 수정에서 "ES 부여 IP"는 뭘 말하는지 잘 모르겠어서 ㅠㅠ
혹시 답변 가능하시다면 답 부탁드립니다 !!

답글 달기