User Tools

Site Tools


Sidebar

data:search

Splunk 검색 방법 및 현재 검색 할 수 있는 Data 확인 방법

검색 후 보고서 만들기

SQL에서 Splunk로 전환

SQL 검색 명령어와 Splunk 검색 명령어 간에 완벽히 일치하는 점은 없지만, SQL에 익숙할 경우 다음과 같이 간단한 비교를 통해 Splunk를 사용하는 데 도움을 받을 수 있습니다.

개념

데이터베이스 측면에서 Splunk는 내재된 시간적 차원을 이용하는 비관계형의 반구조적인 분산 데이터베이스입니다. 규범적 인 의미에서 Splunk는 데이터베이스(관계형 데이터베이스의 경우 모든 테이블 컬럼이 사전에 정의되어야 하고 새 하드웨어 에 연결하는 것만으로는 자동 확장되지 않음)가 아니지만 데이터베이스의 개념과 유사한 점이 많습니다.

DB개념Splunk 개념참고
SQL쿼리 Splunk 검색 Splunk 검색은 인덱스 데이터를 검색하고 변환 및 보고 작업을 수행할 수 있습니다. 검색 결과를 명령어 간에 "연결" 또는 전송하여 결과를 필터링하고 수정하며 순서를 변경하고 그룹화할 수 있습니다.
테이블/뷰 검색 결과 검색 결과를 컬럼이 있는 행 테이블로 동적 생성되는 데이터베이스 뷰로 볼 수 있습니 다.
index index 모든 값과 필드가 Splunk에서 인덱싱되므로 인덱싱 컬럼을 수동으로 추가하거나 업 데이트 및 삭제할 필요도 없습니다. 모든 데이터를 자동으로 신속하게 검색할 수 있습 니다.
row 결과/이벤트 Splunk에서는 결과가 테이블 행에 해당되는 필드(컬럼) 값 리스트로 표시됩니다. 이 벤트는 타임스탬프와 원시 텍스트가 있는 결과입니다. 일반적으로 이벤트는 다음과 같은 로그 파일의 레코드입니다. 173.26.34.223 - - [01/Jul/2009:12:05:27 -0700] "GET /trade/app?action=logout HTTP/1.1" 200 2953
column field Splunk의 필드는 검색에서 동적으로 반환됩니다. 다시 말해 검색마다 다른 필드 집합 이 반환될 수 있습니다. 원시 기본 데이터에서 더 많은 필드를 추출하도록 Splunk를 설정한 후 동일한 검색을 수행하면 이전 검색보다 더 많은 필드를 반환합니다. Splunk의 필드는 데이터 유형과 관련이 없습니다.
데이터베이스/스 키마 인덱스/앱 Splunk에서 인덱스는 데이터를 수집한 것으로, 데이터베이스에 테이블을 수집하는 것과 유사합니다. 해당 데이터의 도메인 정보, 데이터 추출 방법, 실행할 보고서 등이 Splunk 앱에 저장됩니다.

SQL에서 Splunk로 전환

아래 예에서는 Splunk의 “source” 필드 값을 “테이블”의 프록시로 사용합니다. Splunk에서 “source”는 특정 데이터의 출처 가 되는 파일, 스트림 또는 입력으로, /var/log/messages 또는 UDP:514를 예로 들 수 있습니다. 다른 언어로 변환할 경우 원래 언어에서 사용되는 관용적인 표현으로 인해 변환에 시간이 오래 걸리는 경우가 많습니다. 아래 에 제시된 Splunk 검색 예 중 일부는 더 간결하게 작성할 수 있지만 유사성과 명확성을 위해 테이블 및 필드 이름을 SQL과 동일하게 유지했습니다. 또한 사용자 인터페이스에서 더 편리한 방법을 이용할 수 있기 때문에 컬럼을 추출하는 데 FIELDS 명령어를 거의 사용하지 않으며 검색어 사이에 “AND” 연산자가 포함되어 있기 때문에 부울 검색에 “AND”를 사용할 필요가 없습니다.

