Já se passaram 5 meses desde que você fez essa pergunta e, esperançosamente, descobriu alguma coisa. Vou fazer algumas sugestões diferentes aqui, esperando que você encontre alguma utilidade para elas em outros cenários.
Para o seu caso de uso, acho que você não precisa procurar algoritmos de detecção de pico.
Então, aqui vai: Vamos começar com uma imagem dos erros que ocorrem em uma linha do tempo:
O que você deseja é um indicador numérico, uma "medida" da rapidez com que os erros estão chegando. E essa medida deve ser passível de limiar - seus administradores de sistema devem poder definir limites que controlam com que erros de sensibilidade se transformam em avisos.
Medida 1
Você mencionou "picos", a maneira mais fácil de obter um pico é desenhar um histograma a cada intervalo de 20 minutos:
Seus administradores de sistema definiriam a sensibilidade com base nas alturas das barras, ou seja, os erros mais toleráveis em um intervalo de 20 minutos.
(Nesse ponto, você deve estar se perguntando se esse tamanho de janela de 20 minutos não pode ser ajustado. Pode, e você pode pensar no tamanho da janela como definindo a palavra juntos nos erros de frase que aparecem juntos .)
Qual é o problema com esse método para o seu cenário específico? Bem, sua variável é um número inteiro, provavelmente menor que 3. Você não definiria seu limite como 1, pois isso significa apenas "todo erro é um aviso" que não requer um algoritmo. Portanto, suas escolhas para o limite serão 2 e 3. Isso não dá a seus administradores de sistema muito controle refinado.
Medida 2
Em vez de contar erros em uma janela de tempo, acompanhe o número de minutos entre o erro atual e o último. Quando esse valor fica muito pequeno, significa que seus erros estão ficando muito frequentes e você precisa emitir um aviso.
Seus administradores de sistema provavelmente definirão o limite em 10 (ou seja, se ocorrerem erros com menos de 10 minutos de diferença, é um problema) ou 20 minutos. Talvez 30 minutos para um sistema menos crítico.
Essa medida fornece mais flexibilidade. Ao contrário da Medida 1, para a qual havia um pequeno conjunto de valores com os quais você poderia trabalhar, agora você tem uma medida que fornece bons valores de 20 a 30. Seus administradores de sistema terão, portanto, mais possibilidades de ajuste fino.
Conselho Amigável
Há outra maneira de abordar esse problema. Em vez de observar as frequências de erro, pode ser possível prever os erros antes que eles ocorram.
Você mencionou que esse comportamento estava ocorrendo em um único servidor, que é conhecido por ter problemas de desempenho. Você pode monitorar certos indicadores-chave de desempenho nessa máquina e pedir que eles avisem quando um erro ocorrerá. Especificamente, você examinaria o uso da CPU, o uso da memória e os KPIs relacionados à E / S de disco. Se o uso da CPU ultrapassar 80%, o sistema ficará mais lento.
(Eu sei que você disse que não queria instalar nenhum software, e é verdade que você pode fazer isso usando o PerfMon. Mas existem ferramentas gratuitas por aí que farão isso por você, como Nagios e Zenoss .)
E para as pessoas que vieram aqui na esperança de encontrar algo sobre a detecção de picos em uma série temporal:
Detecção de pico em uma série temporal
A coisa mais simples que você deve começar é calcular uma média móvel dos seus valores de entrada. Se sua série é , você calcula uma média móvel após cada observação como:x1,x2,...
Mk=(1−α)Mk−1+αxk
onde o determinaria quanto peso forneceria o valor mais recente de .αxk
Se seu novo valor se afastou muito da média móvel, por exemplo
xk−MkMk>20%
então você levanta um aviso.
As médias móveis são boas quando se trabalha com dados em tempo real. Mas suponha que você já tenha um monte de dados em uma tabela e só queira executar consultas SQL para encontrar os picos.
Eu sugeriria:
- Calcule o valor médio de suas séries temporais
- Calcular o desvio padrão σ
- Isole os valores acima de acima da média (pode ser necessário ajustar o fator "2")2σ
Mais coisas divertidas sobre séries temporais
Muitas séries temporais do mundo real exibem comportamento cíclico. Existe um modelo chamado ARIMA que ajuda a extrair esses ciclos de suas séries temporais.
Médias móveis que levam em consideração o comportamento cíclico: Holt e Winters