
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 Statsd
pode 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_stats
a tabela. Modifique o script para atender às suas necessidades. Agora salve este script SQL como report.sql
e você pode usá- Cron
lo 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]