허원철의 개발 블로그

ELK Stack 개념 정리 본문

server

ELK Stack 개념 정리

허원철 2017. 2. 23. 18:00

이번 글은 ELK Stack에 대해 간단한 개념을 소개하고자 하는 글 입니다.



로그의 중요성


- 데이터의 처리를 디비를 통해 알 수 도 있지만, 조금 더 명확하고 세세한 상황을 보기 위해서는 로그 분석이 필수적입니다.


로그처리를 하다보면 대규모 서비스 경우에는 하루에 수십기가가 넘는 로그가 쌓이는 경우도 있습니다. (물론 직접 경험해보진 못했습니다.) 이런 서비스 같은 경우는 당연히 로드밸런싱을 하게 되고.. 서버도 각각 나뉘어 있으면 로그를 하나하나 다 열어봐야하는 상황이 닥치게 됩니다. 그래서 로그를 한 곳으로 집중시키고 분석하고 적당한 쿼리를 만들어 원하는 데이터를 도출 해낼 수 있는 로그 관리 솔루션이 있는데, 요즘 추세로는 ELK Stack을 사용합니다. (Splunk 라는 것도 있지만 유료라고 하니 넘어가도록 합니다.)





ELK 이란 ?


- 모든 유형의 구조화 및 비정형 데이터에서 실시간으로 실행 가능한 통찰력을 제공하는 End to End Stack을 만들었습니다. 데이터를 검색하고 분석하는데 용이합니다.


E ( Elastic Search )

: 분산형 RESTful 검색 및 분석 엔진 입니다. 데이터를 중심부에 저장하여 예상되는 항목을 검색하고 예상치 못한 항목을 밝혀낼 수 있습니다.


1) 정형, 비정형, 위치정보, 메트릭 등 원하는 방법으로 다양한 유형의 검색을 수행하고 결합할 수 있습니다.

2) 표준 RESTful APIJSON을 사용합니다.


L ( Logstash )

: 오픈소스 서버측 데이터 처리 파이프라인으로, 다양한 소스에서 동시에 데이터를 수집하고 변환하여 자주 사용하는 Stash 보관소로 보냅니다.


K ( Kibana )

: 데이터를 시각적으로 탐색하고 실시간으로 분석 할 수 있습니다.



ELK Stack 이란?


- ELK 솔루션에서 Beats 추가되면서 ELK Stack 이라고 불립니다.


Beats

: 서버에 에이전트로 설치하여 다양한 유형의 데이터를 Elastic Search 또는 Logstash에 전송하는 오픈 소스 데이터 발송자입니다. 



Elastic Search - 개념정리


1) Near Realtime

- 거의 실시간 검색 플랫폼이라는 특징을 가지고 있습니다.


2) Cluster

- 전체 데이터를 함계 보유하고 모든 노드에서 연합 인덱싱 및 검색 기능을 제공하는 하나 이상의 노드모음입니다.

- 기본적으로 'elasticsearch' 라는 고유한 이름으로 식별합니다.


3) Node

- 클러스터의 일부이며 데이터를 저장하고 클러스터의 인덱싱 및 검색 기능에 참여하는 단일 서버입니다.

- 노드에 할당되는 임의 UUID인 이름으로 식별합니다.

- 특정 클러스터를 클러스터 이름으로 결합하도록 노드를 구성 할 수 있습니다.


4) Index

- 다소 유사한 특성을 갖는 문서들의 집합입니다.

- 단일 클러스터에서 원하는만큼의 인덱스를 정의 할 수 있습니다.


5) Type

- Index 내에서 하나 이상의 Type을 정의 할 수 있습니다.


6) Document

- Index를 생성 할 수 있는 기본 정보 단위입니다.

- JSON으로 표현합니다.


7) Shards

- Index는 잠재적으로 단일 노드의 하드웨어 제한을 초과 할 수 있는 많은 양의 데이터를 저장 할 수 있습니다. 하지만 단일 노드의 디스크가 맞지 않거나 단일 노드의 검색 요청만 처리하기에는 너무 느릴 수 있기 때문에 shards를 이용하여 Index를 여러 조각으로 나눌 수 있습니다

