[AIOps 2] 이상 탐지 방법 선택: 규칙·통계에서 시계열 모델까지

심대용·4일 전

AIOps

목록 보기
2/5

이 글에서 다룰 주제

  • 탐지 문제 정의: 임계값 초과, 조합의 이상, 시간 순서의 이상은 어떻게 다른가?
  • 방법 선택: 통계 기준선·Isolation Forest·시계열 모델을 언제 비교할까?
  • 도입 판단: 복잡한 모델을 추가하기 전에 무엇을 측정해야 할까?

주요 단어 · 기준선 · MAD · EWMA · 계절성 · 잔차 · Isolation Forest · Autoencoder · 로그 템플릿


1편에서는 Isolation Forest가 드문 데이터 조합을 짧은 경로로 고립시키는 원리를 공부했다. 이제 질문을 넓혀 본다. CPU, 지연시간, 큐, 로그를 모두 같은 모델에 넣으면 될까?

모델을 고르기 전에 어떤 정상 패턴에서 무엇이 벗어났는지를 먼저 정의해야 한다. 이 글은 추가 학습 자료를 정리한 설계 노트다. 특정 모델의 운영 성능이나 도입 결과를 보고하는 글은 아니다.

문제 유형에 따라 기준선과 탐지 후보를 연결하는 선택 지도

그림 1. 위에서 아래로 읽는 선택 지도다. 방법의 우열이나 의무적인 발전 단계가 아니라, 데이터에 담긴 정보에 따른 후보군이다.

1. 문제 정의: 같은 값도 맥락에 따라 달라진다

이상 탐지는 정해 둔 기준이나 학습한 패턴에서 벗어난 관측을 찾는 작업이다. 이상이 곧 장애라는 뜻은 아니다.

가상의 비동기 작업 서비스를 생각해 보자. 큐에 대기 중인 작업이 늘었다는 사실만으로는 원인을 알기 어렵다.

관측 조합가능한 해석추가 확인
유입 증가, 완료량 증가, 오래된 작업의 대기시간 안정일시적인 정상 부하 증가 가능처리 용량과 예상 배치 일정
유입 비슷, 완료량 감소, 가장 오래된 작업의 대기시간 증가처리 정체 가능워커 상태, 외부 API, DB 대기
CPU 낮음, 큐 증가, 완료량 감소계산보다 대기에서 막힐 가능성연결 풀, 락, 네트워크, 외부 제한

세 번째 상황에서 CPU가 낮다는 이유로 정상이라고 판단하면 놓치는 것이 생긴다. 그렇다고 큐가 증가할 때마다 원인을 ‘외부 API’로 확정할 수도 없다. 탐지에 필요한 조합과 조사에 필요한 증거는 별도로 설계한다.

먼저 탐지 단위를 정한다. 예를 들어 서비스별 1분 구간을 한 행으로 두고 요청률, 오류 비율, p95 지연, 완료율, oldest_job_age를 피처로 만든다. 여기서 1분은 예시다. 실제 집계 간격은 장애 진행 속도와 수집 주기에 맞춰야 한다.

2. 기준선: 규칙과 통계부터 비교하는 이유

기준선(baseline)은 새 방법이 실제로 더 나은지 비교하기 위한 단순하고 명확한 출발점이다.

서비스의 제한이 명확하면 규칙이 유용하다. 디스크 여유 공간, 인증서 만료, 처리 마감시간처럼 의미가 분명한 조건을 굳이 비지도 모델에만 맡길 필요는 없다. 사용자 영향이 직접 드러나는 가용성·오류율 알림도 계속 필요하다.

2.1 이동 평균과 MAD

이동 평균은 최근 값의 중심을 쉽게 보여 주지만, 큰 이상값이 들어오면 기준 자체가 흔들릴 수 있다. 중앙값과 MAD는 극단적인 값에 덜 민감한 대안이다.

과거 창의 중앙값을 mm, 그 중앙값과의 절대 편차의 중앙값을 MADMAD라고 하자.

MAD=median⁡(∣xi−m∣)MAD = \operatorname{median}(|x_i-m|)

한 가지 비교 점수는 다음과 같다.

