2023.01.05
Elasticsearch는 데이터를 수집, 검색(쿼리) 및 분석할 수 있는 데이터 플랫폼(초고속 DBMS)
- 대용량 데이터(테라~페타급)도 실시간 수집/분석이 가능
- 세상의 모든 데이터 형태 저장
- 데이터를 유기적으로 조합하고 분석
- 보안분석, 마케팅/비즈니스, 검색으로 활용
- 속도, 확장성, 유연성, 복원력 특장점
- 다양한 기능(Monitoring, Metrics, Security, APM, Search)
- Elastic을 가지고 시계열 데이터에 많이 적용
- APM 상관분석 : 에러의 원인을 자동으로 식별하는 혁신적인 기능
- User Activity Monitoring : 접속한 User 식별, Heavy 유저 식별, 접속 위치 추적
- Elastic XDR(Endpoint Security) : 랜섬웨어 보안,, 등
- 적용 사례)
- 압축기데이터를 Elastic에 Indexing하여, Kibana를 활용하여 대시보드 구현
- RIST 검색 엔진
- 대검찰청 디지털 포렌식 센터
- 데이터 수집 방식 : 사건 발생시 자체 애플리케이션에서 ES 클러스터로 API를 통해 데이터 수집
<키바나>
- Dataview 혹은 Discover에서 확인 가능
- 새로운 field를 생성했으면 잘생성되었는지 확인하기 위해 Discover에서 확인
- Stack Management - Kibana - Saved Objects에서 쿼리한거 저장했으면 이거 확인 가능
- 즉 Discover : 업로듷한 데이터에 대한 필드와 도큐먼트를 탐색하고 파악 가능
- Dashboard - Create Visualization해서 다양한 그래프들(시각화들) 생성 가능
- Dashboard에서 Controls - Add controls 하면 Dashboard에서 필터링 적용하여 미리 visualization 만들어둔 것에 모두 적용 가능(시각화한 그래프들 변화되는 것 확인 가능)
- number of values는 top 몇개를 볼 것인지 설정, advanced option에서 other은 treemap에 적용시키지 않는 것도 존재!
- 어떤 변수에 대해서 treemap을 만들고 싶으면 해당 변수를 그래프창에 끌어다두면 됨
- 요일 같은 경우 mon, tue를 월,화로 만들고 싶으면 vertical axis - filters에서 day_of_week:"Mon" 하고 아래칸에 월 이런 식으로!
- 그리고 timestamp별로 하차 총승객수를 보고 싶으면 하차승객수 변수와 timestamp를 그래프쪽으로 끌어두면 됨
<Tag Cloud>
- Dashboard에서 Select type - Aggregation based - Tag cloud 들어가서 dataview로 표시되어있는 것 클릭
- 키워드 타입을 띄우고 싶으면 buckets - tags - aggregation(tags) --> 여기서 설정한 변수로 tag cloud에 변수가 등장
- 역명 키워드를 띄우는데 그 크기 기준을 총 승차승객수로 두고 싶으면 Metrics에는 승차총승객수를, Buckets에는 Tags를 선택하여 Field 부분에 역명.keyword를 선택하고 order by를 Metric: Sum of 승차총승객수로 설정
- Add layer - visualization을 통해 기준선을 넣는 등의 다른 작업을 더할 수 있음
- Aggregation based - Data table 에서 제일 큰 분류부터 하나씩 넣어줌 (즉 data table은 group by 느낌처럼 해당 데이터를 만들어줌) --> Split rows를 선택! , sub aggresgation은 terms를 선택해야
제일 큰 분류부터 차례로 bucket에 add하면 group by 순이 이런식으로 됨
- select type - TSVB - Markdown 사용 가능
<이미지 가져오기>
-  -> 여기서 ()는 유효한 괄호
<바로가기 주소 지정>
- [바로가기](해당 데이터광장 주소) -> 여기서 ()는 유효한 괄호
그리고 수치같은 것을 넣고 싶으면 Data에서 설정하면 됨 그리고 markdown 탭에서 클릭
<2일차>
- maps에서 위도, 경도 필드 따로 있을 때는 maps 기능 불가하므로 위도, 경도를 location이라는 하나의 변수로 합치기로함!
-> Kibana Dev Tools로 geo_point 필드 추가해야 maps 기능에서 Data view does not contain any geospatial fields 라는 오류가 안남 --> 이런 변수 작업은 원래 파이썬으로 한 후 csv만 Kibana에서 불러와서 시각화를 하긴 함
--> console에서 작업!
GET subway_location/_search
// Kibana Dev Tools로 "geo_point" 설정하기
// step1
// location이라는 변수를 geo_point로 설정하고 mapping 시킨 것
POST subway_location/_mapping
{
"properties":{
"location":{
"type":"geo_point"
}
}
}
// step2
// location에 대한 데이터 매칭
POST subway_location/_update_by_query
{
"query":{
"match_all":{}
},
"script": {
"source": "ctx._source['location'] = ctx._source['위도'] + ',' + ctx._source['경도']",
"lang": "painless"
}
}
- Maps에서 Tooltip fields는 지도에서 field를 표현하고 싶은 것 선택(지도에서 클릭했을 때 정보가 함께 나오게됨)
- 호선을 색깔별로 구분 --> Layer style - Icon - Fixed (선택), Fill color - By value
또는 symbol style - Marker -
- Term joins는 다른 데이터 join해서 해당 데이터 말고도 다른데이터에서 그 조건에 맞는 데이터들을 가져올 수 있음(말그대로 join 기능)
<Kibana Canvass>
- 프레젠테이션과 비슷
<Graph>
인덱스의 서로 다른 용어가 어떻게 연결되어 있는지 확인 가능
- 필드간의 관련이 있는 것들 탐색 가능. 말그대로 그래프로 확인 가능
<뱅크샐러드 데이터 이용하기>
- 키워드-텍스트로 mapping 하는 방법 (이렇게 하면 ex. 결제수단, 결제수단.keyword 이렇게 생성됨)
{"type":"text",
"fields":{
"keyword":{
"type":"keyword"
}
}
}
- 날짜, 시간이라는 변수를 timestamp로 합치는건 Dev tools 이용!
# Click the Variables button, above, to create your own variables.
GET banksalad_20230106/_search
// Kibana Dev Tools로 필드(날짜, 시간) 추가하기
// step1
POST banksalad_20230106/_mapping
{
"properties":{
"time":{
"type":"date",
"format":"yyyy-MM-dd HH:mm"
}
}
}
// step2
// 추가한 필드에 기존 날짜 & 시간 필드를 결합하여 데이터 삽입
POST banksalad_20230106/_update_by_query
{
"query":{
"match_all":{}
},
"script": {
"source": "ctx._source['time'] = ctx._source['날짜'] + ' ' + ctx._source['시간']",
"lang": "painless"
}
}
GET banksalad_20230106/_searchGE
- Stack Mangement - Dataviews에서 time이라는 변수 생성되었는지 확인!
- day_of_week라는 script field 설정 방법 : Stack Management - Data views - Create script field 에서 script에 아래 내용 기입
LocalDateTime.ofInstant(Instant.ofEpochMilli(doc['time'].value.millis),ZoneId.of('UTC')).getDayOfWeek().getDisplayName(TextStyle.SHORT,Locale.getDefault())
- Dashboard - Lens에서 위의 day_of_week라는 script field 생성된 것을 확인 가능
- Visualization에서 월, 수,금의 데이터만 가져오려면 Horizontal axis를 Filters로 해서 Mon을 월, Wed를 수, Fri를 금처럼 조건 기입
<Vega chart (외부에 있는 것을 활용해서 Kibana에 활용)>
- Visualize - Custom visualization
- Discover를 통해 데이터 확인 가능!
- Yahoo의 coin(crypto) 데이터(2016~현재)를 사용!
- google 에서 vega graph - examples 에 나온 코드를 복사해서 다시 kibana의 visualize library - customize 에 업데이트
- index는 해당 데이터 이름을 적으면 되고, aggregation 부분은 기존에 visualize library의 그래프들의 inspect - request를 통해서 코드를 복사해 수정해서 사용
- 썸트렌드(Sometrend) : 시각화에 도움되는 사이트
| 데이터 엔지니어링 (0) | 2023.01.09 |
|---|---|
| Deep Learning on AWS (0) | 2023.01.04 |
| Building Data Analytics Solutions Using Amazon Redshift (0) | 2023.01.03 |
| Building Data Lakes on AWS (0) | 2023.01.02 |