본문 바로가기
대학원 공부/computer science

Open Source : Logstash & Elasticsearch & Kibana

by 월곡동로봇팔 2019. 12. 13.

전체적인 흐름도


 

Elasticsearch : inverted index를 활용, text 검색 유용

유명해진 이유는, 현재 우리는 cloud computing이 발전함에 따라 한정된 자원을 활용이 가능하다.

이 말은, 서로 정보를 공유하고, 자원을 공유하면서 그런 움직임들에 대해서 알기를 원했고,

이에 대한 해결책이 log 분석이었다.

 

log는 어떤 event가 발생하였을 때, 사용자의 정보, 경로, ip, 위치 등등 생성되는 파일이다.


Where?

  • 애플리케이션 검색
  • 웹사이트 검색
  • 엔터프라이즈 검색
  • 로깅과 로그 분석
  • 인프라 메트릭과 컨테이너 모니터링
  • 애플리케이션 성능 모니터링
  • 위치 기반 정보 데이터 분석 및 시각화
  • 보안 분석
  • 비즈니스 분석

indexing에 유용, 위와 같은 분야에 적용이 가능하다. 

 

How it works?

로그, 시스템 메트릭, 웹 애플리케이션 등 다양한 소스로부터 원시 데이터가 Elasticsearch로 흘러들어갑니다.
데이터 수집은 원시 데이터가 Elasticsearch에서 색인되기 전에 구문 분석, 정규화, 강화되는 프로세스입니다. Elasticsearch에서 일단 색인되면, 사용자는 이 데이터에 대해 복잡한 쿼리를 실행하고 집계를 사용해 데이터의 복잡한 요약을 검색할 수 있습니다. Kibana에서 사용자는 데이터를 강력하게 시각화하고, 대시보드를 공유하며, Elastic Stack을 관리할 수 있습니다.

과정

  1. client가 data를 입력하면, elasticsearch가 구문 분석, 정규화를 진행한다.
  2. Elasticsearch 가 inverted indexing을 진행
  3. query를 진행하면 집계를 사용해 데이터의 복잡한 요약을 검색

Inverted Index?

Elasticsearch 인덱스는 서로 관련되어 있는 문서들의 모음입니다. Elasticsearch는 JSON 문서로 데이터를 저장합니다. 각 문서는 일련의 키(필드나 속성의 이름)와 그에 해당하는 값(문자열, 숫자, 부울, 날짜, 값의 배열, 지리적 위치 또는 기타 데이터 유형)을 서로 연결합니다.

Elasticsearch는 반전된 인덱스라고 하는 데이터 구조를 사용하는데, 이것은 아주 빠른 전체 텍스트 검색을 할 수 있도록 설계된 것입니다. 반전된 인덱스는 문서에 나타나는 모든 고유한 단어의 목록을 만들고, 각 단어가 발생하는 모든 문서를 식별합니다.

색인 프로세스 중에, Elasticsearch는 문서를 저장하고 반전된 인덱스를 구축하여 거의 실시간으로 문서를 검색 가능한 데이터로 만듭니다. 인덱스 API를 사용해 색인이 시작되며, 이를 통해 사용자는 특정한 인덱스에서 JSON 문서를 추가하거나 업데이트할 수 있습니다.

Elasticsearch를 써보면 알겠지만, ba*. shakes* asterika 로 서로 관련되어있는 문서들을 모을 수 있다.

또한 Elasticsearch는 JSON문서로 데이터를 저장한다.

여기서 각 문서는 일련의 key,value를 서로 연결한다.

 

이 때 Elasticsearch는 inverted index를 사용하는데 이는 텍스트 검색에 매우 용이하다.

 

index는 보통 document 안에 어떤 value들이 있는지 파악하지만,

inverted는 서로 연관지은 문서들을 통합적으로 확인, 단어들을 추출하여 (여기서 stopword로 없앨수도 있다.) key로 부여, value를 어떤 문서가 해당되는지 넣는다.

 

Why we use Elasticsearch?

Elasticsearch는 빠릅니다. Elasticsearch는 Lucene을 기반으로 구축되기 때문에, 전체 텍스트 검색에 뛰어납니다. Elasticsearch는 또한 거의 실시간 검색 플랫폼입니다. 이것은 문서가 색인될 때부터 검색 가능해질 때까지의 대기 시간이 아주 짧다는 뜻입니다. 이 대기 시간은 보통 1초입니다. 결과적으로, Elasticsearch는 보안 분석, 인프라 모니터링 같은 시간이 중요한 사용 사례에 이상적입니다.

Elasticsearch는 본질상 분산적입니다. Elasticsearch에 저장된 문서는 샤드라고 하는 여러 다른 컨테이너에 걸쳐 분산되며, 이 샤드는 복제되어 하드웨어 장애 시에 중복되는 데이터 사본을 제공합니다. Elasticsearch의 분산적인 특징은 수백 개(심지어 수천 개)의 서버까지 확장하고 페타바이트의 데이터를 처리할 수 있게 해줍니다.

