Elastic Stack - ruthetum/study GitHub Wiki

Elastic Stack

  • 빅데이터 νŒŒμ΄ν”„λΌμΈμ„ κ΅¬μ„±ν•˜λŠ” ν”Œλž«νΌ
Flow

μ—˜λΌμŠ€ν‹± μŠ€νƒμ˜ ꡬ성

elastic-stack

μ—˜λΌμŠ€ν‹±μ„œμΉ˜ : λΆ„μ‚° 검색 엔진

검색 엔진 + λ°μ΄ν„°λ² μ΄μŠ€

  • 일반적인 검색 엔진(ꡬ글, 넀이버)κ³ΌλŠ” λ‹€λ₯Έ 검색 엔진

    • 일반적으둜 검색 엔진은 λ‚΄λΆ€μ μœΌλ‘œ 각 λ„νλ¨ΌνŠΈλ₯Ό μΈλ±μ‹±ν•˜κ³  λΉ λ₯΄κ²Œ κ²€μƒ‰ν•˜λŠ” 데 μ‚¬μš©ν•˜λŠ” 기술
  • μ—˜λΌμŠ€ν‹±μ„œμΉ˜λŠ” λͺ¨λ“  λ ˆμ½”λ“œλ₯Ό JSON λ„νλ¨ΌνŠΈ ν˜•νƒœλ‘œ μž…λ ₯ν•˜κ³  관리

  • 일반적인 λ°μ΄ν„°λ² μ΄μŠ€μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ, μΏΌλ¦¬ν•œ 결과에 λŒ€ν•΄ μΌμΉ˜ν•˜λŠ” 원본 λ„νλ¨ΌνŠΈλ₯Ό λ°˜ν™˜

  • μΌμ’…μ˜ NoSQL λ°μ΄ν„°λ² μ΄μŠ€λΌκ³  생각

λΉ λ₯Έ 검색 및 집계 μ„±λŠ₯

  • μ—˜λΌμŠ€ν‹±μ„œμΉ˜λŠ” ν…μŠ€νŠΈλ‚˜ λ„νλ¨ΌνŠΈμ˜ 경우 인덱싱 μ‹œμ μ— 뢄석을 거쳐 μš©μ–΄ λ‹¨μœ„λ‘œ λΆ„ν•΄λ˜κ³  μ—­μΈλ±μŠ€ 사전을 ꡬ좕

  • μˆ«μžλ‚˜ ν‚€μ›Œλ“œ νƒ€μž…μ˜ 데이터듀은 μ—˜λΌμŠ€ν‹±μ„œμΉ˜μ˜ 집계λ₯Ό μœ„ν•΄ 집계에 μ΅œμ ν™”λœ 컬럼 기반 자료ꡬ쑰λ₯Ό μ €μž₯

    • μ΄λ ‡κ²Œ μ΅œμ ν™”λœ μžλ£Œκ΅¬μ‘°λ“€μ„ λ°”νƒ•μœΌλ‘œ 병렬 μ²˜λ¦¬λ‚˜ λΆ„μ‚° 처리 κ°€λŠ₯
  • μ—˜λΌμŠ€ν‹±μ„œμΉ˜κ°€ 타 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€, NoSQL λ°μ΄ν„°λ² μ΄μŠ€λ³΄λ‹€ λΉ λ₯Έ 검색과 집계 μ„±λŠ₯을 μ‹€ν˜„ν•˜λŠ” μ΄μœ λŠ” 검색 엔진인 λ™μ‹œμ— λ°μ΄ν„°λ² μ΄μŠ€μ΄κΈ° λ•Œλ¬Έ

    • 이둠적으둜 μΆ©λΆ„ν•œ 크기의 ν΄λŸ¬μŠ€ν„°κ°€ κ΅¬μ„±λ˜μ–΄ μžˆλ‹€λ©΄ λ°μ΄ν„°μ˜ μ–‘κ³Ό λ¬΄κ΄€ν•˜κ²Œ 1초 μ΄λ‚΄μ˜ 응닡 속도λ₯Ό κΈ°λŒ€ν•  수 있음

