작은 메모장

29. Splunk 본문

실더스 루키즈 교육

29. Splunk

으앙내눈 2024. 1. 25. 17:12

Splunk

이기종 데이터 분석 플랫폼

어렵게 말하긴 했지만, 그냥 다양한 환경의 데이터 연동을 지원하는 프로그램이다.

로컬/원격에 상관없이 데이터 연동을 할 수 있다는게 큰 특징이다.

스플렁크는 인덱서가 주요 기능이다.

인덱서는 데이터 저장을 주로 하며, 주로 다음과 같은 구성 요소가 있다.

인덱서 구성 요소 역할
인덱서(Indexer) 데이터 저장(인덱싱) 및 가공
포워더(Forwarder) 데이터 수집, 전송 및 가공
검색 헤드(Search Head) 검색 관리
마스터(Master) 클러스터 관리

 

또한, Splunk는 단독 노드 및 클러스터 구성 노드 운영 또한 지원하여 Docker 환경하고도 잘 맞는 특징이 있다.

 

SPL

Search Process Language의 줄임말로, Splunk 내의 제어를 할 때 사용되는 명령어다.

SPL의 큰 특징은 UNIX 명령어와 SQL을 합친 구조를 가지고 있다.

검색과 가공이 동시에 이루어진다는 것이 가장 큰 장점.

 

SPL의 검색 기능은 아래와 같은 문법을 가진다.

① 검색창에 최초 입력되는 구문은 (search 명령 없이) search 구문으로 인식
② 필드="값" 구조의 검색어를 AND, OR, NOT, IN 등의 연산자와 함께 사용
③ 필드="값" 구조에서 인용부호 생략해도 필드="값" 구조로 인식
④ 타 명령어는 인용부호가 있을 때만 필드 ="값" 구조로 인식
⑤ 필드를 지정하지 않으면 전체 원본 데이터가 저장된 _raw 필드 자동 지정
⑥ 연산자를 지정하지 않으면 AND 연산자 자동 지정
⑦ 필드와 연산자는 대소문자를 구분, 검색어는 구분하지 않음
⑧ 와일드카드(*) 사용 가능

 

예를 들어 다음과 같은 명령으로 사용할 수 있다.

apache 인덱스를 가지고 있는 데이터 중, method 필드가 p로 시작하는 데이터를 찾으라는 명령.

마치 SQL의 search를 보는 듯 하다.

 

 

 


실습

Splunk에 데이터를 올려볼 것이다.

제공받은 apache.log 파일을 업로드한다.

Splunk는 데이터를 저장할 때 크게 3가지 요소를 고려한다.

첫 번째는 저장할 데이터, 두 번째는 저장할 데이터의 인코딩 방식, 세 번째는 데이터를 저장할 위치다.

대부분의 데이터는 Splunk가 자동으로 데이터 타입을 인식하여 추천한다.

자동으로 데이터 타입이 잡힌 모습. 다음으로 넘어간다.

데이터를 저장할 인덱스를 생성해준다.

기초 설정은 건드리지 않고, 인덱스 이름만 설정한다.

업로드에 성공한 것을 확인하고, 데이터를 보러 "검색 시작"을 눌러 진행한다.

대략 30만개의 트래픽 데이터가 성공적으로 저장된 것을 확인했다.

검색창을 보면, 4가지 검색값이 지정되어 있는 것을 볼 수 있는데, 이는 Splunk가 여러 환경의 여러 파일을 나눠서 저장하고 있기 때문에 이렇게 검색한 것이다.

하지만 이걸 검색할때마다 일일히 입력하고 들어가면 매우 번거롭기 때문에, 인덱스를 설정해놓은 것이다.

이렇게 처음에 설정한 인덱스만 검색해도 같은 결과나 나오는 것을 확인할 수 있다.

 

데이터 하나를 자세하게 봐보자.

Splunk가 알아서 로그 데이터를 분석하고 분류해놓을 것을 확인할 수 있다.

즉, 필드화를 전부 시켜놓은 것이다.

물론 검색할 때 이 필드값만으로 검색할 수 있기도 하다.


하나를 더 추가해보자.

제공받은 iis.log 파일을 불러올 것이다.

