익숙해지려면 계속해서 사용해보는 수밖에 없다.
splunk접속정보는 localhost:8000

설정 -> 서버 설정 -> 검색 기본 설정에서 검색 관련 설정도 변경이 가능하다.
Search & Reporting - 작업을 눌러 검색에 걸린 시간도 알 수 있다.
기본적으로 index=apachelog만 입력하면 모든 필드를 보여주고
index=apachelog
| fields uri
이렇게 원하는 필드를 볼수도 있다.

index=apachelog
| timechart count by method
sql의 groupby와 비슷한 문법. 메소드별로 보겠다는 뜻.
시각화-차트에서 보고싶은 차트 종류(라인, 스택 등등) 선택 가능

이래서 내가 만든 데이터는 분석하기가 쉬운데, 남이 만든 데이터는 분석하기가 어렵다.


url고유개수가 증가할 때마다, 404에러가 같이 증가했다는 걸 알 수 있음.
내가 어떤 데이터를 봐야 되고, 어떤 식으로 계산해야 되는지 계획이 세워져 있으면 분석은 어렵지 않다.
파일의 확장자를 ext필드로 추출하기

확장자를 기준으로 시각화하거나 필터링할 수 있게 됨.
index=apachelog
| eval ext=if(match(필드, "검색"), 참, 거짓)
매치함수를 포함한 조건문

설정-필드-계산된필드-새 계산된 필드

필드-필드별칭-새 필드 별칭




상단 메뉴 중 대시보드 - 새 대시보드 만들기
대시보드 ID는 대시보드끼리 구분할 수 있도록 중복되지 않는 식별자이며, 내가 직접 지정할 수 있다.


패널추가-새로만들기-컬럼차트



이 상태로 대시보드 상단 우측 저장을 누르면 저장.


입력 추가에서 "시간"은 UI에서 클릭만 해도 코드가 자동으로 생성된다.
하지만 라디오나 드롭다운 같은 항목은 명령어 부분을 직접 수정해야 할 때가 있어서, 경우에 따라 소스코드를 건드릴 필요도 있다. .


iis데이터도 스플렁크에 연동해보자.
파일 업로드 기능 이용해서 iis.log 선택
iis같은 경우는 소스타입을 자동으로 안해준다.(아파치만 해줌)




시간정보를 바꾼 iis를 앱을 서치 앤 리포팅으로 선택해주고 저장.
앱을 바꾼 이유는 검색할때 분류가 달라지므로 좀 더 편함



사용자 편의성 면에서는 엘라스틱은 로그스태이시니, 키바나니 분산되어 있는데, 스플렁크는 구조가 하나로 되어있어서 사용자 입장에선 더 사용하기가 좋은 것 같다. 단, 비용 부분은 충분히 검토가 필요하다.
index=iislog NOT status=* 이런식으로 status가 없는 항목을 찾을 수도 있다. (NOT은 대문자로 해야 함)


검색결과에 포함되지 않는 값을 지우는 작.
데이터를 살펴보면 잘못된 구조가 발견될 수도 있고, 그걸 직접 찾아내는 것도 중요한 작업이다.
물론 전체 데이터 중 1%의 오류라도 무시하기엔 애매하다.
하지만 그걸 고치기 위해 들이는 공수가, 실제로 가치가 있는지 따져볼 필요도 있다.
괜히 시간 낭비하는 게 아니라, 효율적인 선에서 품질을 챙기는 게 더 중요할 수도 있다.
결국, 이런 판단을 잘 하려면, 결국 툴에 익숙해져야 한다.
데이터에 대한 관심과 욕심이 있어야 이런 툴에도 자연스럽게 익숙해지는 것.
index=iislog
| eval file=if(match(url, "\."), replace(url, ".*\/(.*)", "\1"), null())
| stats count by file
점이 있는 애들만 추출 후 집계

맨 위에 보면 빈값도 있고, 점(.)이 들어간 건 실제 파일뿐 아니라 경로(URL)에도 존재한다.
그래서 단순히 점이 있다고 해서 무조건 파일이라고 보면 곤란하다.
점이 있으면 가지고 와서 replace함수로 검사를 하는데, 파일이 없으니 빈 문자열이 결과에 섞여 버린 것이다.
이런 경우를 제외하고 싶다면 정규표현식을 더 정교하게 조정해야 한다.
이런 작업 또한 분석 목적과 기대 효과를 따져보고, 굳이 필요 없다면 생략하는 것도 현명한 선택이다.
다시 짠 정규표현식 .*\/[^\/]+\.[^\/]+$

index=iislog
| eval file=if(match(url, "\."), replace(url, ".*\/(.*)", "\1"), null())
| eval file2=if(match(url, "\."), replace(url, ".*\/([^\/]+\.[^\/]+$)", "\1"), null())
| timechart dc(file), dc(file2) span=1h

iis log는 이렇게 마무리~
이제 secure log 연동 ㄱ
파일업로드로 secure.log파일 업로드 source type 은 linux_secure로 선택















참고로, 스플렁크에도 일종의 아이폰 앱 생태계처럼 다양한 확장기능을 앱 형식으로 제공하고 있다.
Search & Reporting 뿐만 아니라 여러가지 기능들이 앱으로 만들어져 있음.

스플렁크 직원 뿐 아니라 외부에서도 스플렁크와 연동되는 기능들을 만들어서 올릴 수 있다.
찾으려고 하는 앱은 linux secure인데, 현재는 스플렁크에서는 직접 검색이 되지 않는다.
tgz파일로 설치.
스플렁크 - 앱 - 앱관리로 이동
파일에서 앱 설치 클릭해서 설치파일로 설치



스플렁크 재시작하면 사용 가능.

설정 - source type에 가보면 확인 가능
기존 securelog index는 삭제
다시 데이터추가 - upload로 secure.log 선택
sourcetype - 운영체제 - linux-secure 선택

안쓴것보다는 좀 더 나은 테이블 구조를 볼 수 있다.


마찬가지로 계산된 필드에 추가하고, 편히 쓸 수 있다.
스플렁크의 앱기능을 잘 찾아보면 내 목적에 맞는 앱을 찾을 수 있다.


누군가가 원격 접속을 시도했다가 실패했다는 걸 알 수 있음.

대부분의 사용자들이 로그인에 실패했다는 걸 알 수 있음.
내가 어떤 상태를 보고싶은가에 따라서 여러가지 차트를 그릴 수 있다.
날짜 간격을 좁히고 싶으면 span 옵션 사용

join명령 써보기

조인은 목적에 따라서는 굉장히 유용하지만, 동타임에 발생한 같은 세션의 이벤트를 보고싶다는 목적엔 딱 맞지 않음.
이럴 땐 좀 더 정확하게 쓰기 위해 transaction 명령어로 묶어준다.




이번엔 Splunk의 필드 추출과 대시보드 구성까지 다뤄봤다.
GUI로도 꽤 많은 걸 할 수 있어서 입문자에게 접근성이 좋다는 걸 체감했다.
하지만 역시 복잡한 분석은 결국 쿼리로 정교하게 짜야 하니까 툴에 익숙해지는 것도 중요하지만 결국 '무엇을 보고 싶은가'가 더 중요하다.
'백엔드 > Elastic & Splunk' 카테고리의 다른 글
| Elastic & Splunk를 활용한 이상징후 탐지(4) (0) | 2025.04.18 |
|---|---|
| Elastic & Splunk를 활용한 이상징후 탐지(2) (0) | 2025.04.16 |
| Elastic & Splunk를 활용한 이상징후 탐지(1) (0) | 2025.04.15 |