시나리오 제작 관련 문의가 있어 추가 확인 요청드리고자 문의드립니다.
SNR 3.0 버전을 사용 중입니다.
작년에 경남은행 측 담당자분께서 센트리(Sentry)의 특정 프로세스가 다운되었을 때 티켓이 발생되도록 하고 싶다는 요청을 주셔서, 관련 시나리오를 제작한 바 있습니다.
기존 프로세스 다운 로직은 프로세스 목록을 수집한 뒤, 룩업으로 관리 중인 sentry process 목록과 rightonly join을 이용하여 특정 프로세스가 존재하지 않을 경우 프로세스 다운 티켓이 발생되도록 구성하였습니다.
이후 지난주 담당자분께서 추가적으로 "프로세스가 다시 복구되었을 경우에도 별도의 티켓을 발생시키고 싶다"는 요청을 주셨습니다.
사내 테스트 진행 시, evtctx를 활용하는 방향으로 로직을 구상하였습니다.
우선 프로세스 다운 시나리오 마지막에 아래와 같이 evtctxadd를 추가하여:
| evtctxadd expire=10m topic=sentry_process_down key=name isnotnull(name)
프로세스 다운 이벤트 컨텍스트를 10분 동안 유지하도록 설정하였습니다.
이후 해당 evtctx와 실제 process 수집 테이블을 join하여 _time 값을 비교하고, 최근 수집 로그에서 해당 프로세스가 존재하지 않다가 다시 프로세스가 살아나 로그가 발생할 경우 “프로세스 복구” 티켓이 발생되도록 로직을 구성하였습니다.
아래는 프로세스 복구 관련 테스트 쿼리입니다.
# sentry_process_down 이벤트 컨텍스트 조회 및 가공
| evtctxlist topic=sentry_process_down
| explode rows
| parsemap field=rows overlay=t
| fields created, guid, name, rule_result, counter
# sentry_process 테이블과 JOIN (_time 값 확인 목적)
| join type=left name [
table sentry_process
| sort limit=1 -_time by name
| fields _time, guid, name
search name!=“firewalld”
]
| eval result=if(isnull(_time), “프로세스 다운”, “프로세스 복구”)
| eval date_diff=datediff(_time, created, “min”)
| eval rule_result=concat("[헬스체크] ", guid, " ", date_diff, "분 내 ", result, " :: 프로세스 → ", name)
| search result==“프로세스 복구”
위 테스트에서는 firewalld 프로세스를 search 조건으로 제외하여 프로세스 다운 상황을 가정하였습니다.
현재 위와 같은 방향으로 시나리오를 구상 중인데, 혹시 수정하거나 보완하면 좋을 부분이 있을지 문의드립니다.
또한 다른 고객사에서 유사한 요구사항이 있었던 사례가 있는지, 있다면 어떤 방식으로 구현하였는지 관련 이력이나 사례도 함께 공유받을 수 있다면 감사하겠습니다.
확인 부탁드립니다.
감사합니다.