
Actualmente pongo el tráfico por hora (número total de solicitudes de entrada) de mi sitio web en una tabla MySQL. Mantengo datos de los últimos 90 días.
Quiero verificar cada hora, digamos la sexta hora, si el tráfico ha aumentado o disminuido más allá de algún umbral que el tráfico de la sexta hora de los últimos 7 días o de los últimos 30 días. Básicamente, veo un patrón de tráfico. Diferentes horas tienen diferentes valores.
Para generar alertas, quiero encontrar varias métricas estadísticas. Después de leer un poco, descubrí que Statsd
se puede utilizar para este propósito.
¿Es correcto utilizar cosas para enviar alertas como esta? ¿Existe alguna solución mejor o más sencilla para esto?
No tengo la intención de crear ningún panel de control.
Mis datos actuales se ven así:
+---------------------+---------------------+-----------+----------+
| 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 |
Respuesta1
Tal vezInflujoDBpuede ser interesante para ti. InfluxDB es una base de datos de series temporales.
Puede enviar sus datos directamente a InfluxDB a través de
- estadísticas
- interfaz binaria recopilada
- protocolo de grafito
- API DESCANSO
Puede consultar InfluxDB a través de REST-API y no necesita una interfaz gráfica. PeroGrafanaFunciona bien con eso.
Respuesta2
Puede utilizar el siguiente script SQL para comparar el tráfico.
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;
El script generará el informe basándose en el tráfico promedio de los últimos 30 días consultando test.traffic_stats
la tabla. Modifique el script para que coincida con sus requisitos. Ahora guarde este script SQL report.sql
y podrá usarlo Cron
para ejecutarlo a intervalos específicos usando la línea de comando mysql como se indica a continuación.
mysql -hhost -uuser -ppassword -s <report.sql | awk '{print $1}'
Esto extraerá el resultado y lo imprimirá en la salida estándar. Ahora puede utilizar GNU Mailutils para enviar la alerta a su dirección de correo electrónico.
mail -s "$(mysql -hhost -uuser -ppassword -s <report.sql | awk '{print $1}')" [email protected]