μŠ€μ½”μ–΄λ§ : 연관도에 λ”°λ₯Έ μ •λ ¬

  • λ‹¨μˆœνžˆ ν•„λ“œκ°’μ„ κΈ°μ€€μœΌλ‘œ ν•œ 정렬은 μ–΄λ–€ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλ„ μ œκ³΅λ˜μ§€λ§Œ, μ—˜λΌμŠ€ν‹±μ„œμΉ˜λŠ” 검색어에 λŒ€ν•œ μœ μ‚¬λ„ μŠ€μ½”μ–΄λ₯Ό 기반으둜 ν•œ 정렬을 제곡

    • λ³΅μž‘ν•œ λ¬Έμžμ—΄ μ½˜ν…μΈ μ—μ„œ 검색을 μˆ˜ν–‰ν•  λ•Œ 큰 효과λ₯Ό κΈ°λŒ€ν•  수 있음
  • 이외에도 λ‹€μ–‘ν•œ μŠ€μ½”μ–΄λ§ 방법을 포함해 μ‚¬μš©μžκ°€ μ •λ ¬ 방식을 λ‹€μ–‘ν•˜κ²Œ μ •μ˜ν•  수 있음


μ•„νŒŒμΉ˜ 루씬(Apache Lucene)

  • μ—˜λΌμŠ€ν‹±μ„œμΉ˜κ°€ μ œκ³΅ν•˜λŠ” 데이터 νƒ€μž… λ³„λ‘œ μ΅œμ ν™”λœ 자료ꡬ쑰 μ§€μ›μ΄λ‚˜ μŠ€μ½”μ–΄λ§ λ“±μ˜ κΈ°λŠ₯은 λ£¨μ”¬μ—μ„œ λΉ„λ‘―λœ νŠΉμ§•
  • μ—˜λΌμŠ€ν‹±μ„œμΉ˜λŠ” μ΄λŸ¬ν•œ κΈ°λŠ₯을 λΆ„μ‚° μ‹œμŠ€ν…œμœΌλ‘œ ν™•μž₯ν•΄μ„œ μ„±λŠ₯, μœ μ—°μ„±, ν™œμš©μ„±μ„ κ°œμ„ 

ν‚€λ°”λ‚˜ : μ‹œκ°ν™”μ™€ μ—˜λΌμŠ€ν‹±μ„œμΉ˜ 관리 도ꡬ

μ—˜λΌμŠ€ν‹± μŠ€νƒμ˜ UI

  • μ—˜λΌμŠ€ν‹±μ„œμΉ˜λŠ” μ‚¬μš©μžμ˜ λͺ¨λ“  μž…λ ₯을 REST API ν˜•νƒœλ‘œ 받아듀이기 λ•Œλ¬Έμ— λ³„λ„μ˜ 도ꡬ없이 κΈ°λŠ₯을 잘 ν™œμš©ν•  수 있음

  • ν•˜μ§€λ§Œ λ³΅μž‘ν•œ μš”μ²­λ“€μ„ ν•˜λ‚˜ν•˜λ‚˜ μž‘μ„±ν•˜κΈ°μ—λŠ” λΆˆνŽΈν•¨μ΄ 있음

  • ν‚€λ°”λ‚˜λ₯Ό ν†΅ν•΄μ„œ μ—˜λΌμŠ€ν‹±μ„œμΉ˜μ— λŒ€ν•œ λŒ€λΆ€λΆ„μ˜ 관리 κΈ°λŠ₯, APIλ₯Ό μ‹€ν–‰ν•  수 μžˆλŠ” μ½˜μ†”, μ†”λ£¨μ…˜ 및 λͺ¨λ‹ˆν„°λ§ νŽ˜μ΄μ§€λ₯Ό 제곡


λ‘œκ·ΈμŠ€νƒœμ‹œ : 이벀트 μˆ˜μ§‘κ³Ό μ •μ œλ₯Ό μœ„ν•œ 도ꡬ

