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]