Monitoreo y alertas para el tráfico de aplicaciones.

Monitoreo y alertas para el tráfico de aplicaciones.

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 Statsdse 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_statsla tabla. Modifique el script para que coincida con sus requisitos. Ahora guarde este script SQL report.sqly podrá usarlo Cronpara 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]

información relacionada