둜그 μˆ˜μ§‘ 및 μ •μ œ

  • λŒ€λŸ‰μ˜ 데이터λ₯Ό κ²€μƒ‰ν•˜κΈ° μœ„ν•΄ κ°€μž₯ λ¨Όμ € μ„ ν–‰λ˜μ–΄μ•Ό ν•  μž‘μ—…μ€ 데이터λ₯Ό μ μž¬ν•˜λŠ” 것

  • 데이터 μˆ˜μ§‘κ³Ό 가곡 κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” λ‘œκ·ΈμŠ€νƒœμ‹œλ₯Ό μ‚¬μš©ν•˜λ©΄ 둜그, 맀트릭, μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ“± λ‹€μ–‘ν•œ μ†ŒμŠ€λ‘œλΆ€ν„° 둜그λ₯Ό μˆ˜μ§‘ν•  수 있음

  • ν•„ν„° κΈ°λŠ₯을 μ΄μš©ν•΄ λΉ„μ •ν˜•μ΄λ‚˜ λ°˜μ •ν˜• 데이터λ₯Ό λΆ„μ„ν•˜κΈ° μ‰¬μš΄ ν˜•νƒœλ‘œ μ •μ œν•  수 있고, μ—˜λΌμŠ€ν‹±μ„œμΉ˜ 외에 λ‹€μ–‘ν•œ ν”Œλž«νΌμœΌλ‘œ μ •μ œλœ 데이터λ₯Ό 내보낼 수 있음

μ•ˆμ •μ„±

  • λ‘œκ·ΈμŠ€νƒœμ‹œλŠ” μ—˜λΌμŠ€ν‹±μ„œμΉ˜μ˜ 인덱싱 κΈ°λŠ₯을 μ΅œμ ν™”ν•˜κΈ° μœ„ν•œ 배치 μ²˜λ¦¬μ™€ 병철 μ²˜λ¦¬κ°€ κ°€λŠ₯ν•˜λ©° μ˜μ†μ μΈ 큐λ₯Ό μ‚¬μš©

  • 이λ₯Ό 톡해 ν˜„μž¬ 처리 쀑인 이벀트의 졜초 1회 전솑을 보μž₯ν•˜κ³  데이터 양이 κΈ‰μ¦ν•˜λŠ” λΆ€ν•˜ μƒν™©μ—μ„œλ„ μ•ˆμ •μ„±μ„ 보μž₯

  • λ‘œκ·ΈμŠ€νƒœμ‹œκ°€ μ•„λ‹Œ μ»€μŠ€ν…€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μž‘μ„±ν•˜μ—¬ μ†ŒμŠ€ 데이터λ₯Ό μˆ˜μ§‘ν•˜λŠ” 방법도 쑴재

    • ν•˜μ§€λ§Œ μ»€μŠ€ν…€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ κ΅¬ν˜„ν•  경우 신경써야 ν•  뢀뢄이 많고, 문제 λ°œμƒ μ‹œ λ””λ²„κΉ…μ΄λ‚˜ νŠœλ‹μ΄ 쉽지 μ•ŠμŒ

λΉ„μΈ  : μ—£μ§€λ‹¨μ—μ„œ λ™μž‘ν•˜λŠ” κ²½λŸ‰ μˆ˜μ§‘ 도ꡬ

κ²½λŸ‰ μˆ˜μ§‘κΈ°

  • λ‘œκ·ΈμŠ€νƒœμ‹œμ˜ κΈ°λŠ₯은 μΆ©λΆ„νžˆ κ°•λ ₯ν•˜μ§€λ§Œ 이벀트 정보λ₯Ό μˆ˜μ§‘ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ‹€μ œ μ„œλΉ„μŠ€κ°€ λ™μž‘ν•˜λŠ” ν˜ΈμŠ€νŠΈμ— μˆ˜μ§‘κΈ°λ₯Ό μ„€μΉ˜ν•΄μ•Ό ν•˜λŠ” κ²½μš°κ°€ 많음

    • 이 경우 λ‘œκ·ΈμŠ€νƒœμ‹œλŠ” λ‹€μ–‘ν•œ 필터와 섀정을 μ§€μ›ν•˜κΈ° 만큼 무겁기 λ•Œλ¬Έμ— ν™œμš©λ„κ°€ 떨어짐
  • μ—˜λΌμŠ€ν‹± μŠ€νƒμ—λŠ” 이λ₯Ό μœ„ν•΄ νŒŒμΌλΉ„νŠΈ, λ©”νŠΈλ¦­λΉ„νŠΈ λ“±μ˜ 비츠라고 λΆ€λ₯΄λŠ” κ²½λŸ‰ μˆ˜μ§‘κΈ°κ°€ 포함


μ—˜λΌμŠ€ν‹± μŠ€νƒμ˜ μš©λ„

  1. μ „λ¬Έ 검색 엔진
  2. 둜그 톡합 뢄석
  3. λ³΄μ•ˆ 이벀트 뢄석
  4. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„±λŠ₯ 뢄석

1. μ „λ¬Έ 검색 엔진

