Monitoramento e alerta para o tráfego de aplicativos

1

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

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

Para gerar alertas, quero encontrar várias métricas estatísticas. Depois de ler um pouco, descobri que Statsd pode ser usado para esse propósito.

É correto usar o envio de alertas como este? Existe alguma solução melhor / mais simples para isso?

Eu não pretendo criar nenhum painel de controle.

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 |
    
por Asmita 13.06.2015 / 17:13

2 respostas

0

Talvez o InfluxDB possa ser interessante para você. O InfluxDB é um banco de dados de séries temporais.

Você pode enviar seus dados diretamente para o InfluxDB por meio de

  • statsd
  • interface binária collectd
  • protocolo de grafite
  • API REST

Você pode consultar o InfluxDB por meio da API REST e não precisa de uma interface gráfica. Mas o Grafana funciona bem com isso.

    
por 13.06.2015 / 17:24
0

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 gerará o relatório com base no tráfego médio dos últimos 30 dias consultando test.traffic_stats table. Por favor, modifique o script para corresponder à sua exigência. Agora salve este script SQL como report.sql e você pode usar o Cron para executá-lo em intervalos específicos usando a linha de comando do mysql, conforme indicado abaixo.

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

Isso extrairá o resultado e será impresso no 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]
    
por 12.08.2015 / 11:11