기록 된 오류의 급증을 알고리즘 적으로 식별하는 간단한 방법


29

조기 경보 시스템이 필요합니다. 로드시 성능 문제가있는 것으로 알려진 서버를 처리하고 있습니다. 타임 스탬프와 함께 데이터베이스에 오류가 기록됩니다. 서버로드를 줄이기 위해 수행 할 수있는 몇 가지 수동 개입 단계가 있지만 누군가가 문제를 알고있는 경우에만 ...

오류가 발생한 일련의 시간이 주어지면 오류의 급증이 시작되는 시점을 어떻게 실시간으로 식별 할 수 있습니까? 주기적으로 또는 각 오류 발생을 계산할 수 있습니다.

때때로 발생하는 오류에 대해서는 걱정하지 않지만 특정 임계 값은 없습니다. 예를 들어 5 분 안에 3 개의 오류가 발생할 때마다 누군가에게 알릴 수는 있지만 더 좋은 방법이있을 것이라고 확신합니다.

sysadmins의 피드백을 기반으로 알고리즘의 감도를 조정할 수 있기를 원합니다. 현재로서는 오 탐지를 기대할 수 있음에도 불구하고 상당히 민감하기를 원합니다.

나는 통계학자가 아니며, 분명한 사실이며 SQL Server 및 기존 ASP JScript와 같은 기존 도구를 사용하여이를 구현하는 것이 비교적 간단해야합니다. 나는 코드에서 답을 찾고 있지 않지만 추가 소프트웨어가 필요하다면 아마도 우리에게 도움이되지 않을 것입니다 (비록 적지 만 이상적인 해결책은 의견으로, 내 호기심을 나타냅니다).


1
이것은 사람들에게 유용한 것으로 보이므로 제목을 그대로 두겠습니다. 그러나 "스파이크"가 오해의 소지가 있다고 생각합니다. 우리가 실제로 찾고 있던 것은 변곡점 또는 상대적 증가입니다.
dbenton

답변:


44

이 질문을 한 지 5 개월이 지났으며, 무언가를 알아 냈 으면 좋겠습니다. 다른 시나리오에서 사용할 수 있기를 바랍니다.

유스 케이스의 경우 스파이크 감지 알고리즘을 볼 필요가 없다고 생각합니다.

타임 라인에서 발생하는 오류에 대한 그림부터 시작하겠습니다.

에러 그래프

원하는 것은 숫자 표시기, 오류가 얼마나 빨리 발생하는지에 대한 "측정"입니다. 이 측정은 임계 값을 적용 할 수 있어야합니다. 시스템 관리자는 민감도 오류가 경고로 바뀌는 것을 제어 하는 제한을 설정할 수 있어야합니다 .

측정 1

스파이크를 얻는 가장 쉬운 방법은 "스파이크"를 언급 한 20 분 간격 으로 히스토그램 을 그리는 것입니다 .

오류 히스토그램

시스템 관리자는 막대의 높이, 즉 20 분 간격으로 허용되는 가장 큰 오류를 기준으로 감도를 설정합니다.

(이 시점에서 20 분의 창 길이를 조정할 수 없는지 궁금 할 수 있습니다. 창 길이는 함께 나타나는 문구 오류 에서 단어를 함께 정의하는 것으로 생각할 수 있습니다 .)

특정 시나리오에서이 방법의 문제점은 무엇입니까? 변수는 3보다 작은 정수일 것입니다. 임계 값을 1로 설정하면 알고리즘이 필요하지 않은 "모든 오류는 경고입니다"라는 의미이기 때문에 임계 값을 1로 설정하지 않습니다. 따라서 임계 값에 대한 선택은 2와 3이 될 것입니다. 이것은 시스템 관리자에게 세밀한 제어를 많이 제공하지는 않습니다.

측정 2

시간 창에서 오류를 계산하는 대신 현재 오류와 마지막 오류 사이의 시간 (분)을 추적하십시오. 이 값이 너무 작아지면 오류가 너무 자주 발생하여 경고를 발생시켜야합니다.

시차

시스템 관리자는 아마도 한계를 10 (즉, 오류가 10 분 미만으로 발생하는 경우 문제) 또는 20 분으로 설정합니다. 덜 중요한 시스템의 경우 30 분 정도 소요될 수 있습니다.

이 측정은 더 많은 유연성을 제공합니다. 작업 할 수있는 작은 값 집합이있는 측정 값 1과 달리 이제 20-30 개의 값을 제공하는 측정 값이 있습니다. 따라서 시스템 관리자는 미세 조정 범위가 더 넓어집니다.

친절한 조언