그런데 이번에는 Splunk가 자동으로 인식을 못하고 있는 모습을 확인할 수 있다.

이 데이터 타입이 IIS 라는 것을 알려줘야 제대로 인식 가능하다.

데이터 타입을 설정한다.

인식이 정상적으로 된 것을 확인할 수 있다.

또 하나 확인해야할 것이 있는데, 바로 시간 정보다.

분명히 1시로 로그는 저장되어 있는데, Splunk가 인식하는 것은 10시로 되어있다.

이는 시간 데이터를 읽을 때 기준 시간대가 달라서 그런 것이다.

기준 시간대를 서울로 설정한다.

정상적으로 인식된 것을 확인할 수 있다.

인덱스도 새로 부여해주고, 데이터를 업로드 한다.


Splunk forwarder를 설치하고 난 후, 전달 및 수신 > 데이터 수신에서 9997번으로 새 수신 포트를 설정해준다.

혹은 직접 Splunk 폴더로 이동하여 9997번 포트를 활성화하면 된다.

 

Splunk Forwarder로 모니터링할 파일을 물려주는 작업이다.

해당 데이터를 집어넣을 인덱스를 만들어 두고, 인덱스에 모니터링 할 파일을 연결한다.

이 또한 명령어로 진행해보겠다.

유의해야할 점은 forwarder의 bin 폴더 내에서 실행해야한다는 점이다. splunk 명령어는 그 폴더 안에서만 동작한다.

연동이 잘 되어있는 모습을 확인할 수 있다.

이것으로 외부의 파일을 실시간으로 모니터링 할 수 있다.

 

반대로 설정을 지우고 싶으면 이렇게 작성하면 된다.

 


DB 연결을 해보자

파일에서 앱 설치 버튼을 누른다.

제공받았던 db-connect 파일을 업로드 후 설치를 진행한다.

설치가 끝났으면 재시작한다.

그럼 이렇게 DB Connect 앱이 생긴것을 확인할 수 있다.

DB Connect 앱에서 제공받은 드라이버 파일을 집어넣는다.

드라이버 정보가 이렇게 나온다면 정상

 

DB 계정정보를 등록해준다.

계정정보에는 MySQL에서 사용하는 ID와 비밀번호를 입력한다.

여기에서는 root와 no1ids를 사용하였다.

DB 연결정보 또한 등록해준다.

등록에는 많은 정보가 필요하며, 기존의 MySQL 정보를 입력해주면 된다.

DB 연동설정 또한 진행해준다.

DB 연결 정보를 가지고 DB 연동을 진행한다.

DB 연동은 크게 Batch 유형과 Rising 유형으로 나뉜다.

Batch 유형은 데이터를 연동할때마다 전체 데이터를 가져오고

Rising 유형은 데이터를 연동할 때 변경된 데이터만 가져오는 유형이다.

여기서는 Rising 유형을 선택하여 연동할 것이다.

 

데이터 연동의 상세 동작 설정을 입력하는 란이다.

눈여겨 보아야할 곳은 Execution Frequency 부분이다.

이 부분은 데이터를 불러오는 주기를 지정하는 부분으로, cron expression으로 표시하여 주기를 지정한다.

현재는 30초 간격으로 설정하였다.

DB 연결이 끝나면 이제 검색을 통해서 DB 접근이 가능할 것이다.

시도해보자.

연결이 된 모습을 확인할 수 있다.

그렇다면 Linux에서 쌓이는 트래픽이 여기서 보일 것이다.

실행해보자.

Snort는 eth0, 즉 실제 인터넷 트래픽이 오가는 랜카드를 선택하였다.

때문에 실제 인터넷 요청을 해야 트래픽이 잡힐 것이다.

wget 요청으로 요청을 해보자.

정상적으로 룰이 탐지된 모습.

이제 Splunk에서 이 트래픽이 보이는지 확인해보자.

정상적으로 트래픽을 가져오고 있는 모습을 확인할 수 있다.


 

'실더스 루키즈 교육' 카테고리의 다른 글

31. Elastic 실습  (0) 2024.01.31
30. Elastic  (0) 2024.01.30
28. SQL, Snort 결과 최적화  (0) 2024.01.24
27. PCRE  (0) 2024.01.23
26. Snort 룰  (0) 2024.01.23