StatusUpdates: Unterschied zwischen den Versionen

Aus Freifunk Potsdam | Wiki
Zur Navigation springen Zur Suche springen
(doku für serverseite angelegt)
(influx doku)
Zeile 45: Zeile 45:


==auf dem Server==
==auf dem Server==
===Quellcode===
Quellcode für den Server gibts auf [https://github.com/seth0r/ffp-monitor GitHub]
===Doku?===
Die Serversoftware fürs Parsen ist in Python geschrieben. InfluxDb wird für alles benutzt, das in Grafana angezeigt wird, für die Daten, die sicht nicht so oft ändern, und eher Statusinfos darstellen, wird eine MongoDb benutzt. Anlaufstelle für die Clients ist fffeed.wsgi, das über das Apache WSGI plugin auf die Webadresse /fff gemappt ist. fffeed.wsgi speichert die hochgeladenen Daten erst mal nur ab, das parsen übernehmen dann ein paar CronJobs:
* parseff1.py: parst alle hochgeladenen Dateien, füllt Daten in die InfluxDb und speichert den aktuelle Status in einer temporären Collection in der MongoDB
* parseff2.py: sammelt die Änderungen zusammen, aktualisiert die Statusinfos in der MongoDb und vermerkt die tatsächlichen Änderungen in einer extra Collection.
Damit wären alle Daten zusammen, die für Grafana und die APDB-Tabelle nötig sind.
<br>
Die Infos zu den Links für die Karte sind in der InfluxDB, die Abfrage daraus würde aber zu lange dauern, dafür gibt es:
* lperf.py: aggregiert aus der InfluxDb die Daten der Link Performance und speichert diese in der MongoDb zwischen.
Für die kompletten Pfade innerhalb den Netzwerks, die auf den ApInfo-Seiten angezeigt werden:
* routes.py: ermittelt die kürzesten Routen durch das Netzwerk für alle Router
Dann gibt es noch
* sendtweets.py: liest die Collection mit den Veränderungen und schickt Tweets, außerdem kann es Tagesstatistiken tweeten
===InfluxDb===
In der InfluxDb sind die folgenden Continuous Queries definiert:
<pre>
router_count_archive    CREATE CONTINUOUS QUERY router_count_archive ON freifunk
    RESAMPLE EVERY 1h FOR 1d
BEGIN
    SELECT max(count)
    INTO ffarchive."default".router_count
    FROM freifunk.twodays.router_count
    GROUP BY time(1h) fill(none)
END
router_count            CREATE CONTINUOUS QUERY router_count ON freifunk
    RESAMPLE EVERY 15m FOR 6h
BEGIN
    SELECT count(conn_tcp)
    INTO freifunk.twodays.router_count
    FROM freifunk."default".conn
    GROUP BY time(1m) fill(none)
END
last_dhcp              CREATE CONTINUOUS QUERY last_dhcp ON freifunk
    RESAMPLE EVERY 5m FOR 6h
BEGIN
    SELECT last(leases), max(leases), min(leases), mean(leases), median(leases)
    INTO freifunk.twodays.dhcp
    FROM freifunk."default".dhcp
    GROUP BY time(1h), network fill(none)
END
</pre>

Version vom 21. April 2017, 15:14 Uhr

auf den Routern

Grafana - Node Overview

Grafana ist eine grafische Übersichtsseite einzelner Nodes.

  • Systemlast
  • Arbeitsspeicher
  • CPU Auslastung
  • Netzwerkverbindungen
  • Verbunde Clients
  • DHCP Leases
  • Traffic

Um das Skript auf deinem Router zu installieren, verbinde dich via SSH mit deinem Router.

ssh root@Router-IP

Und führe folgenden Befehl aus (copy & paste).

wget -q -O /tmp/ffp-collect http://monitor.freifunk-potsdam.de/ffp-collect && chmod +x /tmp/ffp-collect && /tmp/ffp-collect install

Beim ersten Start werden alle Schnittstellen aufgelistet, unter denen gewählt werden kann, welche nicht mitgeschnitten werden sollen (z.B. private APs, normalerwise keine).
Beim Start des Scriptes werden drei CronJobs hinzugefügt:

  • collect: sammelt Daten (jede Minute)
  • upload: läd Daten hoch (alle 10 Minuten)
  • upgrade: läd die aktuelle Version dieses Scriptes herunter und installiert sie (zum 1. jeden Monat zu einer zufälligen Uhrzeit)

Weitere Befehle:

Skript updaten:

/etc/init.d/ffp-collect upgrade

Skript neu konfigurieren:

/etc/init.d/ffp-collect install

Skript stoppen (CronJobs werden entfernt):

/etc/init.d/ffp-collect stop

Skript starten (CronJobs werden hinzugefügt):

/etc/init.d/ffp-collect start

Skript aus Autostart entfernen:

/etc/init.d/ffp-collect disable

Skript in Autostart eintragen:

/etc/init.d/ffp-collect enable

Alle verbleibenden Daten manuell hochladen:

/etc/init.d/ffp-collect upload

Details

  • Das Script sammelt die Daten jede Minute in /tmp/collstat
  • Einmal alle 10 Minuten werden die Daten zum Server übertragen

auf dem Server

Quellcode

Quellcode für den Server gibts auf GitHub

Doku?

Die Serversoftware fürs Parsen ist in Python geschrieben. InfluxDb wird für alles benutzt, das in Grafana angezeigt wird, für die Daten, die sicht nicht so oft ändern, und eher Statusinfos darstellen, wird eine MongoDb benutzt. Anlaufstelle für die Clients ist fffeed.wsgi, das über das Apache WSGI plugin auf die Webadresse /fff gemappt ist. fffeed.wsgi speichert die hochgeladenen Daten erst mal nur ab, das parsen übernehmen dann ein paar CronJobs:

  • parseff1.py: parst alle hochgeladenen Dateien, füllt Daten in die InfluxDb und speichert den aktuelle Status in einer temporären Collection in der MongoDB
  • parseff2.py: sammelt die Änderungen zusammen, aktualisiert die Statusinfos in der MongoDb und vermerkt die tatsächlichen Änderungen in einer extra Collection.

Damit wären alle Daten zusammen, die für Grafana und die APDB-Tabelle nötig sind.
Die Infos zu den Links für die Karte sind in der InfluxDB, die Abfrage daraus würde aber zu lange dauern, dafür gibt es:

  • lperf.py: aggregiert aus der InfluxDb die Daten der Link Performance und speichert diese in der MongoDb zwischen.

Für die kompletten Pfade innerhalb den Netzwerks, die auf den ApInfo-Seiten angezeigt werden:

  • routes.py: ermittelt die kürzesten Routen durch das Netzwerk für alle Router

Dann gibt es noch

  • sendtweets.py: liest die Collection mit den Veränderungen und schickt Tweets, außerdem kann es Tagesstatistiken tweeten

InfluxDb

In der InfluxDb sind die folgenden Continuous Queries definiert:

router_count_archive    CREATE CONTINUOUS QUERY router_count_archive ON freifunk 
    RESAMPLE EVERY 1h FOR 1d 
BEGIN
    SELECT max(count) 
    INTO ffarchive."default".router_count 
    FROM freifunk.twodays.router_count 
    GROUP BY time(1h) fill(none)
END
router_count            CREATE CONTINUOUS QUERY router_count ON freifunk 
    RESAMPLE EVERY 15m FOR 6h 
BEGIN
    SELECT count(conn_tcp)
    INTO freifunk.twodays.router_count 
    FROM freifunk."default".conn 
    GROUP BY time(1m) fill(none)
END
last_dhcp               CREATE CONTINUOUS QUERY last_dhcp ON freifunk 
    RESAMPLE EVERY 5m FOR 6h 
BEGIN
    SELECT last(leases), max(leases), min(leases), mean(leases), median(leases) 
    INTO freifunk.twodays.dhcp 
    FROM freifunk."default".dhcp 
    GROUP BY time(1h), network fill(none)
END