Elasticsearch는 광범위한 기능 세트와 함께 제공됩니다. 속도, 확장성, 복원력뿐 아니라, Elasticsearch에는 데이터 롤업, 인덱스 수명 주기 관리 등과 같이 데이터를 훨씬 더 효율적으로 저장하고 검색할 수 있게 해주는 강력한 기본 기능이 다수 탑재되어 있습니다.

Elastic Stack은 데이터 수집, 시각화, 보고를 간소화합니다. Beats와 Logstash의 통합은 Elasticsearch로 색인하기 전에 데이터를 훨씬 더 쉽게 처리할 수 있게 해줍니다. Kibana는 Elasticsearch 데이터의 실시간 시각화를 제공하며, UI를 통해 애플리케이션 성능 모니터링(APM), 로그, 인프라 메트릭 데이터에 신속하게 접근할 수 있습니다.

1. 빠릅니다. -> text 검색에 용이

2. 분산처리 방식 ->  대용량 데이터 처리

3. 광범위한 기능

4. 데이터 수집, 시각화, 간소화

 

이건 위에거 읽어보는 것이 좋당.

 

 

RDBMS vs Elasticsearch

compare

 

Logstash


What is Logstash?

수업에서는 logstash는 다루지 않고, 바로 logstash에서 데이터를 받아 사용하였다.

 

Logstash는 input, filter, output 의 파이프라인 구조로 되어있다는 점이다. 우선 각 서비스 장비들에는 처리한 요청의 요구자(소스)와 처리 결과를 로그 파일로 기록한다. 따라서 정제된 data로 만들어서 elasticsearch에 제공하는 역할을 한다.

 

그 전에 연동 가능한 소프트웨어들을 적어본다.

 

  • filebeat – 로그 파일을 읽어들여서 이를 수집 시스템에 전달한다.  수집 시스템은 logstash 혹은 elastic search 혹은 bigdata 처리용 hive 등등을 지정할 수 있다. ex) Redis
  • logstash – 수집된 로그를 regular expression을 통해 특정 필드를 추출하거나 거르는 역할을 수행한다.  정제된 값들은 elastic search를 통해 전송하거나 hive 등으로 전송할 수 있다.
  • elastic search – 수집된 데이터를 다양한 검색 조건으로 빠르게 조회할 수 있는 기능을 제공한다.
  • watcher – elastic search에 존재하는 데이터 패턴을 조회하여 지정된 조건에 도달했을 때 이를 지정된 방식으로 알린다.  알림 방식은 email 혹은 http post 등을 사용할 수 있다.

 

 

Kibana


Kibana는 Elasticsearch를 위한 시각화 및 관리 도구로서, 실시간 히스토그램, 선 그래프, 파이 차트, 지도 등을 제공합니다. Kibana에는 사용자가 자신의 데이터를 기반으로 사용자 정의한 동적 인포그래픽을 만들 수 있는 Canvas, 위치 기반 정보 데이터를 시각화하기 위한 Elastic Maps 같은 고급 애플리케이션도 포함됩니다.

Kibana는 logstash에서 데이터를 정제, elasticsearch에서 inverted index를 통해 자료구조를 구축한 후,

Kibana는 elasticsearch에서 나온 data를 시각화 시켜주는 tool이다.

 

 

Conclusion

conclusion

결론은 logstash, Elasticsearch, Kibana 세가지를 모두 사용하면 좋다.

 

1. Nginx의 로그를 수집하기 위해 Logstash가 동작한다.

2. 다량의 로그가 빠르게 쌓일 경우를 대비하여, Redis 를 중간데이터 수집 queue로 사용한다.

3. Redis에 쌓인 로그들을 Logstash에서 inverted indexing을 통해 ElasticSearch에 적재한다. 

 

-------------------------------------------------------------------------------------------------------

 

만약 내가 log 파일 말고 다른 파일을 분석하고 싶다하면, 그냥 json 파일을 만들어서 저장하고 올리면 된다.

ElasticSearch는 indexing 된 log들을 저장하는 Database라고 생각하자.

 

4. 그 후 Elasticsearch에서 query를 보내 Kibana에서 시각화한다.

 

다음 posting은 실제로 우리가 data를 어떻게 입력하는지 적을 예정이다.

 

https://www.elastic.co/kr/what-is/elasticsearch

 

What is Elasticsearch | Elastic

Elasticsearch는 텍스트, 숫자, 위치 기반 정보, 정형 및 비정형 데이터 등 모든 유형의 데이터를 위한 분산형 오픈 소스 검색 및 분석 엔진입니다. Elasticsearch는 Apache Lucene을 기반으로 구축되며, (현재 Elastic이라고 알려져 있는) Elasticsearch N.V.가 2010년에 최초로 출시했습니다. 간단한 REST API, 분산형 특징, 속도, 확장성으로 유명한 Elasticsearch는 데이터 수집, 보강, 저

www.elastic.co

 

댓글