스플렁크 튜토리얼 2부/ splunk tutorial chapter 2 / 검색(search) 기본

스플렁크 튜토리얼 2부를 진행해 보겠습니다!

Search & Reporting 기본

기초 검색 – 데이터를 어떻게 검색하는지 알아보자!

인덱스 검색

index=tutorial
search index tutorial

키워드 검색 – 데이터의 특정 문자열을 검색

index=tutorial "buttercupgames"
search buttercupgames

필드 검색

검색 결과 -> 필드 사이드바 -> categoryId -> SPORTS

search fields sidebar

필드 사이드바에서 보고 싶은 필드를 선택하면 해당 필드에 어떤 값이 있는지, 몇개의 값이 있는지, 얼만큼 있는지 간략하게 확인하실 수 있습니다. 그리고 특정 값을 선택하게 되면 검색어에 해당 값이 추가되면서 필드값을 검색하게 됩니다.

물론 처음부터 검색문에 “필드=값”을 적어서 검색해도 됩니다.

index=tutorial "buttercupgames" categoryId=SPORTS
search fields sidebar2 1

필드란 무엇인가?

필드는 검색 가능한 이름=값 쌍으로 이벤트를 서로 구분합니다. 필드를 사용하여 원하는 특정 이벤트를 찾을 수 있습니다.

Extracted fields / 추출된 필드

splunk는 필드를 추출할 때 index time, search time 이라는 두 시점을 지납니다. 필드 추출은 개념이 처음에 좀 헷갈릴 수 있습니다. 스플렁크를 꾸준히 사용하고 여러 기능을 사용하다 보면 자연스럽게 이해가 되니 조급하지 않으셔도 됩니다.
(필드를 추출하다. = 데이터에서 필드를 구분하다.)

  • index time / 인덱스 시간 : splunk 소프트웨어가 새로운 데이터를 수신한 시점부터 인덱스에 데이터가 기록되는 시점까지의 시간. 기본 필드와 타임 스탬프가 추출됩니다.
    즉 새로운 데이터가 splunk에 들어와서 저장 될 때까지의 시간
  • search time / 검색 시간 : 검색이 시작되어 종료될 때까지의 시간. 검색 시간 동나 검색 필드 추출, 필드 별칭 등 필드에 대한 몇가지 처리가 진행됩니다.

필드 검색

필드를 검색할 때는 field_name = field_value로 검색합니다.

  • 필드 이름은 대소문자 구분하지만 필드 값은 대소문자를 구분하지 않습니다.
  • 필드 값에는 와일드카드(*)를 사용할 수 있습니다.
  • 필드 값에 공백이 포함된 경우 따옴표가 필요합니다.
index=tutorial source="*access*"
search wildcard

필드 사이드바

  • selected fields / 선택된 필드 : 기본적으로 선택되어 있는 splunk 기본 필드들입니다.
  • interesting fields / 관심 필드 : 이벤트에 20% 이상 등장하는 필드입니다.

    selected fields에 등록하려면 필드 사이드바 상단의 “모든 필드” 를 선택해서 추가할 수 있습니다.

검색 예시

“어제 성공적으로 구매를 한 로그를 검색”

  • time picker(시간 선택기)에서 어제를 선택 후 검색
index=tutorial source="*access*" status=200 action=purchase

이 검색은 status 필드가 http 상태 코드를 나타냅니다. 이를 이용해 성공 처리된 이벤트를 찾고 action이 purchase인 데이터를 검색해 “성공적으로 구매한 로그”를 검색합니다.

상태코드가 200이 아닌 데이터를 검색하려면 아래처럼 하면 됩니다.

index=tutorial source="*access*" status!=200 action=purchase

“전체 기간중 오류가 난 이벤트 검색”

  • time picker(시간 선택기)에서 전체를 선택 후 검색
index=tutorial (error OR fail*) OR (status=404 OR status=500 OR status=504)

“특정 제품의 판매 검색”

  • time picker(시간 선택기)에서 원하는 기간 선택(어제, 전체 등)
index=tutorial source="*access*" status=200 action=purchase categoryId=simulation

이와 같이 필드를 이용해서 특정 이벤트를 검색할 수 있습니다. 때문에 해당 필드가 어떤 의미를 갖는지 아는것이 굉장히 중요합니다.

“전체 기간 중 각 제품이 얼마나 팔렸는지 갯수와 퍼센트로 보여줘”

index=tutorial source="*access*" status=200 action=purchase | top categoryId
search top

검색을 하면 통계 탭에서 결과가 나옵니다. 결과를 보면 어떤 cateogryId가 몇개나 있는지 해당 값이 몇 퍼센트 비율로 있는지 확인할 수 있습니다. 이대로 시각화를 선택해 봅니다.!

search top visualization 1

막대 그래프가 생성됩니다. 또한 차트를 선택하면 여러가지 그래프를 선택할 수 있습니다.
시각화는 통계 결과가 있을 때에만 표현할 수 있습니다.
(통계 결과는 통계결과를 내는 tarnsforming command라는 명령어를 사용하면 됩니다. splunk에는 여러가지 command type이 있고 이는 추후에 다루겠습니다. 미리 알고 싶다면 여기로!)
각각의 그래프는 필요한 값이 다르기 때문에 그에 맞춰 결과 값을 만들어 주어야 합니다.

subsearch / 하위 검색

검색문이 기본 검색의 문자열(인수)로 사용됩니다. 하위 검색은 대괄호 []로 묶어 사용하고 검색 중 가장 먼저 실행 됩니다. 일단 예시를 보면 더 쉽게 이해가 될 겁니다.

예시 – 가장 자주 쇼핑하는 고객을 찾아, 그 고객이 무엇을 구매했는지 알아보기

1. 가장 쇼핑을 많이 한 고객 찾기 (전체 기간)

sourcetype=access_* status=200 action=purchase | top limit=1 clientip | table clientip

2. 구매 데이터에 가장 많이 쇼핑을 한 고객을 찾는 쿼리를 하위 쿼리로 추가

index=tutorial source="*access*" status=200 action=purchase [ search index=tutorial source="*access*" status=200 action=purchase | top clientip limit=1 | table clientip ] 

3. 일목요연하게 통계로 만들기

index=tutorial source="*access*" status=200 action=purchase [ search index=tutorial source="*access*" status=200 action=purchase | top clientip limit=1 | table clientip ] | stats count, distinct_count(productId), values(productId) by clientip
search subsearch

stats 구문은 나중에 다루겠습니다. 지금은 데이터를 이렇게 만질 수 있구나. 이런게 있구나~ 하고 넘어가시면 됩니다.!

  • count : 데이터 갯수
  • distinct_count(productId) : productId의 중복 없는 갯수
  • values(productId) : productId의 모든 값을 중복 없이 표현
  • by clientip : 위 데이터를 clientip별로 묶어서 계산

이렇게 하위 검색을 사용하면 특정 검색의 결과를 검색문에 추가해서 검색을 할 수 있습니다.

검색 tip

다음의 단축키로 검색 구문을 읽기 쉽게 정렬해 줄 수 있습니다. 이건 정말 자주 사용되니 반드시 기억하시면 좋습니다.

  • linux or windows – ctrl + \
  • mac – commnad + \
  • ctrl + shift + f, command + shift + f

마무리

3부에서 이어집니다!

splunk 튜토리얼 3부

splunk 튜토리얼 1부

아무도 안알려주는 splunk 기본지식

splunk 설치 및 실행

출처 – splunk doc