일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Kubernetes
- 프로그래머스
- 완전탐색
- FastAPI
- github
- leetcode
- autoencoder
- 네이버AItech
- 코딩테스트
- docker
- NLP
- pep8
- DeepLearning
- FDS
- pytorch
- GCP
- python
- 백준
- 알고리즘
- Kaggle
- NaverAItech
- torchserve
- wandb
- PytorchLightning
- Matplotlib
- vscode
- rnn
- GitHub Action
- GIT
- datascience
- Today
- Total
Sangmun
ubuntu elasticsearch, kibana 설치 본문
프로젝트 간 elastic search를 이용한 검색 및 간단한 시각화 기능이 필요해서 elastic search와 kibana를 ubuntu에 설치를 해보았다.
1. Elasticsearch 설치
# sudo 설치
apt-get update && apt-get -y install sudo
# 패키지 색인을 업데이트
sudo apt update
# HTTPS를 통해 리포지토리에 액세스하는 데 필요한 apt-transport-https 패키지를 설치
sudo apt install apt-transport-https
# OpenJDK 8 설치
sudo apt install openjdk-8-jdk
java -version # openjdk version "1.8.0_191"
# OpenPGP 암호화 툴 설치
apt-get install -y gnupg2
# Elasticsearch 저장소의 GPG key를 사용해 설치 (GPG key를 암호화/복호화 프로그램이라고 이해하고 넘김)
# 리눅스 배포판에는 기본적으로 GPG가 설치되어 있음
# OK가 반환되어야 함 (맨 뒤 add까지 명령어로 입력해야 함)
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
# Elasticsearch 저장소를 시스템에 추가
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
# 이제 진짜 elasticsearch 설치
sudo apt update
sudo apt install elasticsearch # elasticsearch 7.10.0 설치됨(7.x 버전이면 작동할듯)
# elasticsearch 시작(설치 완료 후 자동으로 시작되지 않음)
service elasticsearch start
# 경로 이동해서 nori 형태소분석기 설치
cd /usr/share/elasticsearch
bin/elasticsearch-plugin install analysis-nori
# elasticsearch 재시작 (형태소분석기 설치 후 재시작이 필수적!)
service elasticsearch restart
# curl 명령어 설치
sudo install curl
# Elasticsearch가 실행 중인지 확인
curl "localhost:9200"
# Python Elasticsearch Client 설치
pip install elasticsearch
검색을 실시할때는 nori tokenizer로 분할된 형태에서 유사도를 측정하여 검색을 할 예정임으로 nori tokenizer를 설치해 주었다.
Elastic Search는 default값으로 localhost:9200으로 서비스가 시작된고, 이후 제대로 설치되고 서비스가 정상 실행 중인지 확인하기 위해 해당 주소로 curl 명령어를 실행해 주면 아래와 같은 json 파일이 return 되고 정상실행 중이라는 것을 확인할 수 있다.
{
"name" : "c40a65c93723",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "DPTI7y_jTeyG-AMngZaHDw",
"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"
}
2. python으로 elasticsearch에 index 생성, 삽입, 검색
파이썬으로 elasticsearch를 사용할때 기본적으로 사용해야 할 함수들이다.
from elasticsearch import Elasticsearch
# elasticsearch instance 생성
es = Elasticsearch("http://localhost:9200", request_timeout=30, max_retries=10, retry_on_timeout=True)
# index_name 설정 및 index의 setting load
index_name = 'sample_index'
with open('setting.json', "r") as f:
setting = json.load(f)
# index 생성
es.indices.create(index=index_name, body=setting)
# index에 한개의 데이터를 삽입
# title과 description은 사용자 정의 항목
doc = {"title": 'sample_title', "description": 'sample_description'}
es.index(index=self.index_name, body=doc)
위 항목에서 사용한 setting.json 파일은 아래와 같다.
{
"settings": {
"analysis": {
"filter": {
"my_shingle": {
"type": "shingle"
}
},
"analyzer": {
"my_analyzer": {
"type": "custom",
"tokenizer": "nori_tokenizer",
"decompound_mode": "mixed",
"filter": ["my_shingle"]
}
},
"similairty": {
"my_similarity": {
"type": "BM25"
}
}
}
},
"mappings": {
"properties": {
"document_text": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
이제 index에서 원하는 항목을 찾고 싶을때는 아래와 같은 간단한 함수로 query를 날릴 수 있다.
# elasticsearch에 query_doc 형식으로 query를 한다
# description항목에서 your_query에 해당하는 row들을 찾아서 반환해준다.
query_doc = {
"bool": {
"must": [
{"match": {"description": your_query}},
]
},
}
es.search(index=index_name, query=query_doc, size=topk)
Elastic Search에서 index들의 용량을 체크하는 방법
curl -XGET 'http://localhost:9200/_cat/allocation?v'
위의 명령어를 사용하면 아래와 같이 현재 사용중인 용량과 가능한 용량을 알려준다.
shards disk.indices disk.used disk.avail disk.total disk.percent host ip node
11 411.4mb 32.8gb 65.4gb 98.3gb 33 127.0.0.1 127.0.0.1 c40a65c93723
1 UNASSIGNED
3. Kibana 설치 및 설정
Kibana는 elasticsearch에 저장되어 있는 데이터들을 web에서 시각화해서 볼 수 있는 툴이다,
원래는 데이터를 모아오는 역할을 하는 Logstash까지 합해서 ELK stack이라고 불리는데 나는 해당 프로젝트에서 Logstash는 사용은 안 했다.
* 키바나 설치
sudo apt-get install kibana
* 키바나 구성
sudo vi /etc/kibana/kibana.yml
위의 yml의 파일을 보면 3가지 구성할 항목이 있고 우선은 #으로 주석처리가 되어있지만 제거하면서 활성화를 해주면 된다.
# default port는 5601, 서버의 환경에 따라서 포트를 변경해주면된다.
server.port: 5601
# 나의 경우에는 도메인은 없고 외부로 서빙이 필요한 상태라 0.0.0.0으로 설정했다.
server.hostname: "your-hostname"
# 서버내에서 elasticsearch가 오픈되어있는 주소와 포트
elasticsearch.hosts: ["http://localhost:9200"]
* 키바나 서비스 시작
# Kibana 서비스 실행
$ sudo systemctl start kibana.service
# Kibana 서비스 부팅 시 시작되도록 활성화
$ sudo systemctl enable kibana.service
# 추가적으로 방화벽이 설정되어있으면 해제가 필요하다.
$ sudo ufw allow 5601/tcp
아래는 kibana 메인페이지에서 discover 기능으로 진입한 화면이다. 해당 인덱스에서 굉장히 직관적으로 데이터들을 관찰할 수 있다. 기본적인 검색 기능과 필터링 기능이 있으며 Canvas 탭에서 데이터들을 바탕으로 시각화도 가능하다.
딱히 매뉴얼을 보지 않아도 바로바로 알 수 있을 만큼 굉장히 기능들이 직관적이다.
4. elasticsearch, kibana 보안설정
TODO