Monitoramento e alertas para tráfego de aplicativos

Monitoramento e alertas para tráfego de aplicativos

Atualmente coloco o tráfego por hora (número total de solicitações de entrada) do meu site em uma tabela MySQL. Eu mantenho os dados dos últimos 90 dias.

Quero verificar a cada hora, digamos na 6ª hora, se o tráfego aumentou/diminuiu além de algum limite nos últimos 7 dias ou nos últimos 30 dias no tráfego da 6ª hora. Basicamente, vejo um padrão de tráfego. Horas diferentes têm valores diferentes.

Para gerar alertas, quero encontrar diversas métricas estatísticas. Depois de ler um pouco, descobri que Statsdpode ser usado para esse fim.

São coisas corretas para enviar alertas como este? Existe alguma solução melhor/mais simples para isso?

Não pretendo construir nenhum painel.

Meus dados atuais são assim:

+---------------------+---------------------+-----------+----------+
| startTime           | endTime             | component | traffic  |
+---------------------+---------------------+-----------+----------+
| 2015-05-01 00:00:00 | 2015-05-01 01:00:00 | rest      | 29090345 |
| 2015-05-01 01:00:00 | 2015-05-01 02:00:00 | rest      | 32224087 |
| 2015-05-01 02:00:00 | 2015-05-01 03:00:00 | rest      | 35165799 |
| 2015-05-01 03:00:00 | 2015-05-01 04:00:00 | rest      | 36903464 |
| 2015-05-01 04:00:00 | 2015-05-01 05:00:00 | rest      | 40394130 |
| 2015-05-01 05:00:00 | 2015-05-01 06:00:00 | rest      | 44874862 |
| 2015-05-01 06:00:00 | 2015-05-01 07:00:00 | rest      | 49988600 |
| 2015-05-01 07:00:00 | 2015-05-01 08:00:00 | rest      | 52240544 |
| 2015-05-01 08:00:00 | 2015-05-01 09:00:00 | rest      | 54517705 |
| 2015-05-01 09:00:00 | 2015-05-01 10:00:00 | rest      | 55277967 |
| 2015-05-01 10:00:00 | 2015-05-01 11:00:00 | rest      | 55285309 |
| 2015-05-01 11:00:00 | 2015-05-01 12:00:00 | rest      | 55572614 |

Responder1

TalvezInfluxoDBpode ser interessante para você. InfluxDB é um banco de dados de série temporal.

Você pode enviar seus dados diretamente para o InfluxDB via

  • estatísticas
  • interface binária coletada
  • protocolo de grafite
  • API REST

Você pode consultar o InfluxDB via REST-API e não precisa de uma interface gráfica. MasGrafanafunciona bem com isso.

Responder2

Você pode usar o seguinte script SQL para comparar o tráfego.

set @threshold = 50;  /*threshold for comparing the traffic*/
set @limit = 30  /*how many days to consider while generating avg value*/

/*calculate the time range, comparison is done for the last hour*/
set @end_time = current_timestamp();  
set @end_time = timestamp(date(@end_time), maketime(hour(@end_time), 0, 0));
set @start_time = date_sub(@end_time, interval 1 hour);

/*find out the traffic for the last hour*/
select traffic
        from test.traffic_stats
        where startTime >= @start_time
            and endTime <= @end_time
    into @curr_traffic;

/*now find out the avg traffic for the past @limit days*/
select ifnull(avg(traffic), 0)
        from test.traffic_stats
        where startTime < @start_time
            and startTime >= date_sub(@start_time, interval @limit day)
            and time(startTime) >= time(@start_time)
            and time(endTime) <= time(@end_time)
    into @avg_traffic;

/*generate the report*/
select concat(
        'Current traffic '
        @curr_traffic,
        ' is '
        if(@curr_traffic > @avg_traffic + @threshold,
            'more',
            if(@curr_traffic < @avg_traffic - @threshold,
                'less',
                'same'
            )
        ), 
        ' compared to the avg traffic ', 
        @avg_traffic
    ) as result;

O script irá gerar o relatório com base no tráfego médio dos últimos 30 dias consultando test.traffic_statsa tabela. Modifique o script para atender às suas necessidades. Agora salve este script SQL como report.sqle você pode usá- Cronlo para executá-lo em intervalos específicos usando a linha de comando mysql conforme fornecido abaixo.

mysql -hhost -uuser -ppassword -s <report.sql | awk '{print $1}'

Isso extrairá o resultado e imprimirá em stdout. Agora você pode usar o GNU Mailutils para enviar o alerta para o seu endereço de e-mail.

mail -s "$(mysql -hhost -uuser -ppassword -s <report.sql | awk '{print $1}')" [email protected]

informação relacionada