μ „λ¬Έ : λ‹¨μˆœν•œ λ¬Έμž₯λΆ€ν„° λ‰΄μŠ€ κΈ°μ‚¬λ‚˜ λ…Όλ¬Έ λ“± λ‹€μ–‘ν•œ κΈ€μ˜ 전체 λ‚΄μš©

  • λŒ€μƒ λ„νλ¨ΌνŠΈκ°€ λ§Žμ§€ μ•Šλ‹€λ©΄ 일반적인 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ˜ LIKE μ§ˆμ˜λ§ŒμœΌλ‘œλ„ μΆ©λΆ„νžˆ 검색이 κ°€λŠ₯ν•˜μ§€λ§Œ λ„νλ¨ΌνŠΈ μˆ˜κ°€ 쑰금만 λŠ˜μ–΄λ‚˜λ„ 인덱슀의 도움이 없이 λΉ λ₯Έ 검색은 λΆˆκ°€λŠ₯에 κ°€κΉŒμ›€

  • 전문을 λΉ λ₯΄κ³  μ •ν™•ν•˜κ²Œ κ²€μƒ‰ν•˜κΈ° μœ„ν•΄ 전문을 μš©μ–΄(term) λ‹¨μœ„λ‘œ 뢄석해 인덱싱해두고 이λ₯Ό 기반으둜 검색을 μˆ˜ν–‰ν•˜λŠ” 역인덱싱 기법이 많이 ν™œμš©

  • μ „λ¬Έ 검색은 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ™€ μ»€μŠ€ν…€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ΄μš©ν•˜μ—¬ 직접 κ°œλ°œν•  수 μžˆμ§€λ§Œ 완성도와 정확도가 떨어지고 좔가적인 κ³΅μˆ˜κ°€ ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ— λΉ„μΆ”

2. 둜그 톡합 뢄석

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λ°œμƒν•˜λŠ” 둜그의 양이 λ§Žμ§€ μ•Šλ‹€λ©΄ 일반적인 ν…μŠ€νŠΈ μ—λ””ν„°λ‚˜ κ°„λ‹¨ν•œ μ‰˜ μŠ€ν¬λ¦½νŠΈλ§ŒμœΌλ‘œλ„ λ°œμƒλ˜λŠ” 둜그λ₯Ό μΆ©λΆ„νžˆ νŒŒμ•…ν•  수 있음

  • ν•˜μ§€λ§Œ λ§Žμ€ λ‘œκ·Έκ°€ λ°œμƒλ˜λŠ” 경우 둜그의 λ°œμƒ μœ„μΉ˜λ₯Ό λͺ¨λ‘ νŒŒμ•…ν•΄μ•Ό ν•˜κ³ , λ°œμƒ μˆœμ„œλ₯Ό μΆ”μ ν•˜λŠ” 것도 어렀움이 있음

  • μ—˜λΌμŠ€ν‹± μŠ€νƒμ—μ„œλŠ” λΉ„μΈ λ₯Ό μ‚¬μš©ν•˜μ—¬ 적은 λ¦¬μ†ŒμŠ€λ‘œ 각 μž₯λΉ„μ˜ 둜그λ₯Ό λΉ λ₯΄κ²Œ μˆ˜μ§‘ν•  수 있고, λ‘œκ·ΈμŠ€νƒœμ‹œλ₯Ό ν™œμš©ν•˜μ—¬ ν•„ν„°λ₯Ό 톡해 μΌμ›ν™”λœ ν˜•νƒœλ‘œ κ°€κ³΅ν•˜κ³ , μ—˜λΌμŠ€ν‹±μ„œμΉ˜μ˜ 인덱싱 κΈ°λŠ₯κ³Ό ν…μŠ€νŠΈ 검색 κΈ°λŠ₯을 톡해 흩어진 μ„œλΉ„μŠ€ 둜그λ₯Ό ν†΅ν•©ν•΄μ„œ 뢄석할 수 있고, ν‚€λ°”λ‚˜λ₯Ό 톡해 μ§κ΄€μ μœΌλ‘œ λͺ¨λ‹ˆν„°λ§ν•  수 있음

