본문 바로가기

데이터베이스/ELK

(18)
[ELK] Elasticsearch nori 형태소 분석기의 stoptags 한글 품사 0. 문제점 앞의 글에서 버킷 집계에 대하여 정리하였다. 하지만 인덱스를 생성하는 세팅에서 문제점을 발견했다. 짜잘한건 냅두고 가장 큰 문제점은 한글 형태소 분석기의 품사 태크를 설정하지 않아서 아래처럼 문장이 이상하게 분리되었다. "aggregations" : { "term_aggs" : { "doc_count_error_upper_bound" : 0, "sum_other_doc_count" : 0, "buckets" : [ { "key" : "ᄇ니다", "doc_count" : 1 }, { "key" : "가", "doc_count" : 1 }, { "key" : "애국", "doc_count" : 1 }, { "key" : "이", "doc_count" : 1 } ] } } 1. stoptags 품..
[ELK] Elasticsearch 단어 사용 횟수 통계 (버킷 집계 - terms) 0. 들어가며 커뮤니티 프로젝트에서 사용된 단어를 형태소 분석기를 통해 토큰으로 분리한 단어의 사용 빈도 데이터를 추출해야한다. ES에서 _search API를 이용해서 단어의 통계를 구하려한다. 이때 필요한 지식이 버킷 집계이다. 1. 버킷 집계 매트릭 집계가 특정 필드를 기준으로 통계값을 계사하려는 목적이라면, 버킷 집계는 특정 기준에 맞춰서 조큐먼트를 그룹핑하는 역할을 한다. 버킷은 도큐먼트가 분할되는 단위로 나뉜 각 그룹을 의미한다. 위 사진처럼 도큐먼트들을 버킷 집계를 통하며 각각의 버킷 집합으로 만든다. 버킷 집계 종류 버킷 집계 설명 histogram 숫자 타입 필드를 일정 간격으로 분류한다. date_histogram 날짜/시간 타입 필드를 일정 날짜/시간 간격으로 분류한다. range 숫..
[ELK] Elasticsearch 한글 형태소 분석기 nori tokenizer 1. nori tokenizer의 필요성 ES의 기존의 형태소 분석기는 한글을 토큰으로 분리하는데 적합하지가 않다. 한글은 제대로 구현이 되어있지 않기 때문이다. 그래서 새롭게 나온 분석기가 한글 형태소 분석기 즉, nori tokenizer이다. 2. analysis-nori 플러그인 설치 ES 버전은 7.16.4를 사용하였고, 로컬 docker 환경에서 구축하였다. # elasticsearch/Dockerfile FROM elasticsearch:7.16.3 RUN bin/elasticsearch-plugin install --batch analysis-nori ES의 Dockerfile에 노리 플러그인을 RUN 명령어로 추가하면 ES 컨테이너가 생성되면서 노리 플러그인도 같이 설치가 된다. 3. S..
[ELK] Elasticsearch DSL 검색 쿼리 문법 1. 엘라스틱서치 검색 쿼리 종류 전문 쿼리 전문 검색에 사용 인덱스 매핑 시 텍스트 타입으로 매핑을 권장 match : 가장 기본이 되는 검색 match_phrase : 용어의 순서까지 완전 일치하는 검색 multi_match : 다중 필드에서 검색. 필드에 가중치 부여 가능 query string : 연산자를 중심으로 텍스트를 분할하여 검색 용어 수준 쿼리 대소문자까지 정확히 일치하는 용어(term) 검색에 사용 term terms fuzzy : 유사한 알파벳까지 검색 쿼리 (한국어 x) 범위 쿼리 날짜, 숫자 등 범위에 지정한 검색에 사용 range 논리 쿼리 (복합 쿼리 = bool) 쿼리들을 조합해 사용하는 쿼리 must : AND must_not : 거짓 should : OR filter : ..
[ELK] Elasticsearch DSL 기본 문법 0. DSL DSL이란 Domain Specific Language으로 JSON에 기반한 질의이다. ES에서의 DSL은 데이터베이스의 SQL문과 동일하다고 이해하면 된다. 즉, 사용자가 원하는 데이터를 추출하기 위한 질의 언어이다. URL 주소 뒤에 한 줄로 이어붙여서 쿼리문을 작성하는 쿼리 스트링보다 REST API 요청 본문 안에 JSON 형태로 쿼리를 작성하는 DSL이 가독성이 더 좋다. -> URL로 요청하는 쿼리문은 보통 간단하게 테스트용으로 자주 쓰인다. 좌측 메뉴 > Management > Dev Tools > Console에서 쿼리 DSL 실행 가능 1. 기본 쿼리 기본적으로 백엔드 API 개발할 때 사용하는 method와 유사하지만 기능은 조금 다르다. GET은 REST method 처럼..
프로젝트에서 엘라스틱서치에 적재된 로그 문제점 및 개선 사항 현재 문제점 게시글 생성 로그에서 발생 [ "{'Article_id': 'a4847333-c581-409c-b9a8-0ed7516b3c1e', 'Article': ArticleCreate(title='ㅇㅁㅇㅁ', content='ㅇㅁㅇ', summary='string', board_id=UUID('532aa49c-c677-4fe6-8a93-87ec01b23811'), board_path='mbti', tags=[], poll=PollCreate(title='string', is_multiple=False, contents=[])), 'User_id': None, 'Message': 'Article Create'}" ] 1. 'Article' key 부분의 value가 토크나이저로 분리하기 힘든 구조로 되..
Elastic APM을 이용한 FastAPI 모니터링 연동 1. Docker docker-compose.yml과 Dockerfile 세팅은 Django 연동할 때와 동일하기에 참고 바람. 2. FastAPI (1) 라이브러리 설치 먼저 해당 패키지를 다운받아야 한다. pip install elastic-apm or poetry add elastic-apm (2) FastAPI 설정 from elasticapm.contrib.starlette import make_apm_client, ElasticAPM # Elastic APM # https://medium.com/squad-engineering/how-to-optimize-elastic-apm-6f7f6d58bed5 apm_config = { "SERVICE_NAME": "FastAPI", "SERVER_URL..
Elastic APM을 이용한 Django 모니터링 연동 0. 들어가며 프로젝트에서 이벤트 로깅만 남기는 것이 아니라 시스템 로깅 (트랜잭션, CPU 부하 등등..)도 시각화할 수 있도록 APM을 도입을 권하기 위해 테스트용으로 연동이 잘되는지, 서버가 정상적으로 띄어지는지 확인하기 위해 구현하였다. 실제로 Elastic APM 보다 유료 APM이 더 인기 많고 많은 기업에서 사용하지만, Elastic Stack을 이미 사용하고 있다면 Elastic APM을 사용하는 것도 좋다. 먼저 알아둬야 할 것은... 도커를 이용해서 APM-Server를 띄울 것이다. APM 서버가 돌아가야 Kibana에서 APM을 사용할 수 있다. 그 다음엔 웹 어플리케이션(python, java ...)에서 APM-Server을 연동할 수 있도록 APM-Agent 설정을 해줘야 한다..