이 문제에 접근하는 또 다른 방법이 있습니다. 오류 빈도를 보지 않고 오류가 발생하기 전에 예측할 수 있습니다.

이 문제는 성능 문제가있는 것으로 알려진 단일 서버에서 발생한다고 언급했습니다. 해당 시스템의 특정 핵심 성능 표시기 를 모니터링 하고 오류가 발생할시기를 알려줄 수 있습니다. 특히 디스크 I / O와 관련된 CPU 사용량, 메모리 사용량 및 KPI를 살펴 봅니다. CPU 사용량이 80 %를 넘으면 시스템 속도가 느려집니다.

(여러분이 소프트웨어를 설치하고 싶지 않다고 말했지만 PerfMon을 사용하여이 작업을 수행 할 수 있다는 것은 사실입니다. 그러나 NagiosZenoss 와 같은 무료 도구가 있습니다 .)

시계열에서 스파이크 감지에 대한 정보를 찾기 위해 여기에 온 사람들에게 :

시계열에서의 스파이크 감지

x1,x2,...

Mk=(1α)Mk1+αxk

αxk

예를 들어, 새 값이 이동 평균에서 너무 멀리 떨어진 경우

xkMkMk>20%

그런 다음 경고를 발생시킵니다.

실시간 데이터로 작업 할 때 이동 평균이 좋습니다. 그러나 이미 테이블에 많은 데이터가 있고 스파이크를 찾기 위해 SQL 쿼리를 실행하려고한다고 가정하십시오.

내가 제안 할게:

  1. 시계열 의 평균값 계산
  2. 표준 편차 계산σ
  3. 2σ

시계열에 대한 더 재미있는 것들

  1. 많은 실제 시계열은 주기적으로 동작합니다. 시계열 에서 이러한주기를 추출하는 데 도움이되는 ARIMA 라는 모델 이 있습니다.

  2. 주기적 행동을 고려한 이동 평균 : Holt and Winters


철저하고 교육적인 답변에 감사드립니다. 우리는 저장 프로 시저를 작성하여 각 오류를 데이터베이스에 기록하고 마지막 X (5시에 정산) 분의 오류 수를 반환했습니다. 해당 숫자가 임계 값 (Y)을 초과하면 경고 이메일이 전송되었습니다. 우리는 만족할 때까지 실험으로 임계 값을 조정했습니다. 내가 그것을하고 있다면, 더 세분화되도록 오류 사이의 시간 계산에 대한 제안을 통합 할 것입니다.
dbenton

8
명예의 전당 답변, 박수 . 이것을지지하기 위해서만이 커뮤니티에 가입했습니다.
wesanyer

3

통계적 공정 제어의 경우 +1, 단계별 감지 에 대한 유용한 정보가 있습니다 .

SPC의 경우 Western Electric Rules 또는 Nelson Rules 구현을 작성하는 것은 그리 어렵지 않습니다 .

SQL Server에서 USP를 만들어 데이터 세트를 반복하고 인접한 포인트를 사용하여 규칙에 대해 각 포인트를 ping하십시오. 시간별로 오류 수를 요약하십시오 (필요에 따라 다름).


이런 종류의 질문은 스택 오버플로에 잠시 동안 게시 한 질문과 관련이 있습니다 (도움이되면 빠른 답변을 보았습니다). .SQL Server 2008 R2의 통계 프로세스 제어 차트


2

에 대한 검색 온라인 탐지 알고리즘 이 시작됩니다.

stackoverflow에있는 자세한 정보 : 스택 오버 플로우 측정 된 신호의 피크 Dection

순진한 피크 감지 루틴의 파이썬 구현은 github 에서 찾을 수 있습니다.


온라인 감지 알고리즘을 검색 했으며 대부분 내 머리 위에있는 학술 기사를 찾았습니다. 그들은 대답을 가질 수 있지만, 나의 개인적인 "간단한"테스트를 통과하지는 않습니다. 내가 틀렸다면 수정하지만 피크 탐지 알고리즘을 찾고 있다고 생각하지 않습니다. 오류가 정점에 도달하면 정의상 최악의 문제를 개선 할 수있는 기회를 놓친 것 같습니다. "스파이크"사용이 혼란 스러우면 사과드립니다. 지속적인 오류 증가를 예측하거나 큰 단계를 파악해야한다고 생각합니다.
dbenton

1

통계적 공정 제어를보고 싶을 수도 있습니다. 또는 시계열 모니터링. 이 방향으로 많은 작업이 있으며 최적의 대답은 정확히 현재 수행중인 작업에 따라 크게 달라집니다 (변칙 등을 감지하기 전에 매년 또는 매주 계절에 따라 부하를 필터링해야 함).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.