SQL 명령어SQL 예제Splunk 예제
SELECT *SELECT * FROM mytable source=mytable
WHERE SELECT *
FROM mytable WHERE mycolumn=5 source=mytable mycolumn=5
SELECT SELECT mycolumn1, mycolumn2 FROM mytable source=mytable
| FIELDS mycolumn1, mycolumn2
AND/OR SELECT * FROM mytable WHERE (mycolumn1="true" OR mycolumn2="red") AND mycolumn3="blue" source=mytable
AND (mycolumn1="true" OR mycolumn2="red") AND mycolumn3="blue"
AS (alias) SELECT mycolumn AS column_alias FROM mytable source=mytable
| RENAME mycolumn as column_alias | FIELDS column_alias
BET WEEN SELECT *
FROM mytable WHERE mycolumn BETWEEN 1 AND 5 source=mytable mycolumn>=1 mycolumn<=5
GROUP BY SELECT mycolumn, avg(mycolumn) FROM mytable
WHERE mycolumn=value
GROUP BY mycolumn source=mytable mycolumn=value
| STATS avg(mycolumn) BY mycolumn | FIELDS mycolumn, avg(mycolumn)
H A V IN G SELECT mycolumn, avg(mycolumn) FROM mytable
WHERE mycolumn=value
GROUP BY mycolumn HAVING avg(mycolumn)=value source=mytable mycolumn=value
| STATS avg(mycolumn) BY mycolumn | SEARCH avg(mycolumn)=value
| FIELDS mycolumn, avg(mycolumn)
LIKE SELECT *
FROM mytable
WHERE mycolumn LIKE "%some text%" source=mytable mycolumn="*some text*" 참고: Splunk에서 가장 일반적으로 사용되는 검 색 방법은 실제로 SQL에서는 거의 불가능한 모 든 필드에서 하위 문자열을 검색하는 방법입니 다.다음은 "some text"가 포함된 모든 행을 반 환하는 검색입니다. source=mytable "some text"
ORDER BY SELECT *
FROM mytable
ORDER BY mycolumn desc source=mytable | SORT -mycolumn
SELECT DISTINCT SELECT DISTINCT mycolumn1, mycolumn2 FROM mytable source=mytable
| DEDUP mycolumn1
| FIELDS mycolumn1, mycolumn2
SELECT TOP SELECT TOP 5 mycolumn1, mycolumn2 FROM mytable source=mytable
| TOP mycolumn1, mycolumn2
INNER JOIN SELECT *
FROM mytable1
INNER JOIN mytable2
ON mytable1.mycolumn=mytable2.mycolumn source=mytable1 | JOIN type=inner mycolumn [ SEARCH source=mytable2 ] 참고: 다음과 같은 두 가지 조인 방법이 더 있습 니다. lookup 명령어를 사용하여 외부 테이블 의 필드 추가: ... | LOOKUP myvaluelookup mycolumn OUTPUT myoutputcolumn 하위 검색 사용: source=mytable1 [ 
SEARCH source=mytable2 mycolumn2=myvalue |FIELDSmycolumn2 ]
LEFT (OUTER) JOIN SELECT *
FROM mytable1
LEFT JOIN mytable2
ON mytable1.mycolumn=mytable2.mycolumn source=mytable1 | JOIN type=left mycolumn [ SEARCH source=mytable2 ]
SELECT INTO SELECT *
INTO new_mytable IN mydb2 FROM old_mytable source=old_mytable
| EVAL source=new_mytable | COLLECT index=mydb2 참고: COLLECT는 일반적으로 많은 비용을 들 여 계산되는 필드를 향후에 보다 신속하게 액세 스할 수 있도록 Splunk로 다시 저장하는 데 사 용됩니다. 이 예는 일반적이지 않지만 SQL 명령 어와 비교하기 위해 제공되었습니다. source 이 름은 orig_source로 바뀝니다.
TRUNCATETABLE TRUNCATE TABLE mytable source=mytable | DELETE
INSERT INTO INSERT INTO mytable
VALUES (value1, value2, value3,....) 참고: SELECT INTO를 참조하십시오.개별 레 코드는 검색 언어를 통해 추가되지 않지만 필요 한 경우 API를 통해 추가할 수 있습니다.
UNION SELECT mycolumn
FROM mytable1
UNION
SELECT mycolumn FROM mytable2 source=mytable1
| APPEND [ SEARCH source=mytable2] | DEDUP mycolumn
UNIONALL SELECT *
FROM mytable1
UNION ALL
SELECT * FROM mytable2 source=mytable1
| APPEND [ SEARCH source=mytable2]
DELETE DELETE FROM mytable WHERE mycolumn=5 source=mytable1 mycolumn=5 | DELETE
UPDATE UPDATE mytable
SET column1=value, column2=value,... WHERE some_column=some_value 참고: Splunk에서 레코드를 업데이트할 경우 몇 가지 고려할 점이 있습니다. 첫째, Splunk는 항 상 가장 최근의 결과를 먼저 반환하므로 새 값을 Splunk에 추가할 수 있고(INSERT INTO 참조) 이전 값을 삭제하는 것에 대해서는 신경쓸 필요 가 없습니다. 둘째, 검색 시 항상 중복된 결과를 제거하여 가장 최근의 값만 사용되도록 할 수 있 습니다(SELECT DISTINCT 참조).마지막으로, 이전 레코드를 실제로 삭제할 수 있습니다 (DELETE 참조).

검색 기초

  • 와일드카드지원
  • 검색 패턴의 요건은 대소문자를 구분하지 않습니다.
  • Booleans “AND”, “OR”, “NOT”
    1. Booleans의 표현은 대문자로 표시
    2. 검색패턴의요건의중간에적용
    3. 복잡한검색요건을“()”그룹화함
  • 정확한 단어열은 “ “로 표현
  • “검색 엔진”, 그 이상의 기능
  1. 비교 operators 검색을 더 강력하게 합니다
  2. 수치비교operators ( != > < ⇐ >= )

자동으로 명령 만드는 팀

Example

갯수 세기

sourcetype=acc* | stats count

기간으로 고급 검색

sourcetype=acc* earliest=-1d-1h latest=-10m

select * from iris.json

source=iris.json

access_combined

sourcetype=access_combined

  1. 주의:퍼미션,Application Management App 설치가 되어 있어야 됨.

RegExr

  • 정규 표현식 테스트 프로그램(서브라임도 가능함)
  • Adobe Air설치 필요
  • 별도의 앱임. 별도로 문자열을 복사해서 사용.
  • \r,\n주의, Splunk는 perl기반 정규식임.

data/search.txt · Last modified: 2019/02/25 14:50 (external edit)