이상 탐지 모니터
이상 탐지 모니터 (Anomaly Monitors)
이상 탐지(anomaly detection)는 예측 가능한 패턴을 가진 메트릭을 시각화하고 모니터링하는 데 도움을 주는 기능이에요. 이 문서에서는 이상 탐지 모니터를 사용하면서 받는 질문(FAQ)과 답변을 다뤄요.
출처: 문서
본문
모든 것에 이상 탐지를 사용해야 하나요? (Should I use anomaly detection for everything?)
아니요. 이상 탐지는 예측 가능한 패턴을 가진 메트릭을 시각화하고 모니터링하는 데 도움을 줘요. 예를 들어 my_site.page_views{*}는 사용자 트래픽에 의해 결정되고 시간대와 요일에 따라 예측 가능하게 변하므로 이상 탐지에 아주 잘 맞아요.
참고: 이상 탐지가 좋은 예측을 하려면 과거 데이터가 필요해요. 메트릭을 몇 시간이나 며칠만 수집했다면 이상 탐지는 유용하지 않을 거예요.
대시보드에서 그룹에 이상 탐지를 사용할 수 없는 이유는 무엇인가요? (Why can't I use anomaly detection over groups in the dashboard?)
하나의 그래프에 많은 별도의 시계열을 추가하면 스파게티화(spaghettification)가 발생할 수 있고, 이상 탐지 시각화를 추가하면 문제가 더 심해져요:
{% image source="https://docs.dd-static.net/images/monitors/monitor_types/anomaly/spaghetti.b354625b1b6c62efa1ab364de120e806.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/monitors/monitor_types/anomaly/spaghetti.b354625b1b6c62efa1ab364de120e806.png?auto=format&fit=max&w=850&dpr=2 2x" alt="Spaghettification" /%}
하지만 단일 그래프에 여러 시리즈를 한 번에 하나씩 추가하는 것은 가능해요. 회색 밴드는 마우스오버 시에만 표시돼요:
{% image source="https://docs.dd-static.net/images/monitors/monitor_types/anomaly/anomaly_multilines.e0e2b1396d98c4e499045c7dcc188545.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/monitors/monitor_types/anomaly/anomaly_multilines.e0e2b1396d98c4e499045c7dcc188545.png?auto=format&fit=max&w=850&dpr=2 2x" alt="anomaly multi lines" /%}
과거의 이상 징후가 현재 예측에 영향을 주나요? (Do past anomalies affect the current predictions?)
basic을 제외한 모든 알고리즘은 방대한 양의 과거 데이터를 사용하므로 대부분의 이상 징후에 대해 견고해요. 첫 번째 그래프에서 메트릭이 0으로 떨어진 후에도 회색 밴드는 약 400K 근처에 머물러 있어요.
{% image source="https://docs.dd-static.net/images/monitors/monitor_types/anomaly/anomalous_history.9bce3b11ce1219bc4106a31f8f7a0104.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/monitors/monitor_types/anomaly/anomalous_history.9bce3b11ce1219bc4106a31f8f7a0104.png?auto=format&fit=max&w=850&dpr=2 2x" alt="anomalous_history" /%}
두 번째 그래프는 하루 후의 같은 메트릭을 보여줘요. 밴드를 계산할 때 전날 데이터를 사용하지만, 이전에 발생했던 이상 징후의 영향을 받지 않아요.
{% image source="https://docs.dd-static.net/images/monitors/monitor_types/anomaly/no_effect.0cb0a66a1810f9e175da63eb146d4672.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/monitors/monitor_types/anomaly/no_effect.0cb0a66a1810f9e175da63eb146d4672.png?auto=format&fit=max&w=850&dpr=2 2x" alt="no effect" /%}
확대하면 이상 징후가 "사라지는" 이유는 무엇인가요? (Why does an anomaly "disappear" when I zoom in?)
확대 수준이 다르면 같은 쿼리도 특성이 다른 시계열을 만들 수 있어요. 더 긴 기간을 보면 각 포인트는 더 세밀한 포인트 여러 개의 집계를 나타내요. 따라서 이 집계 포인트들이 더 세밀한 포인트에서 관찰된 노이즈를 숨길 수 있어요. 예를 들어 일주일을 보여주는 차트는 10분만 보여주는 차트보다 더 매끄럽게(노이즈가 적게) 보이는 경우가 많아요.
회색 밴드의 너비는 정확한 이상 모니터링의 핵심이에요. 밴드는 일반적인 노이즈가 대부분 밴드 안에 들어와 이상으로 보이지 않을 만큼 충분히 넓어야 해요. 하지만 밴드가 일반 노이즈를 포함할 만큼 넓다면, 특히 짧은 시간 창을 볼 때 일부 이상 징후도 숨길 수 있을 만큼 넓어질 수 있어요.
예를 들어 app.requests 메트릭은 노이즈가 많지만 평균값이 일정하게 8이라고 해볼게요. 어느 날 9:00부터 시작하는 10분간의 이상 기간이 있었고 그동안 메트릭의 평균값은 10이에요. 아래 그래프는 하루 시간 창을 가진 시리즈를 보여주며, 각 포인트는 5분을 요약해요.
{% image source="https://docs.dd-static.net/images/monitors/monitor_types/anomaly/disappearing_day.ab2e1facb480ab900a26ee7f95830239.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/monitors/monitor_types/anomaly/disappearing_day.ab2e1facb480ab900a26ee7f95830239.png?auto=format&fit=max&w=850&dpr=2 2x" alt="disappearing day" /%}
여기서 회색 밴드는 합리적으로 보여요. 시계열의 노이즈를 잡아낼 만큼 넓으면서도 9:00의 이상 징후가 뚜렷하게 드러나도록 충분히 좁아요. 다음 차트는 10분간의 이상 징후를 포함하는 30분 시간 창을 확대한 모습이며, 각 포인트는 10초를 요약해요.
{% image source="https://docs.dd-static.net/images/monitors/monitor_types/anomaly/disappearing_half_hour.cc6eaddbe2e5ff8955145cccd2ae66b4.png?auto=format&fit=max&w=850 1x, https://docs.dd-static.net/images/monitors/monitor_types/anomaly/disappearing_half_hour.cc6eaddbe2e5ff8955145cccd2ae66b4.png?auto=format&fit=max&w=850&dpr=2 2x" alt="disappearing half hour" /%}
여기서도 밴드는 합리적인 크기로 보여요. 8:509:00과 9:109:20의 비이상 데이터가 밴드 안에 들어 있기 때문이에요. 더 좁은 밴드는 정상 데이터를 이상으로 표시하기 시작할 거예요. 이 그래프의 밴드는 이전 그래프보다 약 8배 넓다는 점에 주목해요. 9:00~9:10의 이상 기간은 시리즈의 나머지와 다르게 보이지만, 밴드 밖으로 벗어날 만큼 극단적이지는 않아요.
일반적으로 확대했을 때 이상 징후가 사라진다면 그것이 이상이 아니라는 뜻은 아니에요. 확대된 화면에서 개별 포인트는 단독으로는 이상이 아니지만, 약간 비정상적인 포인트 여러 개가 함께 발생하는 것은 이상이라는 뜻이에요.
일부 함수를 이상 탐지와 결합하려고 하면 쿼리 파싱 오류가 발생하는 이유는 무엇인가요? (Why do I get a query parsing error when trying to combine some functions with anomaly detection?)
모든 함수가 anomalies() 함수 호출 안에 중첩될 수 있는 것은 아니에요. 특히 이상 탐지 모니터나 대시보드 쿼리에는 다음 함수를 포함할 수 없어요: cumsum(), integral(), outliers(), piecewise_constant(), robust_trend(), trend_line().
이상 탐지는 과거 데이터를 사용해 시리즈의 정상 동작 기준선(baseline)을 세워요. 위 함수들은 쿼리 창의 위치에 민감해요. 시리즈의 단일 타임스탬프 값은 쿼리 창에서 어디에 위치하느냐에 따라 크게 달라질 수 있어요. 이런 민감성 때문에 이상 탐지가 시리즈의 일관된 기준선을 결정하지 못하는 거예요.
적응형(adaptive) 알고리즘은 어떻게 됐나요? (What happened to the adaptive algorithm?)
Datadog는 더 이상 적응형(adaptive) 알고리즘을 사용하지 않도록 알고리즘을 발전시켰어요. adaptive 알고리즘을 사용하는 기존 모니터는 그대로 두며 계속 동작해요.
count_default_zero 인자는 무엇인가요? (What is the count_default_zero argument?)
이전에 Datadog는 count 메트릭을 게이지(gauge)로 취급해 보고된 포인트 사이를 보간(interpolate)했어요. 이제는 count 사이를 보간하지 않지만, 레거시 모니터의 경우 count_default_zero 인자로 이전 동작을 유지해요.
count 메트릭을 게이지로 취급하려면 어떻게 해야 하나요? (What if I want my count metric treated as a gauge?)
count 사이를 보간하지 않는 것은 count 메트릭이 오류(errors) 같은 것일 때 합리적이에요. 하지만 매시간 실행되는 정기 예약 작업이 있다면, 실행 사이에 메트릭이 0.0 값을 보고하지 않는 것이 더 합리적일 수 있어요. 이는 두 가지 방법으로 해결할 수 있어요:
- 롤업(rollup)을 1시간으로 설정해요 (Advanced Options 섹션에서 찾을 수 있어요).
- API로
count_default_zero='false'를 명시적으로 설정해요.
Advanced Options에서 롤업 간격을 설정하는 것과 쿼리에서 .rollup()으로 설정하는 것은 어떻게 다른가요? (How does setting the rollup interval in Advanced Options differ from setting it on the query using .rollup()?)
쿼리에 롤업을 명시적으로 설정하면 이상 모니터의 롤업 간격 옵션은 무시돼요.
값이 X보다 작으면 이상이어도 상관없는데, 그런 이상들을 무시할 수 있나요? (I don't care if my metric is anomalous if its value is less than X, can I somehow ignore those anomalies?)
A를 만들게요: 경계 위의 값에 대해 경보를 발생시키는 이상 모니터, 그리고 B: X보다 큰 값에서 트리거되는 임계값 경보를 가진 별도의 메트릭 모니터. 그다음 A && B에 대한 복합 모니터(composite monitor)를 만들면 돼요.
"alert and alert recovery criteria are such that the monitor can be simultaneously in alert and alert recovery states" 메시지로 모니터 저장이 막히는 이유는 무엇인가요?
alert와 alert recovery 기간에 서로 다른 창을 설정하면 모호한 상태가 발생할 수 있어요. alert와 alert recovery 창 크기는 둘이 동시에 충족될 수 없도록 설정해야 해요. 예를 들어 2시간 창에 대해 alert 임계값을 50%로 설정하고(즉, 경보를 트리거하려면 1시간이 이상이어야 함), 10분 창에 대해 복구 임계값(recovery threshold)을 50%로 설정하면(즉, 복구하려면 5분이 비이상이어야 함) alert와 alert recovery 상태가 동시에 트리거될 수 있어요. 마지막 5분이 비이상이지만 그 전 1시간이 이상이었다면, alert와 alert recovery가 둘 다 트리거돼요.
일광 절약 시간(daylight savings)은 이상 탐지 모니터에 어떤 영향을 주나요?
Datadog 모니터는 UTC 시간을 사용하며 기본적으로 로컬 시간대에 무관해요. 사용자 활동은 보통 사용자의 로컬 시간에 대해 일정하게 유지되므로, UTC 시간 기준으로 보면 이동(shift)이 발생해요. 이것이 예상치 못한 이상으로 감지될 수 있어요.
Datadog는 각 이상 탐지 모니터에 대해 시간대를 구성할 수 있게 해주며, 이 시간 이동을 자동으로 보정해줘요. 자세한 내용은 로컬 시간대를 반영하도록 이상 탐지 모니터 업데이트하기 문서를 참고해요.