스플렁크는 웹에서 https 프로토콜을 이용한 원격 검색이 가능하다.
따라서 업무 서버에서 감사나 업무에 필요한 자료를 Splunk에서 자동 계산해 cron을 통해 매시간마다 내려받을 수 있다.
Splunk 측에서 기술문서에 공개하고 있는 곧이 곧대로 작성할 경우 다음과 같이 작성할 수 있다.
만약 아래 스크립트가 작동하지 않을 경우, Splunk 상에서 8089 포트를 이용한 원격 검색 기능이 열려 있는지,
네트워크 연결을 어딘가에서 막고 있거나 라우팅/DNS 정보가 없는지 확인해야 한다.
sid=`curl -u '아이디':'비밀번호' -k "https://스플렁크 주소:8089/services/search/jobs --data-urlencode search='쿼리'|grep sid | tr -d '/' | tr -d ' ' |tr -d '<sid>'`
curl -u '아이디':'비밀번호' -k "https://스플렁크 주소:8089/services/search/jobs"$sid"/result?output_mode=csv@count=0" >> "/경로/경로/파일/파일.확장자"
위와 같은 방식은 Splunk에서 먼저 검색을 실행시키고 그 검색 작업의 sid를 받은 다음
다시 Splunk에 접속해 sid의 결과 데이터를 청구하는 방식이다.
sid를 받자마자 바로 splunk에 청구할 경우 검색이 미처 끝나지 않아 파일을 당장 받지 못하는 경우도 있는데,
당장 받지 못한다고 바로 빈 파일을 뱉어내고 스크립트가 끝나는 경우는 흔치 않긴 하지만, 발생한다면 안정성을 위해 타이머를 좀 적용시켜야 할 수도 있다.
sid=`curl -u '아이디':'비밀번호' -k "https://스플렁크 주소:8089/services/search/jobs --data-urlencode search='쿼리'|grep sid | tr -d '/' | tr -d ' ' |tr -d '<sid>'`
sleep 60
curl -u '아이디':'비밀번호' -k "https://스플렁크 주소:8089/services/search/jobs"$sid"/result?output_mode=csv@count=0" >> "/경로/경로/파일/파일.확장자"
솔직히 한 번 검색을 하는데 두 번씩 Splunk에 연결을 하고, sleep으로 지연까지 시키는 상황은 조금 비효율적이고, 안정적이지 못하다고 할 수 있다.
따라서 구버전에선 적용이 안되지만 버전이 충분히 높다면 다음과 같은 방식으로도 한번에 다운로드 받을 수 있다.
curl -u '아이디':'비밀번호' -k "https://스플렁크 주소:8089/services/search/jobs/export -d 'max_count=999999' -d 'output_mode=csv' -d 'search=쿼리' >> /경로/경로/파일.확장자
이런 방식으로 다운로드를 진행하면 작업의 sid를 추출하지 않기 때문에 혹시 sid가 필요하면 아까 방식대로 2번 연결해 받아야한다.
output_mode에서 csv 말고도 pdf 등 출력 파일 확장자를 Splunk가 지원하는 확장자로 바꿀 수 있다.
매일 한번씩 받아야 하는데, 파일명_연_월_일.csv 방식으로 매일마다 파일명의 일자가 달라지게 하려면 다음과 같이 응용할 수 있다.
dt=`date "+%Y%m%d"`
curl -u '아이디':'비밀번호' -k "https://스플렁크 주소:8089/services/search/jobs/export -d 'max_count=999999' -d 'output_mode=csv' -d 'search=쿼리' >> "/경로/경로/파일"$dt".확장자"
지속적으로 한 파일에 이어써나가면서 중복 항목들을 삭제하려면 다음과 같이 응용할 수 있다.
curl -u '아이디':'비밀번호' -k "https://스플렁크 주소:8089/services/search/jobs/export -d 'max_count=999999' -d 'output_mode=csv' -d 'search=쿼리' >> /경로/경로/파일.확장자
sort 경로/경로/파일명.확장자 | uniq > 경로/경로/파일명.확장자
>> 는 이어쓰기, > 은 덮어쓰기로 동작하는 것을 유념하여 사용하면 유용하게 사용할 수 있다.
혹시 여러 쿼리를 한꺼번에 동작하거나, 전체적으로 비슷하지만 조금씩만 다른 부분을 여러번 반복 검색해서 다르게 검색해야할 경우엔 다음과 같이 응용한다.
리스트명 = (
"쿼리1"
"쿼리2"
"쿼리3"
)
for 리스트명 in ${리스트명[@]}; do
curl -u '아이디':'비밀번호' -k "https://스플렁크 주소:8089/services/search/jobs/export -d 'max_count=999999' -d 'output_mode=csv' -d 'search='${리스트명} >> "/경로/경로/"${리스트명}".확장자"
done
이렇게 위에 소개된 날짜 추가, 이어쓰기 후 중복 삭제, 배열을 이용한 다중 검색을 조합하면 다양한 방식으로 스크립트를 응용하여 작성할 수 있다.
'Splunk Tip' 카테고리의 다른 글
Splunk 에서 문자열을 합치는 2가지 방법 (0) | 2023.02.23 |
---|---|
Splunk로 한 달 전 통계값과 지금 통계값을 비교하기 (0) | 2023.02.22 |
Splunk에서 리눅스 스크립트를 작성할때 CURL 35 에러가 발생한다면? (0) | 2023.02.14 |
Splunk로 효율적인 실시간 누적 통계 검색하기 (0) | 2023.02.07 |
Splunk 한 데이터모델의 여러 데이터셋을 간단하게 검색하고 싶어요! (0) | 2023.01.18 |