Elasticsearch란 루씬(자바로 된 정보 검색 오픈소스)기반 검색 엔진이다.
역인덱스 방식으로 단어 단위로 나눠서 저장을 하여 검색속도를 높인다.
장점 : 검색속도 빠름
- 모든 행을 탐색해야하는 RDBMS 방식보다. 이미 단어가 어느 문장에 들어있는지 mapping 되어 있으니 훨씬 빠르다.
단점 : 수정, 삭제 속도 느림
- 단어별로 다 쪼개놨으니 삭제하려면 일일이 찾아서 삭제해줘야하는 낭비가 존재
-> 아 그러면 수정과 삭제가 빈번하지 않고, 검색을 자주하게 되는거에 쓰면 좋겠군 -> 로그 수집 및 분석
현재 진행중인 프로젝트에서 로그 정보 수집 및 분석을 위해 도입하고자 한다.(나중에 따로 자세히 적어보겠다)
설치
1. java 다운로드 https://www.java.com/en/download/
- 이미 다운되어 있는지 확인
java -version
2. brew로 elasticsearch 다운로드
brew update
brew install elasticsearch-full
3. 다운로드 다 되면 elasticsearch 실행
elasticsearch
4. http://localhost:9200/ 로 접속해서 잘 실행되는지 확인
5. npm init으로 프로젝트 만들고 elasticsearch 연결을 위한 npm 설치(본인은 yarn으로 설치)
npm init
yarn add @elastic/elasticsearch
6. app.js를 만들어주고, npm start 설정등을 해줌
생략
7. 아래와 같이 연결
import { Client } from "@elastic/elasticsearch";
es_endpoint = "http://localhost:9200";
const client = new Client({
node: es_endpoint,
maxRetries: 5,
requestTimeout: 60000,
sniffOnStart: true,
});
async function linkElasticsearch() {
try {
client.ping();
console.log(`${es_endpoint}으로 elasticsearch 연결`);
} catch (e) {
console.log(e);
}
}
linkElasticsearch();
내용 자체는 명확하니 패스
8. Index를 만들어준다.
- Index는 RDBMS 기준으로 Database와 같은 layer에 위치하고, Table에 위치하는건 Type이라고 부른다. 하지만 elasticsearch의 특정 버전 위로는 하나의 Index에 하나의 Type을 갖는 것으로 변경되었다고 한다.
- RDBMS에서 Row(tuple)은 elasticsearch에서 Document와 같은 layer에 위치한다.
async function makeIndex() {
try {
client.indices.create({
index: "test_index",
});
} catch (error) {
console.log(error);
}
}
9. 임시로 로그 저장 방법
const temp_log =
"2022-08-05 14:37:31 error: Server Start Listening on port 8081";
console.log(temp_log);
await client.index({
index: "test_index",
document: {
time: temp_log.split(" ")[0] + " " + temp_log.split(" ")[1],
log_type: temp_log.split(" ")[2],
text: temp_log,
},
});
10. 저장된 data search 방법
http://localhost:9200/test_index/_search?q="info"
이런식으로 http://{엔드포인트}/{Index 명}/_search?q="{검색할 키워드}" 로 검색할 수 있고 이런 결과가 나온다.
차차 어떤식으로 로그를 저장할지는 고민해봐야할 것 같다.
그리고 지금은 local에 elasticsearch를 깔아서 돌렸지만 추후에는 서버에서 혹은 AWS에서 제공하는 'Amazon OpenSearch Service'라는 서비스 위에서 돌려야할 것 같다(1년은 프리티어로 쓸수 있더라)
좀 더 예쁘게 데이터를 보자
Kibana
Kibana 공홈에서는 'Kibana는 Elasticsearch 데이터를 시각화하고 Elastic Stack을 탐색하게 해주는 무료 오픈 소스 인터페이스입니다.'라고 설명하고 있다. 위에서 보기힘든 GUI를 개선시켜주는 툴이다.
1. 설치
brew update
brew install elastic/tap/kibana-full
2. 실행
- 기본적으로 elasticsearch는 9200 포트로 열리고, kibana는 5601 포트에서 열린다.
- kibana 로 실행할 수 있는데, 이때 localhost 외에 다른곳에서 열려면 따로 allow 설정을 해줘야한다.
elasticsearch
kibana
3. http://localhost:5601/ 로 접속
4. 이런식으로 discover 메뉴에서 index를 등록하면 볼 수 있다.
추후에 기능들은 좀 더 알아봐야겠다.
참고한 블로그
-> https://velog.io/@alli-eunbi/Elastic-Search-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-with-NodeJS
'개발 > NodeJS' 카테고리의 다른 글
[NodeJS] JS, Node.js, Express 관계 (0) | 2022.09.11 |
---|