zt=∣xt−m∣max⁡(1.4826⋅MAD,ϵ)z_t = \frac{|x_t-m|}{\max(1.4826\cdot MAD,\epsilon)}

1.4826은 정규분포를 가정할 때 표준편차 척도와 맞추기 위한 계수다. 이 점수 자체가 장애 확률은 아니다. ϵ\epsilon은 분모가 0에 가까워지는 것을 막는 하한이며, 원래 지표와 같은 단위를 가져야 한다. 값이 거의 고정된 메트릭에 임의의 아주 작은 수를 넣으면 작은 변화도 과도하게 확대된다.

현재 값은 기준을 계산하는 과거 창에서 제외한다. 또한 오류 비율이 0% 근처인 지표에서는 양방향 편차보다 증가 방향만 보는 정책이 적합할 수 있다. 하한과 임계값은 정상 검증 구간과 운영 허용 오탐을 기준으로 정한다. SciPy MAD 문서

2.2 EWMA

EWMA(지수 가중 이동 평균)는 최근 관측에 더 큰 가중치를 주며 기준을 갱신하는 방법이다.

zt=αxt+(1−α)zt−1,0<α≤1z_t = \alpha x_t + (1-\alpha)z_{t-1},\quad 0<\alpha\le1

α\alpha가 크면 변화에 빨리 반응하고, 작으면 더 부드럽게 움직인다. 실제 탐지에서는 갱신 전 기준과 현재 값을 비교할지, EWMA 통계량에 관리 한계를 둘지까지 정해야 한다. 이 식 하나만으로 이상 판정이 완성되지는 않는다. 장애가 오래 지속될 때 기준이 장애 상태를 따라가 버리는지도 확인한다.

3. 계절성: 평소의 주기와 비교하기

계절성(seasonality)은 하루·요일처럼 반복되는 패턴이다. 잔차(residual)는 기준 모델이 설명한 부분을 제거하고 남은 차이다.

매일 정오에 요청량이 증가하는 서비스라면 단순한 고정 평균과의 비교는 반복적으로 알림을 만들 수 있다. 같은 요일·시간대의 기준이나 계절성을 반영한 모델을 후보로 둔다.

STL은 시계열을 추세·계절·나머지 성분으로 분해하는 방법이다. STL 분해 자체와 미래 예측은 구분해야 한다. statsmodels의 STLForecast처럼 분해와 예측 모델을 조합할 수 있지만, 과거 전체를 분해해 얻은 잔차를 실시간 탐지 성능으로 그대로 해석해서는 안 된다. 과거 시점에서 당시까지의 데이터만 사용할 수 있었는지 확인한다. statsmodels STL 문서

예측 기반 접근에서는 과거로 예측한 x^t\hat{x}_t와 실제 xtx_t의 차이를 점수로 만든다. 예측 오차가 시간대나 부하에 따라 다르면 하나의 고정 오차 임계값도 부적절할 수 있다. 예측 밴드를 사용하려면 그 밴드가 어느 정도의 실제 관측을 포함하는지 별도로 검증해야 한다.

4. 다변량과 순서: Isolation Forest에서 시계열 모델까지

다변량은 여러 지표를 함께 보는 것이다. 시계열 모델은 값뿐 아니라 과거와 현재의 시간 관계를 활용한다.

후보잘 맞을 수 있는 질문먼저 확인할 조건
Isolation Forest지금의 피처 조합이 과거 패턴에서 드문가?서비스별 분포, 시간 피처, 오염된 학습 데이터
예측 모델앞으로의 값이 얼마나 달라질까?예측 시점에 알 수 있는 입력만 사용
Autoencoder정상 패턴으로 학습한 복원이 얼마나 어려운가?스케일, 정상 학습 구간, 재구성 오차 임계값
LSTM·GRU·1D CNN·TCN최근 구간의 변화 순서나 모양이 다른가?창 길이, 시간 정렬, 결측, 계산 비용
시계열 Transformer더 긴 관계를 활용할 실익이 있는가?충분한 비교 데이터와 단순 기준선 대비 개선

