분류 전체보기 (12) 썸네일형 리스트형 다수의 다중 값 (Multivalue) 필드를 각각의 항으로 나누고 싶어요 스프레드시트와 DB의 하이브리드인 Splunk에서 스프레드시트의 특징을 보여주는 부분이 바로 Multi Value Field (이하 다중 값 필드)이다. 어떻게 보면 엑셀의 셀 통합 기능하고 비슷하다고 보면 되는데, 일단 예시를 보자. 분류 사번 이름 직원 001 김사징 직원 002 이부장 직원 003 박차장 다음과 같은 데이터를 직원목록.csv 파일로 저장해 스플렁크로 처리한다고 치자. 실무적인 이유든 미학적인 이유든 직원을 기준으로 데이터를 합친 통계결과를 가져오려고 한다면 다음과 같은 명령어를 쓸 수 있다. |inputlookup 직원목록.csv |stats list(사번) list(이름) by 분류 |rename list(*) as * 명령어를 실행하면 결과는 다음과 같이 된다. 분류 사번 이름 .. Splunk로 COUNTIF 같이 조건식 계산을 하고 싶어요! 스플렁크에는 stats 명령어 같은 통계 명령어를 이용해 아주 빠르게 대량의 데이터를 검색할 수 있다. 이것 관해선 아래 글 참조. Splunk 응용 - 통계 기능 stats, eventstats, streamstats 스플렁크를 포함한 DB는 결국 사용자의 역량에 따라 환골탈태하는 물건이다. 정말 관심이 없거나 생각이 없다면 그냥 Ctrl + F 검색을 더 쉽게 하는 수준으로 사용하는 것 같다. 거기서 조금만 발 splunk-tech.tistory.com 하지만 실무현장에서도 사람들의 쿼리를 보면 stats 상에서 조건문을 추가할 수 있다는 사실을 잘 모르는 듯 하다. 물론 그렇게 안 하더라도 얼마든지 어거지로 해낼 수는 있다. 일단 다음과 같은 표 '장비리스트.csv'가 하나 있다고 치자. 장비명 종.. Splunk 응용 - 통계 기능 stats, eventstats, streamstats 스플렁크를 포함한 DB는 결국 사용자의 역량에 따라 환골탈태하는 물건이다. 정말 관심이 없거나 생각이 없다면 그냥 Ctrl + F 검색을 더 쉽게 하는 수준으로 사용하는 것 같다. 거기서 조금만 발전하면 엑셀 표 뽑아주는 기계정도로 인식을 하는 듯 하고. 오라클 DB 같은 전통적인 DB의 경우 딱 그 정도까지만 해도 수십억 단위의 데이터의 저장 및 관리가 쉽다는 관점에서 실사용의 의의를 다 채웠다고 해도 할 말이 없다. 하지만 Splunk가 전통적인 DB와 차별점을 가지고, 기업용으로는 라이선스 비용조차 더 비싸게 받아먹는 이유는, 표, 통계, 보고서 작성, 대시보드 표기 등 DB 안에 있는 데이터를 가공/처리해서 보여주는 프런트엔드 애플리케이션을 만들고 유지보수할 필요 없이 쿼리만 가지고 뚝딱뚝딱 만들.. Splunk 에서 문자열을 합치는 2가지 방법 스플렁크에서 문자열을 쓰는 방식 중 가장 많이 쓰는건 아무래도 + 기호다. |makeresults |eval 결과="문"+"자"+"열" + 기호는 C 시절 부터 Python까지 프로그래밍 언어에서도 문자열을 합치는 유구한 방식이고, 직관성이 높기도 하다. 거기다가 Splunk는 많은 부분이 Python으로 돌아가는 프로그램이라서 인지는 몰라도, 형변환에서 매우 자유롭다. |makeresults |eval 값1="문자", 값2=2, 값3=3 |eval 결과1= 값1 + 값2, 결과2=값2+값3 결과 1과 결과2 모두 무리없이 출력된다. 결과1은 문자열로 계산해 합쳐지고, 결과2는 숫자로 계산해 합쳐진다. 그렇기 때문에 항상 + 기호만 써도 문제 없을 것 같다. 하지만 문제는 eval의 결과 값을 얻기 위해.. Splunk로 한 달 전 통계값과 지금 통계값을 비교하기 보안 업무든, 경제 업무든, 스플렁크의 stats 기능은 이 프로그램의 알파이자 오메가이다. 하지만 Splunk의 쿼리 언어인 SPL 을 포함한 SQL등의 대부분의 PL은 윗 항의 데이터와 아랫 항의 데이터를 직접적으로 비교하지 못한다. 프로그램 언어가 IF (DATA[n] > DATA[n-1]) DO ACTION(); 같은 로직으로 간단하게 전 후 데이터를 비교 할 수 있지만, SPL 언어는 (논리적으로) 한 데이터 결과 행마다 한 번씩 쿼리가 실행되는 구조다. 그러므로 1번째 행과 2번째 행은 서로 교류하지 못한다. 하지만 어떻게든 해야한다면 어거지로 만들어낼 수 있다. 아주 간단한 예를 들어 스플렁크가 2달동안 수집한 로그 수를 비교한 뒤, 몇 %가 증감 했는지 계산하는 간단한 쿼리를 써보자 |ts.. Splunk에서 리눅스 스크립트를 작성할때 CURL 35 에러가 발생한다면? (35) error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small 보통 Splunk 웹서비스를 이용해 HTTP API 통신을 하는 건 현재 거의 불가능에 가깝기 때문에 결국 Bash 스크립트를 이용할 수 밖에 없다. https URL 연결시 위와 같은 에러가 발생하곤 하는데 보통 통신 암호화 알고리즘이 기준 대비 너무 노후화 된걸 사용하기 때문이다. 인터넷에 연결되어 있는 스플렁크라면 openssl 을 최신버전으로 업데이트 한다면 단순하게 해결할 수 있다. 이게 정석이기도 하다. 하지만 실무의 영역에선 각종 구차한 사정들이 있기 마련이고, 그럼에도 불구하고 연결을 해야하는 상황이 있기 때문에, 이를 해결하기 위해선 리눅스 터미널 상에서 다음 명령.. Splunk로 효율적인 실시간 누적 통계 검색하기 스플렁크를 보안관제, 모니터링에 이용하는 사람들이 자주 쓰는 검색 / 경고 / 보고서 중 하나는 바로 '00분간 00건의 로그가 들어왔는지 확인하기'다. 예를 들어 30분간 방화벽 로그가 미수집 되면 로그 수집 상태 경고를 띄운다던가, 10분간 특정 방화벽에 1만건의 로그가 들어오면 DDoS 공격 경고를 띄운다던가. DDoS 경고 쿼리를 짠다고 가정할 시, 아무 생각 없이 짜서 넣을 수 있는 쿼리는 다음과 같다. index=보안로그 sourcetype=방화벽 earliest=-10m latest=now |stats count by host |where count > 10000 이 쿼리를 10분마다 검색한다면, 딱히 더 최적화를 할 여지는 없다. 하지만 이런 식의 관제, 모니터링용 시나리오들은 실시간이거나.. Splunk 기초 - 따옴표 제대로 이해하기 스플렁크를 사용하다보면 따옴표와 큰따옴표를 자주 볼 수 있다. 헌데 모르고 지나치기엔 자주 나오고, 사용하기도 하고 사용하지 않기도 하며, 단순히 읽고 보는 입장에선 있으나 없으나 사람 뇌로 쿼리문을 이해하는데 큰 문제가 없으니 참 애매한 대상이다. 하지만 쿼리를 작성해서 Splunk에 넣어야하는 입장에선 사소하지만 중요한 문법이기에, 로직을 멀쩡히 짜서 넣었는데도 따옴표, 큰따옴표, 생략 여부에 따라 데이터가 나오기도 하고 바뀌기도 하고 안나오기도 하니 제대로 모르면 나중에 디버깅을 위해 어두운 등잔 밑에서 시간을 낭비하게 할 수도 있다. 따옴표와 큰 따옴표는 다음과 같은 기능을 상황에 따라 가진다 큰 따옴표 (") 문자열을 하나로 묶어준다 값 그 자체 따옴표 (') 해당 컬럼이 가진 값을 호출한다 이.. 리눅스 스크립트를 이용해 Splunk 검색하고 검색 결과 다운로드하기 스플렁크는 웹에서 https 프로토콜을 이용한 원격 검색이 가능하다. 따라서 업무 서버에서 감사나 업무에 필요한 자료를 Splunk에서 자동 계산해 cron을 통해 매시간마다 내려받을 수 있다. Splunk 측에서 기술문서에 공개하고 있는 곧이 곧대로 작성할 경우 다음과 같이 작성할 수 있다. 만약 아래 스크립트가 작동하지 않을 경우, Splunk 상에서 8089 포트를 이용한 원격 검색 기능이 열려 있는지, 네트워크 연결을 어딘가에서 막고 있거나 라우팅/DNS 정보가 없는지 확인해야 한다. sid=`curl -u '아이디':'비밀번호' -k "https://스플렁크 주소:8089/services/search/jobs --data-urlencode search='쿼리'|grep sid | tr -d '/.. Splunk 기초 - Where 절의 효율적 사용 스플렁크에서 where 은 search와 함께 원하는 데이터만 필터링해서 보여주는 가장 기초적인 방식이다. 이 포스트에서는 where의 기초적인 사용법을 다룬다. 보통 다음과 같이 사용한다. |where 컬럼명 = "원하는 값" |where 컬럼명 != "원하지 않는 값" 기초적인 명령어지만, 이렇게 검색할 경우 딱 한가지 값만 필터링 가능 하다. 두 가지 값을 AND 나 OR 조건으로 필터링하고 싶다면 직관적으로 사용하면 된다. |where 컬럼명 = "원하는 값1" OR 컬럼명 = "원하는 값2" |where 컬럼명 = "원하는 값1" AND 컬럼명 = "원하는 값2" 사실 AND는 별도로 사용할 필요 없이 다음과 같은 조건 설정이 가능하다. |where 컬럼명1 = "원하는 값" 컬럼명2 = "원하.. 이전 1 2 다음