상세 컨텐츠

본문 제목

데이터 전문가 - elastic

AWS

by Noong_yoon 2023. 1. 5. 09:37

본문

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) : 시각화에 도움되는 사이트

 

'AWS' 카테고리의 다른 글

데이터 엔지니어링  (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

관련글 더보기