여기에서 말하는 내용은 splunk를 사용하기 위해서 가장 처음 알아야 하는 것들이다.
대부분의 IT를 하는 사람들은 데이터를 저장하는 시스템으로 가장먼저 데이터베이스를 떠올린다.
IT 부서가 아니라도 오라클, MS-SQL 등의 이름을 한 번쯤은 들어봤을 것이다. 데이터베이스의 가장 큰 목적은 프로그램이 사용할 데이터를 체계적으로 관리하기 위한 프로그램이다.
데이터를 관리한다는 것은 무엇인가? 우리는 항상 데이터베이스와 살고있는게 현실이다. 인지하지 못하는 것일 뿐이지. 손안에 있는 스마트 폰을 보자. 전화번호를 저장하는 주소록이 당연히 있다. 2G폰에서는 이름과 전화번호만 저장할 수 있었다. 그러나 현재의 스마트 폰이 저장하는 정보는 매우 방대하다. 이름, 성, 회사명, 전화번호, 이메일주소, 사무실 주소에 사진까지 저장할 수 있다.이런 정보들을 단순히 텍스트 파일로 관리하면 검색하거나 추가, 삭제가 힘들어질 것이다. 이럴때 사용하는 것이 데이터베이스이다. 모든 프로그램은 데이터를 다루기 때문에 어떤 형태로든지 데이터베이스가 필요하다.
이것은 Splunk도 예외가 아니다. Splunk는 데이터를 입력받아서 저장하고 사용자가 원하는 검색어에 맞춰서 저장하고 있는 데이터를 반환한다. 다만 여기서 데이터베이스와 차이가 존재한다. 우리가 많이 사용하는 데이터베이스는 관계형 데이터베이스(Relational Database, RDBMS)라고 해서 테이블 형식으로 자료를 저장하고 관리한다. 관계형 데이터베이스에서는 데이터베이스와 테이블이 가장 대표적인 개념으로 등장한다. 데이터베이스는 테이블, 뷰, 저장 프로시저 등 다양한 구성원을 가진 하나의 큰 집합이다. 데이터베이스는 목적이 유사한 데이터를 모으고, 프로그램의 기능 마다 개별적인 테이블로 각각의 데이터를 관리하는 것이다.
Splunk는 이런 개념과 유사하지만 실제 구현은 다른 방식으로 되어 있다.
우선 Splunk에서 데이터베이스와 가장 유사한 개념은 인덱스(index)다. 인덱스는 비슷한 유형의 데이터 저장소이다. 인덱스에는 데이터를 저장할 수 있다. 하나의 인덱스에는 유사한 데이터들을 모으는 것이 바람직하다. 데이터베이스의 테이블과 유사한 개념은 Splunk에서는 어떤 것이 있을까? 엄밀히 말하면 테이블과 같은 구조화된 데이터 저장소는 없다고 봐야 한다.
다만 수집하는 데이터의 구조와 내용을 지정하는 sourcetype이라는 개념이 존재한다.
데이터베이스에서는 테이블이 데이터의 구조, 형식을 지정하고 테이블에 실제 데이터를 저장하였다. 하지만 Splunk는 sourcetype에 데이터를 저장하지 않는다. sourcetype은 데이터의 형식과 필드들 지정하는 일종의 파싱규칙으로 보는게 더 맞는 내용이다.
데이터베이스 테이블 생성 예제
이와 같이 각 필드명, 필드 데이터 유형, 길이 등은 생성 당시에 정해진다. 물론 테이블의 수정이 가능하지만 기 저장된 데이터에 영향을 주지 않으려면 수정은 엄격하게 제한된다.데이터베이스에서 테이블은 데이터 구조와 데이터의 결합체이다.
하지만 Splunk는 이와는 전혀 다른 방식을 취하고 있다. 앞에서 Splunk의 sourcetype은 데이터의 파싱규칙이라고 언급하였다. Splunk는 데이터에서도 이벤트 데이터를 다룬다. 이벤트 데이터랑 줄바꿈으로 구분된 로그를 의미한다.
즉, 소설책처럼 연속된 글뭉치가 아닌 줄단위의 로그를 취급하고 이를 검색하는 시스템인것이다. 줄단위의 이벤트는 기계로 생성되는 로그이므로 각 줄의 로그 형식은 규칙적이다.
다음 웹 서버 로그를 살펴보자. (※ 이 블로그에서 보이는 모든 로그는 임의로 생성한 실습용 로그이다.)
과거에는 웹로그를 데이터베이스에 저장하려면 테이블 구조(스키마라고 한다)의 필드에 맞춰서 분할해야 했다. 그리고 각 필드를 명시해서 입력(insert)을 해야 했다.Splunk는 데이터를 입력할 때 필드에 맞춰서 분할할 필요가 없다. 우선 데이터를 입력하고 인덱싱을 해버린다. 대신 sourcetype을 지정하면 검색할 때 sourcetype에 맞춰서 데이터를 반환한다. sourcetype에서는 로그 형식과 유사하게 필드명을 설정하고, 필드간 구분자(delimeter)를 지정하면 된다.
이 방식은 대용량 수집에 신기원을 시작했다. 지금까지 데이터베이스에 로그를 저장하려면 데이터베이스 입력전에 반드시 테이블형식에 맞추어 로그를 파싱해야 했다. 이러한 단계는 수집 단계에서 병목현상을 일으킬 수 있었다. 하지만 Splunk는 그런 고민을 할 필요가 없다.로그는 지정한 인덱스에 파싱없이 무조건 저장한다. 그리고 데이터를 검색할 때 sourcetype에 맞춰서 반환한다. 적어도 데이터 수집에 대한 고민거리는 사라진 셈이다.
Splunk를 잘 사용하려면 index와 sourcetype 개념을 잘 이해해야 한다. 수집하는 로그 형식이 유명하다면, 예를 들어 아파치 웹로그, 윈도우 이벤트, 리눅스 로그 들이라면 Splunk가 sourcetype을 미리 만들어 놓았다. 우리는 가져다가 사용하기만 하면 된다.
sourcetype에서 지정하는 필드는 향후 검색에서 대단히 유용하게 사용할 수 있다. Splunk는 필드를 지정하지 않고 검색 단어만 입력해도 자동으로 모든 필드를 검색한다.
하지만 이는 성능저하가 발생할 수 있으므로 필드를 지정해서 검색하는 습관을 들여야 한다.
다음 글에서는 sourcetype을 지정하는 예제를 살펴보고 예제용 데이터를 직접 splunk에 저장하는 것을 살펴보자.
[출처] Splunk 개념 이해하기|작성자 도도친구
'Big Data > Splunk' 카테고리의 다른 글
Splunk Best Practices (0) | 2022.01.21 |
---|---|
viz_tutorial_app (0) | 2020.03.23 |
Splunk Architecture: Tutorial On Forwarder, Indexer And Search Head (0) | 2019.02.05 |
How to delete data / index (reset start from scratch) (0) | 2019.02.03 |
How to Reset the Admin password (0) | 2018.10.22 |