Überwachung und Warnmeldungen für den Anwendungsverkehr

Überwachung und Warnmeldungen für den Anwendungsverkehr

Derzeit trage ich den stündlichen Datenverkehr (Gesamtzahl der Eingabeanfragen) meiner Website in eine MySQL-Tabelle ein. Ich behalte die Daten der letzten 90 Tage.

Ich möchte jede Stunde, sagen wir jede 6. Stunde, prüfen, ob der Verkehr im Vergleich zu den letzten 7 Tagen oder den letzten 30 Tagen (Verkehr in der 6. Stunde) über einen bestimmten Schwellenwert zugenommen/abgenommen hat. Im Grunde sehe ich ein Verkehrsmuster. Unterschiedliche Stunden haben unterschiedliche Werte.

Um Warnmeldungen zu generieren, möchte ich verschiedene statistische Kennzahlen ermitteln. Nachdem ich ein wenig gelesen hatte, fand ich heraus, dass diese Statsdzu diesem Zweck verwendet werden können.

Ist es richtig, solche Warnmeldungen zu versenden? Gibt es dafür eine bessere/einfachere Lösung?

Ich habe nicht vor, Dashboards zu erstellen.

Meine aktuellen Daten sehen wie folgt aus:

+---------------------+---------------------+-----------+----------+
| 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 |

Antwort1

VielleichtInfluxDBkönnte für Sie interessant sein. InfluxDB ist eine Zeitreihendatenbank.

Sie können Ihre Daten entweder direkt an InfluxDB senden über

  • Statistiken
  • Binäre Schnittstelle von collectd
  • Graphitprotokoll
  • REST API

Sie können InfluxDB über REST-API abfragen und benötigen dafür keine grafische Oberfläche. AberGrafanafunktioniert gut damit.

Antwort2

Sie können das folgende SQL-Skript verwenden, um den Datenverkehr zu vergleichen.

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;

Das Skript generiert den Bericht basierend auf dem durchschnittlichen Datenverkehr der letzten 30 Tage durch Abfragen test.traffic_statsder Tabelle. Bitte ändern Sie das Skript entsprechend Ihren Anforderungen. Speichern Sie dieses SQL-Skript nun unter report.sqlund Sie können Crones in bestimmten Intervallen mithilfe der MySQL-Befehlszeile wie unten angegeben ausführen.

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

Dadurch wird das Ergebnis extrahiert und auf stdout gedruckt. Jetzt können Sie GNU Mailutils verwenden, um die Warnung an Ihre E-Mail-Adresse zu senden.

mail -s "$(mysql -hhost -uuser -ppassword -s <report.sql | awk '{print $1}')" [email protected]

verwandte Informationen