3. λ³΄μ•ˆ 이벀트 뢄석

  • SIEM(Security Information and Event Management)λ‚˜ ESM(Enterprise Security Management) λ“±μœΌλ‘œ λΆˆλ¦¬λŠ” μ†”λ£¨μ…˜μ€ 쑰직 내에 μ†ν•œ λ‹€μ–‘ν•œ μž₯λΉ„λ“€λ‘œλΆ€ν„° λ³΄μ•ˆ 이벀트λ₯Ό μˆ˜μ§‘ν•˜κ³  뢄석할 수 있게 ν•˜λ €λŠ” λͺ©μ μœΌλ‘œ μ œμž‘

  • 곡격자의 곡격 λ°©μ‹μ˜ 닀변화에 따라 λ³΄μ•ˆ μ΄λ²€νŠΈλ“€μ€ μ‹€μ‹œκ°„μœΌλ‘œ μˆ˜μ§‘λ¨κ³Ό λ™μ‹œμ— μ‹€μ‹œκ°„ 검색과 필터링을 ν†΅ν•œ μ—°κ΄€ 뢄석과 λ¨Έμ‹ λŸ¬λ‹μ„ μ΄μš©ν•œ 이상 징후 νƒμ§€κΉŒμ§€ μ—°κ²°λ˜μ–΄μ•Ό 함

  • ν‚€λ°”λ‚˜μ—μ„œ μ œκ³΅ν•˜λŠ” μ—˜λΌμŠ€ν‹± SIEM(이벀트 뢄석)은 λΉ„μΈ  λͺ¨λ“ˆμ„ 톡해 μ• ν”Œλ¦¬μΌ€μ΄μ…˜, μ—”λ“œν¬μΈνŠΈ, μΈν”„λΌμŠ€νŠΈλŸ­μ³, ν΄λΌμš°λ“œ, λ„€νŠΈμ›Œν¬ λ“±μ˜ λ‹€μ–‘ν•œ μ†ŒμŠ€μ—μ„œ μˆ˜μ§‘ν•œ 이벀트λ₯Ό 기반으둜 μ—”λ“œν¬μΈνŠΈ ν™œλ™, 인증 둜그, DNS νŠΈλž˜ν”½, λ„€νŠΈμ›Œν¬ ν”Œλ‘œμš°μ—μ„œ 이상 징후, λΆˆλ²•μ μΈ 둜그인 μ‹œλ„, μ‚¬μš©μž μ ‘κ·Ό νŒ¨ν„΄ λ“±μ˜ 문제λ₯Ό λΉ λ₯΄κ²Œ μ°Ύμ•„λ‚Ό 수 있음

4. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„±λŠ₯ 뢄석

  • μ—˜λΌμŠ€ν‹± μŠ€νƒμ€ APM(Application Performance Monitoring) κΈ°λŠ₯을 μ œκ³΅ν•˜κΈ° λ•Œλ¬Έμ— μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœλ₯Ό μ§€μ†μ μœΌλ‘œ λͺ¨λ‹ˆν„°λ§ν•  수 있음

μ—˜λΌμŠ€ν‹± μŠ€νƒμ˜ 연동

카프카와 연동

with-kafka-1

with-kafka-2

ν•˜λ‘‘ μƒνƒœκ³„μ™€ 연동

with-hadoop-ecosystem

κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ™€ 연동

with-db

  • λ‘œκ·ΈμŠ€νƒœμ‹œλ₯Ό ν™œμš©ν•˜μ—¬ 연동 κ°€λŠ₯

with-others

μœ μ‚¬ μ œν’ˆ

ꡬ성 λͺ©μ  비ꡐꡰ
μ—˜λΌμŠ€ν‹±μ„œμΉ˜ λ°μ΄ν„°λ² μ΄μŠ€ RDBMS(MySQL, PostgreSQL, ...), NoSQL(MongoDB, ...)
μ—˜λΌμŠ€ν‹±μ„œμΉ˜ 검색 엔진 솔라(Slor)
λ‘œκ·ΈμŠ€νƒœμ‹œ/λΉ„μΈ  데이터 μˆ˜μ§‘ ν”Œλ£¨μ–ΈνŠΈλ””(Fluentd)
ν‚€λ°”λ‚˜ μ‹œκ°ν™” κ·ΈλΌνŒŒλ‚˜(Grafana), νƒœλΈ”λ‘œ(Tableau)
μ—˜λΌμŠ€ν‹± μŠ€νƒ 전체 μŠ€ν”Œλ ν¬(Splunk)

μ°Έκ³ 

⚠️ **GitHub.com Fallback** ⚠️