이전 Elasticsearch 사용을 위한 Ubuntu, WSL 설치 글에서 이어진다.
🌿Elasticsearch
https://www.elastic.co/kr/elasticsearch
Elasticsearch는 루씬 기반의 자바 오픈 소스 검색 엔진이다.
방대한 양의 데이터를 신속하고 거의 실시간으로 저장/검색/분석할 수 있다. 검색에 한해서는 대다수의 서비스에서 사용될 정도로 Elasticsearch가 많이 사용된다.
REST API를 제공하며, JSON 형태로 데이터 저장/조회한다.
REST API와 JSON
REST API와 JSON 형태 데이터 형식에 대해서는 위 글을 참고한다.
🌿Elasticsearch 핵심 개념
1. 클러스터
클러스터는 노드의 집합을 의미한다.
만약 노드를 3개 묶어 서비스를 만든다면, 노드가 3개 묶인 단위를 클러스터라고 부른다.
즉, 클러스터는 하나 이상인 노드의 집합을 말한다.
2. 노드
노드는 엘라스틱서치가 설치된 서버(컴퓨터)이다.
Oracle에서는 하나의 컴퓨터에 하나의 Oracle을 깔았다. 하지만 현업에 가면 수많은 컴퓨터에 Oracle을 깔아 놓고 하나로 묶는다. 이러한 분산된 환경의 컴퓨터들을 Node라고 한다.
엘라스틱서치도 분산된 요청을 받다보니까 컴퓨터 한 대로는 돌리기 힘든 상황이 생긴다. 그래서 똑같은 프로그램을 수많은 컴퓨터에 깔아놓고 하나로 묶는 작업을 하게 된다.
3. 인덱스
인덱스는 비슷한 특성을 가진 문서의 집합을 의미한다.
모든 데이터를 모아 놓은 최상위 집합이기 때문에 데이터베이스의 역할을 하게 된다.
4. 타입
타입은 도큐먼트의 집합으로, 테이블의 역할을 한다.
버전업이 되면서 타입의 역할은 거의 없다시피하게 되었다. 그래서 인덱스가 도큐먼트의 집합처럼 되었다.
5. 도큐먼트
도큐먼트는 데이터의 저장 단위이다.
실제 데이터가 들어 있는 레코드의 역할을 한다.
도큐먼트 단위로 데이터를 입출력하기 때문에 인덱스와 함께 중요한 개념이다.
JSON 포맷의 데이터를 입출력하므로 레코드 한 줄이 JSON 형태의 Object 하나라고 보면 된다.
6. 샤드&리플리카
샤드&리플리카는 분산 환경을 위한 요소이다.
🍃RDBMS vs Elasticsearch
RDBMS | Elasticsearch |
Scheme | Mapping |
Database | Index (***) |
Table | Type |
Row | Document (***) |
Column | Field |
SQL | QueryDSL |
RDBS와 Elasticsearch는 위와 같이 대응한다.
REST API vs Elasticsearch
REST API | Elasticsearch |
SELECT | GET |
UPDATE | PUT/POST |
INSERT | PUT/POST |
DELETE | DELETE |
SQL에서 select * from tblAddress where id = 1;을 한다면, Elasticsearch는 curl -X GET "localhost:9200/address/_doc/1"처럼 쿼리를 만든다.
🌿ELK or Elastic Stack
- E (Elasticsearch)
- L (Logstash)
- K (Kibana)
- B (Beats)
엘라스틱 서치는 단독으로 사용하기도 하지만, ELK 스택으로 사용하기도 한다.
최근에는 추가로 Beats까지 사용하기도 한다.
Logstash/Beats 역할
Logstash와 Beats 모두 Ingest 역할을 한다.
다양한 소스(DB, CSV, Log..)로부터 데이터를 가져다가 여러 가지 조작 후 Elasticsearch에게 전달한다.
크롤링이나 스크래핑과는 다른 개념으로, 데이터를 긁어오는 역할을 한다.
Elasticsearch 역할
Store, Search, Analyze 역할을 한다.
Elasticsearch가 직접 수집한 데이터 또는 Logstash가 수집한 데이터 등을 관리하고 조작한다.
Kibana 역할
Visualize & Manage 역할을 한다.
즉, Elasticsearch 안에 들어 있는 데이터를 시각화 하거나 편리하게 조작하는 기능을 제공한다.
GUI 환경을 제공한다고 보면 된다.
🌿ELK 설치
$ curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch |sudo gpg --dearmor -o /usr/share/keyrings/elastic.gpg
$ 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
기본적으로 Ubuntu가 Elasticsearch라는 프로그램을 모른다.
위 코드는 이런 곳에 Elasticsearch가 있으니 확인해서 설치해달라는 의미로 하는 행동이라고 보면 된다.
그리고 sudo apt-get update로 패키지 업데이트를 진행해 주면 된다.
🌿Elasticsearch 설치
Elasticsearch는 현재 8.대까지 나왔지만, 7.대를 설치하기로 한다.
https://www.elastic.co/kr/downloads/past-releases#elasticsearch
https://www.elastic.co/kr/downloads/past-releases/elasticsearch-7-17-15
DEB 파일이 Ubuntu에서의 설치 파일이다.
sudo apt-get install elasticsearch
sudo apt-get install elasticsearch
ELK를 설치할 때 7.대의 deb을 받도록 했기 때문에 위 코드를 작성하기만 하는 것으로 사이트에서 설치를 하지 않아도 알아서 설치가 진행된다.
systemctl status elasticsearch
$ systemctl status elasticsearch
$ sudo systemctl start elasticsearch
현재 프로그램의 상태를 보여준다. 현재 페이지에서 빠져나가려면 q를 누르면 된다.
Active 상태가 inactive 상태이므로 start를 해 주어야 한다.
sudo systemctl start elasticsearch
start를 해 주었기 때문에 실행 상태로 변경되었다.
제대로 시작이 되었는지 확인하기 위해서는 브라우저에 다음의 주소를 적으면 된다.
- http://localhost:9200
포트번호가 9200번인 localhost 주소로 들어갔을 때 위와 같이 화면이 나오면 프로그램이 잘 돌고 있는 상태이다.
Ubuntu를 실행할 때마다 매번 Elasticsearch를 실행해야 하기 때문에 매번 실행시키기 귀찮다면 enable 옵션을 주면 된다.
sudo systemctl enable elasticsearch
$ sudo systemctl enable elasticsearch
이제 Ubuntu를 실행하면 Elasticsearch가 자동으로 실행된다.
🌿Kibana 설치
sudo apt-get install kibana
$ sudo apt-get install kibana
$ sudo systemctl status kibana
$ sudo systemctl start kibana
키바나는 시각화를 담당하기 때문에 프로그램이 무거운 편이다.
- http://localhost:5601
키바나의 포트 번호는 5601번이다.
처음에 위 링크로 들어가면 Welcome 화면이 뜬다. 이때 직접 탐색을 하겠다는 의미로 Explore on my own 버튼을 클릭하면 된다.
🌿Logstash 설치
sudo apt-get install logstash
$ sudo apt-get install logstash
Logstash는 사용할 때마다 실행하면 되기기 때문에 계속 동작시키지 않아도 된다.