저희팀은 Elasticsearch을 이용하여 SIEM 대안으로 사용중에 있습니다. elasticsearch를 이용하다보면 주로 kibana 화면을 통해 쿼리를 입력하고 결과값을 확인하는데요. 특정 상황에서는 CLI 기반으로 엘라스틱서치 쿼리를 입력하여 결과를 봐야할때가 있습니다. 이때 유용하게 사용할수 있는 오픈소스로 Elktail을 사용하면 됩니다. 지금부터 elktail 사용법과 특징에 대해서 살펴보겠습니다.
Elktail 이란?
elktail은 Elasticsearch, Logstash, Kibana(ELK) 스택에서 로그를 쿼리하고 실시간으로 모니터링할 수 있는 명령줄 도구입니다. Linux에서 흔히 사용하는 tail -f 명령과 유사한 방식으로, ELK 스택에 저장된 로그를 터미널에서 실시간으로 확인할 수 있으며, 특정 검색 조건을 설정해 로그를 검색하고 필터링하는 기능도 제공합니다.
elktail은 ELK(Elasticsearch + Logstash + Kibana) 기반의 로그를 다룰 수 있는 명령줄(Command Line) 유틸리티입니다. 이를 통해 Lucene Query와 tail 기능을 활용하여 CLI 환경에서 오류 또는 특정 이벤트를 검색할 수 있습니다. 기존 Kibana 웹 인터페이스에서도 로그 검색이 가능하지만, 아래와 같은 상황에서는 elktail이 유용하게 쓰일 수 있습니다.
- CLI 기반에서 실시간 로그 분석이 필요한 경우
- X-Pack 기능(모니터링 및 알람) 사용 대안으로 활용
- CLI 인터페이스로 특정 기간 및 특정 인덱스의 로그를 출력하고 싶을 때 (커맨드라인 기반의 간단한 문법 제공)
- 검색 결과를 파일에 직접 리디렉션하고자 할 때
elktail 설치하는 방법
elktail 설치는 GitHub에서 제공하는 바이너리 파일을 다운로드하여 진행할 수 있습니다.
https://github.com/knes1/elktail
- 사용 전에 GO 언어 패키지가 시스템에 설치되어 있어야 합니다.
기본 Queries 및 사용법
다양한 쿼리와 옵션을 통해 로그를 효과적으로 검색할 수 있습니다.
- 특정 키워드 검색: `elktail keyword`
- 지정된 필드만 출력: `elktail -f '%@timestamp %log'`
- 특정 필드와 특정 단어 검색: `elktail event_id:5051`
- 여러 연산자(AND/OR)를 이용한 검색 쿼리: `elktail host:xxx.xxx AND level:error`
- Elasticsearch URL에 직접 접속: `elktail --url "http://xx.elasticsearchtest.com:9200"`
- 특정 인덱스 범위 지정: `elktail -i "winlogbeat-[0-9].*" host:BB003.xx.com`
- 지정 시간대 로그 검색:
- `-a`: 시작 시간 (after), `-b`: 종료 시간 (before)
- `elktail -a 2025-06-04T01:15 -b 2025-06-04T10:15`
추가적인 옵션은 `elktail --help` 명령어를 통해 확인할 수 있습니다.
elktail 활용 사례
특정 시간대의 로그를 검색하고 필요 정보만 출력하고자 할 때 예를 들어 다음과 같은 로그 이벤트를 찾고자 할때
6월 4일 00시부터 6월 4일 10시 15분까지의 기간 동안 발생한 Windows 이벤트 ID(1074, 6006, 5120, 6008)를 출력합니다(형식: 시간, 호스트 이름, 이벤트 ID, 메시지). 단, 출력 시간은 기본적으로 UTC 기준입니다.
서버 모니터링
윈도우 호스트 서버의 종료 또는 비정상 종료 이벤트를 모니터링할 수 있습니다.
- 윈도우 호스트 서버에서 주요 이벤트 ID를 winlogbeat를 통해 Elasticsearch에 저장.
- 특정 이벤트 ID를 elktail 스크립트로 감시.
- 이상 발생 시 이메일, Slack 등으로 알람 전송.
#!/bin/bash
DAY=`date +%Y`
DIR="/root/.../elktail"
clear
read -p "A few hours ago? : " TIMEs
read -p "Execution Query? : " QUERY
let TIMEs=$TIMEs+9
Before=`date +%Y-%m-%dT%H:%M -d ''${TIMEs}' hour ago'`
Current=`date +%Y-%m-%dT%H:%M`
elktail --url "http://10.100.112.15:9200" -n "10000" -a $Before -b $Current -i "SecurityEvent-[0-9].*" -l -f \
'%@timestamp %deviceHostName %deviceAction %source.country_code2 %sourceAddress %sourcePort %destination.country_code2 %destinationAddress %destinationPort %applicationProtocol %name %requestUrl %destinationHostName' \
''${QUERY}'' > $DIR/temp.txt
awk -F " " '{print $1}' $DIR/temp.txt | xargs -I {} date -d {} +'%s' | perl -pe 's/(\d+)/localtime($1)/e' > $DIR/paste01
awk '!($1="")' $DIR/temp.txt > $DIR/paste02
paste -d" " $DIR/paste01 $DIR/paste02 > $DIR/result.log
rm -f $DIR/temp* $DIR/paste*
cat $DIR/result.log
wc -l $DIR/result.log
exit 0
참고: Elasticsearch는 로그를 UTC 기준으로 저장하므로 환경 변수를 `export TZ=UTC`로 설정하여 로컬 시간대와 동기화하세요.
알림 방식으로는 이메일, Slack 외에도 기타 Push 알림 앱들을 사용할 수 있습니다.
인프라 장비 모니터링
스토리지나 스위치 등의 네트워크 장비에서 발생하는 로그 데이터를 다음과 같이 모니터링할 수 있습니다.
- 장비에서 생성된 로그를 rsyslog로 수집하여 filebeat -> logstash -> Elasticsearch에 저장.
- 특정 키워드가 발생하면 elktail 스크립트를 통해 실시간 감시 및 알림(alerting) 실행.
정리하자면, 인프라 시스템의 로그 데이터가 Elasticsearch에 제대로 저장되기만 하면, elktail 도구를 통해 간편하면서도 효과적인 방법으로 모니터링을 수행할 수 있습니다. CLI 기반 모드에서 elasticsearch에 명령행으로 쿼리를 할수 있는 유용한 도구 입니다.
'AI, IT 이야기' 카테고리의 다른 글
Elasticsearch Lucene Query 사용 사례 - 2편 (1) | 2025.06.10 |
---|---|
Elasticsearch Lucene Query 사용 사례 - 1편 (1) | 2025.06.10 |
대용량 SIEM Elasticsearch로 해결하세요 (0) | 2025.06.01 |
Arcsight & Elastic Stack 통합 SIEM 구축 사례 (0) | 2025.05.30 |
대용량 전처리 Logstash Filter 이렇게 사용해보세요 (0) | 2025.05.28 |