- 수평적으로 콘텐츠 볼륨을 split/scale 가능합니다.

- 여러 노드에서 잠재적으로 분산을 통해 작업을 분산 및 병렬 처리를 할 수 있으므로 성능/처리량이 향상됩니다.


8) Replication

- 장애가 발생할 경우 고가용성을 제공합니다. 그렇기 때문에 복제본 샤드는 복사된 원본/기본 샤드와 동일한 노드에 할당되지 않습니다.

- 모든 복제본에서 검색을 병렬로 실행할 수 있기 때문에 검색 볼륨/처리량을 수평 확장 할 수 있습니다.

- 기본적으로 각 인덱스는 4개의 기본 샤드와 1개의 복제본이 할당됩니다.



Logstash - 개념정리


1) input

- 입력을 사용하여 Logstash에 데이터를 가져옵니다.

- file, syslog(RFC3164 형식), beats(Filebeat)


2) filter

- Logstash 파이프 라인의 중간 처리 장치입니다.


① grok : 구문 분석 및 임의의 텍스트로 구성합니다.

② mutate : 이벤트 필드에서 일반적인 변환을 수행합니다.

③ drop : 이벤트를 삭제합니다.

④ clone : 이벤트의 복사본을 만듭니다.

⑤ geoip : ip 주소의 지리적 위치에 대한 정보를 추가합니다.


3) output

- Logstash 파이프 라인의 최종 단계입니다.


① elasticsearch : 이벤트 데이터를 elasticsearch에 보냅니다.

② file : 디스크 파일에 씁니다.

③ graphite : graphite에 전송합니다. (graphite : 메트릭을 저장하고 그래프로 작성하는데 사용되는 오픈 소스 도구)

④ statsd : 카운터 및 타이머와 같은 통계르 수신하고 UDP를 통해 전송되며, 하나 이상의 플러그 가능한 백엔드 서비스에 집계를 보내는 서비스입니다.


4) codec

- 입력 또는 출력의 일부로 작동 할 수 있는 스트림 필터입니다.

- 인기 코덱에는 json, msgpack, plain이 있습니다.


① json : JSON 형식의 데이터를 인코딩하거나 디코딩합니다.

② multiline : 자바 예외 및 스택 추척 메시지와 같은 여러 줄 텍스트 이벤트를 단일 이벤트로 병합합니다.



Beats - 개념정리


1) FileBeat

- 서버에서 로그파일을 제공합니다.


2) PacketBeat

- 응용 프로그램 서버간에 교환되는 트랜잭션에 대한 정보를 제공하는 네트워크 패킷 분석기 입니다.


3) MetricBeat

- 운영 체제 및 서비스에서 Metrics를 주기적으로 수집하는 서버 모니터링 에이전트입니다.


4) WinlogBeat

- Windows 이벤트 로그를 제공합니다.



ELK Stack의 확장 : X-Pack


- 기존 ELK Stack에서 x-pack을 이용하여 구축 및 유지를 편리하게 해줄 솔루션입니다. (하지만 유료입니다...ㅠ)


1) 특징


① Security : 데이터 보호

② Alerting : 데이터 변경 사항에 대한 알림을 제공합니다.

③ Monitoring : ELK Stack 상태를 지속적으로 체크합니다.

④ Reporting : 주기적으로 보고서를 생성하여 이메일로 전송합니다.

⑤ Graph : 데이터에서 의미 있는 관계를 살필 수 있습니다.



'server' 카테고리의 다른 글

CI - 젠킨스 시작하기  (412) 2017.06.27
Docker - 시작하기  (401) 2017.05.11
Apache - version 2.4 설치하기  (404) 2017.02.23
OpenSSL로 https 사용해 보기  (420) 2017.02.06
Apache - httpd.conf 설정 하기  (438) 2017.02.01
Comments