일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- char 입력
- c++
- zshrc error
- fastify
- SSAFY입학
- docker
- 설치형 SW
- neofetch
- DevOps
- OpenSearch
- Java 입력
- 백준
- ECS
- docker context create
- comdef
- 프로세스
- mysql
- 출력 명령어
- 지속적 전달
- MongoServerSelectionError
- ci/cd
- 부트캠프
- 리눅스
- fastify-cli
- 웹 SW
- dfs
- cli
- 코드스테이츠
- 수직확장
- 홈 디렉토리
- Today
- Total
다디와 괴발개발
[OpenSearch] OpenSearch Dashboard에 location data Visualize를 위한 초기 설정 과정 본문
[OpenSearch] OpenSearch Dashboard에 location data Visualize를 위한 초기 설정 과정
아임다디 2022. 6. 7. 15:04목적
OpenSearch Dashboard(Kibana Visualize)로 프로젝트에서 사용되는 각 트럭 별로 이동 경로 데이터 보기 위해 해야 할 초기 셋팅 작업
개념
- ElasticSearch Mapping
- 데이터가 입력되어 자동으로 매핑이 생성되기 전에 미리 먼저 인덱스의 매핑을 정의 해 놓으면 정의 해 놓은 매핑에 맞추어 데이터가 입력된다
- 이미 생성된 데이터에 대한 매핑은 불가하다
- 즉,
location
데이터가 들어오기 전에 매핑을 먼저 해줘야 한다
- Geo
- Elasticsearch에서 제공하는 위치정보 저장 타입 중 하나
- Geo Point 는 위도(latitude)와 경도(longitude) 두 개의 실수 값을 가지고 지도 위의 한 점을 나타내는 값이다
location
을geo_point
로 매핑해놓으면 안에 들어있는lat
,lon
을 자동으로 위도, 경도로 인식해준다
- Kibana Visualize
- Kibana에서는 데이터 시각화를 제공해준다
- 위치 정보를 보기 위한
Coordinate Map
을 생성하고 데이터를 보기 위해서는geo_point
타입이 필수이다
야크털 쉐이빙
Visualize 과정에서 가장 애먹었던 부분은 geo_point
로 mapping 해주는 과정이었다.
기존에 Kinesis Data streams로 부터 데이터가 계속 들어와 있는 상태에서 타입을 재매핑해주려고 하니까 illegal_argument_exception 오류가 떴다. 🥲🥲
오류 내용
"type" : "illegal_argument_exception",
"reason" : "mapper [location] cannot be changed from type [long] to [geo_point]"
앞의 개념에서도 설명했듯이 이미 생성된 데이터에 대한 재매핑은 불가하므로 인덱스를 삭제해주고 다시 생성해서 매핑까지 한 뒤에 데이터를 받아야 한다
작업 과정 - Index Mapping
- 인프라를 모두 구축하고 아무런 데이터가 OpenSearch에 담기지 않은 상태
- OpenSearch Dashboard - DevTools을 통해 Index 생성 및 Mapping을 해준다
PUT drivers-log
{
"mappings": {
"properties": {
"location": {
"type": "geo_point"
}
}
}
}
응답이 아래와 같이 오면 성공적으로 매핑된 것 (상태코드 : 200 - success)
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "drivers-log"
}
인덱스에 대한 정보를 다시 확인하고 싶다면 GET drivers-log
를 해주면 된다
3. 이후 트럭 데이터들을 전송해주면 된다
+ 여담
프로젝트 초반 Kinesis Data Generator를 통해 OpenSearch에 데이터가 잘 도달하는지 테스트 하는 과정에서 OpenSearch에 미리 인덱스를 만들고 테스트를 했을 때 데이터가 도달하지 않아 생겼던 오해에서 비롯해 사용했던 방법
일단 위에서 도달하지 않았던 원인은 OpenSearch Backend-Role, Data Type 문제였다.
아무튼! 내가 처음에 사용했던 방법에 대해 후술해보자면,
- Kinesis Data Stream에 데이터를 보내기 위한 API Gateway 엔드포인트로 location이 들어가있지 않은 아무 테스트 데이터를 보내 인덱스를 생성해준다
- 주의사항 :
location
이 담긴 데이터를 보내면 이미 생성된 데이터에 대한 매핑은 불가하므로 반드시location
이 없는 아무런 데이터나 보내도록 한다{ "truckId": 11, "timestamp": 20220530021550 }
- OpenSearch Dashboard - DevTools을 통해 Index Mapping을 해준다
PUT drivers-log/_mapping
{
"properties": {
"location": {
"type": "geo_point"
}
}
}
작업과정 - Visualize
- OpenSearch Dashboard - StackManagement - Index Patterns 선택
- 보고자하는 인덱스의 인덱스 패턴 생성
geo_point
으로 성공적으로 매핑이 됐다면location
의 타입이geo_point
으로 나온다!
- OpenSearch Dashboard의 Visualize 메뉴 선택
- New Visualize에서
Coordinate Map
선택
- 우측의
Buckets
탭에서 Add 선택 Aggregation
에서Geohash
선택,field
에서location
선택- 촘촘한 경로를 보고싶다면,
Change precision on map zoom
해제 후Precision
수치를 높여준다 - Point 색 변경을 원한다면
Options
의Color Schema
변경
+ 상단의 Add filter
를 통해 원하는 데이터만 출력이 가능하다
결론
매핑은 최초에 한 번만 할 수 있으니 주의하자!
DevTools로 할 수 있는 일이 많으니 활용법을 잘 찾아보고 적재적소에 잘 활용하자!