sonar-replay-batch-rules
과거 시간 범위에 대해 배치 룰을 리플레이합니다. 지정한 범위에서 배치 룰의 cron 실행 시점을 모두 추출합니다. 기본 동작은 실행 계획만 출력하는 dry run이며, run=t 옵션을 지정하면 각 실행 시점 기준으로 탐지 쿼리를 실제로 실행하고 이벤트와 티켓을 발생시킵니다.
제약: 관리자 권한이 필요하며 스탠바이 노드에서는 run=t가 거부됩니다. 이벤트는 각 실행 시점의 과거 시각으로 기록되지만, 티켓의 생성/변경 일시는 현재 시각으로 남습니다. 축약 구간은 리플레이 범위 안에서만 시뮬레이션되며 운영 중인 축약 상태와는 독립적입니다. 시그니처/ETIR 위험도 스코어링은 적용되지 않습니다. 룰 쿼리의 now(), ago(), duration= 표현식은 각 실행 시점 기준 상수로 치환됩니다.
sonar-replay-batch-rules [from=값] [to=값] [duration=값] [guids=값] [run=값] [limit=값]
- from=값
- 선택. 리플레이 범위 시작 시각 (yyyyMMddHHmmss). from 또는 duration을 지정하세요.
- to=값
- 선택. 리플레이 범위 종료 시각 (yyyyMMddHHmmss, 기본값: 현재). 미래 시각은 현재로 절사됩니다. 범위는 최대 366일로 제한됩니다.
- duration=값
- 선택. 리플레이 범위 (현재 기준, 예: 7d). from 또는 duration을 지정하세요.
- guids=값
- 선택. 쉼표로 구분한 배치 룰 GUID 목록 (기본값: 활성화된 전체 배치 룰)
- run=값
- 선택. t로 지정하면 탐지 쿼리를 실제로 실행하고 이벤트와 티켓을 발생시킵니다 (기본값: f, dry run). 이벤트는 각 실행 시점의 과거 시각으로 발생하고, 축약 구간도 실행 시점 기준으로 시뮬레이션됩니다. 리플레이로 생성되는 티켓은 실제 티켓이므로 주의하세요.
- limit=값
- 선택. (룰, 실행 시점) 조합의 최대 개수 (기본값: 10000)
출력 필드
| 필드 | 타입 | 이름 | 설명 |
|---|---|---|---|
| rule_id | 32비트 정수 | 룰 ID | 예: 1 |
| rule_guid | 문자열 | 룰 GUID | 예: 550e8400-e29b-41d4-a716-446655440000 |
| rule_name | 문자열 | 룰 이름 | 예: 로그인 실패 탐지 |
| enabled | 불리언 | 활성화 여부 | 예: true |
| schedule | 문자열 | 실행 주기 | 예: */5 * * * * |
| fire_time | 날짜 | 실행 시점 | 예: 2026-09-01 00:05:00 |
| query_from | 날짜 | 쿼리 from 상수 | 예: 2026-09-01 00:00:00, 룰에 duration 미설정 시 null |
| query_to | 날짜 | 쿼리 to 상수 | 예: 2026-09-01 00:05:00 |
| duration | 32비트 정수 | 룰 조회 구간 (초) | 예: 300 |
| datetrunc | 32비트 정수 | 룰 시각 절사 단위 (초) | 예: 60 |
| dataset_guid | 문자열 | 데이터셋 GUID | 예: 550e8400-e29b-41d4-a716-446655440000, 쿼리 직접 입력 룰이면 null |
| query | 문자열 | 리플레이 쿼리 | 실행될 최종 쿼리 (sort 절 포함). now(), ago() 호출은 상수 참조로 치환됩니다. |
| constants | 맵 | 주입 상수 | 예: {NOW=2026-09-01 00:05:00}. 리플레이 시 쿼리 컨텍스트에 주입되는 상수입니다. |
| rewrite_warnings | 리스트 | 치환 경고 | 예: [ago() with non-literal argument, not replaced] |
| suppress_key | 문자열 | 억제 키 | 예: account |
| status | 문자열 | 리플레이 상태 | 예: success. success, error, cancelled 중 하나. run=t일 때만 출력됩니다. |
| result_count | 64비트 정수 | 쿼리 결과 건수 | 예: 10. run=t일 때만 출력됩니다. |
| alert_count | 32비트 정수 | 경보 건수 | 예: 3. 억제 키 단위로 병합된 경보 개수. run=t일 때만 출력됩니다. |
| ticket_count | 32비트 정수 | 티켓 건수 | 예: 3. 대응 처리된 경보에 연결된 고유 티켓 개수. 룰의 티켓 발행 조건에 따라 티켓이 발행되지 않을 수 있고, 억제 병합 시 신규 생성 대신 기존 티켓이 갱신됩니다. run=t일 때만 출력됩니다. |
| raw_count | 32비트 정수 | 근거 로그 건수 | 예: 10. 근거 로그 테이블에 기록된 행 수. run=t일 때만 출력됩니다. |
| suppressed_count | 32비트 정수 | 억제 건수 | 예: 2. 이벤트 억제로 건너뛴 행 수. run=t일 때만 출력됩니다. |
| elapsed_ms | 64비트 정수 | 소요 시간 (밀리초) | 예: 1234. run=t일 때만 출력됩니다. |
| ticket_guids | 리스트 | 티켓 GUID 목록 | 예: [550e8400-e29b-41d4-a716-446655440000]. 대응 처리된 경보에 연결된 고유 티켓 GUID 목록. run=t일 때만 출력됩니다. |
| _error | 문자열 | 오류 메시지 | 예: dataset not found. 실패한 항목에만 출력됩니다. |