Isolation Forest는 기본적으로 입력된 행의 피처를 본다. ‘지난 10분 동안 계속 증가했다’는 정보를 쓰려면 변화량·이동 통계·지연값 등으로 표현해야 한다. 모델의 단일 이상 점수만으로 CPU와 지연시간 각각의 정상 상·하한이 생기는 것은 아니다. scikit-learn IsolationForest 문서

Autoencoder는 입력을 압축하고 다시 복원하도록 학습하는 모델이다. 복원이 어려운 입력에 높은 재구성 오차를 줄 수 있지만, 이상도 잘 복원하거나 정상 변화를 낯설게 볼 수 있다. Autoencoder는 학습 목적과 구조의 한 부류이고, CNN·LSTM·Transformer는 내부 구조로 결합될 수 있다. 이 이름들을 모두 서로 배타적인 등급처럼 배열하면 혼동하기 쉽다.

또한 시계열 Transformer가 반드시 언어 모델인 것은 아니다. 숫자의 이상 점수를 계산하는 데 LLM이 필수는 아니며, LLM은 뒤에서 증거를 읽고 설명하는 별도의 역할을 맡길 수 있다.

5. 로그: 텍스트를 구조화한 다음 무엇을 탐지할까?

로그 템플릿은 여러 로그에서 변하는 값을 분리하고 반복되는 문장 구조를 묶은 것이다.

예를 들어 job 41 timeout과 job 93 timeout을 같은 템플릿으로 묶으면 시간당 발생 횟수를 비교할 수 있다. Drain3는 이런 스트리밍 템플릿 추출을 위한 도구다. 템플릿을 추출했다고 이상 판정이 자동으로 끝나는 것은 아니다. Drain3 공식 저장소

그다음 문제는 두 가지로 나뉜다.

  • 빈도 문제: 특정 오류 템플릿의 발생 비율이 평소보다 높은가?
  • 순서 문제: 시작 → 외부 호출 → 완료라는 정상 흐름에서 어떤 단계가 빠지거나 반복되는가?

순서를 볼 때 모든 서버의 로그를 시간순으로 합치면 서로 다른 작업이 섞인다. 작업·요청·트레이스 단위의 연결 키와 시간 기준을 먼저 정해야 한다. 템플릿 변경이 실제 장애인지, 배포로 로그 형식이 바뀐 것인지도 구분한다.

6. 검증: 복잡해지기 전에 개선의 근거를 남기기

평가 데이터는 시간순으로 학습·임계값 보정·테스트 구간을 나눈다. 정규화, 결측 처리, 계절 기준도 미래 데이터를 미리 읽지 않아야 한다. 여러 모델을 비교할 때 탐지 대상과 알림 정책을 맞춰야 모델 효과와 정책 효과가 섞이지 않는다.

확인할 것은 단순 정확도 하나가 아니다.

평가 대상볼 항목
탐지 품질놓친 장애, 장애별 첫 탐지 지연, 정상 기간의 불필요한 알림
알림 부담서비스·하루당 알림 수, 동일 사건의 중복 알림
데이터 품질결측·지연·새 서비스가 생겼을 때 판정 상태
운영 비용조회·피처 생성·추론·저장 각각의 시간과 자원

GPU 필요 여부도 모델 이름으로 결정하지 않는다. 학습과 추론을 나누어 측정하고, 전체 처리 시간에서 데이터 조회가 차지하는 비중을 본다. 이 시리즈에서는 CPU·메모리 권장 사양이나 모델별 성능 우열을 검증하지 않았다.

처음에는 명확한 규칙과 통계 기준선을 두고, 놓치는 사례가 무엇인지 수집한다. 다변량 조합이 문제라면 IF를, 시간 순서가 핵심이라면 시계열 모델을 비교한다. 복잡성을 추가하는 이유는 ‘더 고급 모델’이라는 이름이 아니라 실제 놓친 문제를 줄였다는 증거여야 한다.


학습 자료 기준: 2026-10-03 AIOps ML·Grafana 학습 정리와 위 공식 문서. 표의 후보군과 운영 판단은 학습 내용을 재구성한 설계 관점이며 실제 성능 순위가 아니다.

이전 · 1편: Isolation Forest 원리와 실습
다음 · 3편: Prometheus·Grafana 연계
전체 · AIOps 시리즈

profile
어제보다 더 성장하는 나

0개의 댓글