154 lines
9.4 KiB
TeX
154 lines
9.4 KiB
TeX
\section{{InfluxDB}}
|
|
|
|
InfluxDB ist eine in Go geschreiben open source \gls{TSDB} die darauf ausgelegt ist mit großen Menge an Time Series Data zu arbeiten.\footnote{\cite[vgl.][]{dbranking}}
|
|
In Kapitel 4 dieser Arbeit wird am Beispeil von Wetterdaten gezeigt wie mit InfluxDB gearbeitet wird. InfluxDB stellt für die integration in eigene Anwendungen
|
|
ein \gls{HTTP} \gls{API} zur verfügung für die es in vielen Programmiersprachen Client Librarys gibt. Außerdem wird ein Webinterface und ein \gls{CLI} bereitgestellt.
|
|
\footnote{\cite[vgl.][]{InfluxAPI}}
|
|
|
|
%\subsection{{Installation}}
|
|
|
|
%\subsection{InfluxDB Webinterface}
|
|
|
|
%InfluxDB stellt für die einfache Verwaltung ein Web \gls{UI} zur verfügung. In diesem Interface ist es möglich
|
|
|
|
\subsection{{Daten einfügen}}
|
|
|
|
In InfluxDB werden Daten immer in Buckets gespeichert. Um Daten hochzuladen muss zunächst erst einmal ein Bucket angelegt werden. Dazu gibt es zwei
|
|
Möglichkeiten. Die einfachste ist es über das Web \gls{UI} von InfluxDB einen neuen Bucket anzulegen. Dazu muss nach dem Login der Navigationspunkt Data
|
|
und der Reiter Buckets ausgewählt werden. Hier kann dann mit dem Button Create Bucket ein neuer Bucket angelegt werden. Bein anlegen kann noch eine
|
|
Lebensdauer für die Daten ausgewählt werden nach welcher die jeweiligen Datenpunkte gelöscht werden.\footnote{vgl. \cref{fig:dashboard}, \cref{fig:load-data-source}, \cref{fig:load-data-bucket}, \cref{fig:load-data-add-bucket}}
|
|
|
|
Daten werden immer nach dem InfluxDB Line Protokoll formatiert an die Datenbank gesendet. Das Protokoll ist wie in Listing~\ref{list:lineproto}
|
|
dargestellt aufgebaut. Im ersten Teil des Line Protokolls wird der Name der Messreihe angegeben. Das kann zum Beispiel der Name des Sensors sein oder
|
|
der Ort an dem der Messwert genommen wurde. Wichtig ist, dass groß und Kleinschreibung beachtete werden muss und Unterstriche nicht
|
|
genutzt werden dürfen. Sonderzeichen müssen mit einem %\textbackslash
|
|
maskiert werden. Nach dem Namen kommen getrennt durch ein Komma die Tags der Messung.
|
|
Tags werden indexiert und dazu genutzt um Messwerte zu durchsuchen. Tags werden als Key Value Paar angegeben. Hier sollen Metadaten wie
|
|
zum Beispiel der Standort des Sensors oder der Name des Servers einzutragen werden zu dem die Datenpunkt/e gehören. Die eigentlichen Werte sind mit einem
|
|
Leerzeichen von den Tags abgegrenzt und bestehen aus durch Kommas getrennte Key Value Feldern. Der letzte Wert einer Zeile ist der Unix Timestamp in Millisekunden.
|
|
In einer Datei oder anfrage kann es mehrere Zeilen mit Daten geben.\footnote{\cite[vgl.][]{InfluxDBLineProtolkoll}}
|
|
%Quelle https://docs.influxdata.com/influxdb/v2.2/reference/syntax/line-protocol/
|
|
%Quelle https://docs.influxdata.com/influxdb/v2.2/reference/syntax/line-protocol/#naming-restrictions
|
|
|
|
\begin{figure}[bht]
|
|
\begin{lstlisting}[caption=InfluxDB Line Protokoll {Quelle: \cite[][]{InfluxDBLineProtolkoll}}, label=list:lineproto]
|
|
measurementName,tagKey=tagValue fieldKey="fieldValue" 1465839830100400200
|
|
--------------- --------------- --------------------- -------------------
|
|
| | | |
|
|
Measurement Tag set Field set Timestamp
|
|
\end{lstlisting}
|
|
\end{figure}
|
|
%Quelle https://docs.influxdata.com/influxdb/v2.2/reference/syntax/line-protocol/
|
|
%Quelle https://docs.influxdata.com/influxdb/v2.2/reference/syntax/line-protocol/#naming-restrictions
|
|
|
|
Die im Line Protokoll formatierten Daten können jetzt entweder mithilfe eines Rest Requests oder des InfluxDB \gls{CLI} in die Datenbank übertragen werden.
|
|
Um diese Anfragen zu Autorisieren muss ein \gls{API} Token mitgesendet werden.\footnote{\cite[vgl.][]{InfluxDBWriteAPI}}
|
|
Um einen Token zu bekommen kann dieser entweder über das Webinterface, die \gls{CLI} oder über die \gls{API} angelget werden. Der einfachste Weg ist es
|
|
den Token über das Webinterface anzulegen. Dazu wird wie beim anlegen eines Buckets zunächst der Menüpunkt Data ausgewählt und anschließend der Reiter API
|
|
Tokens. Mit einem Klick auf Generate API Token kann dann ein API Token erstellt werden.\footnote{vgl. \cref{fig:dashboard}, \cref{fig:load-data-source}, \cref{fig:load-data-api-token}, \cref{fig:load-data-add-token}}
|
|
Dabei kann zwischen einem All-Access token und einem Read/Write token ausgewählt werden. Mit dem All Access Token kann auf alles zugegriffen werden.
|
|
Mit einem Read/Write Token kann wie in \cref{fig:load-data-add-token} zu sehen ausgewählt werden auf welchen Bucket geschrieben oder gelesen werden kann.
|
|
\footnote{\cite[vgl.][]{InfluxDBToken}}
|
|
|
|
|
|
|
|
|
|
|
|
%https://docs.influxdata.com/influxdb/cloud/security/tokens/#all-access-token
|
|
|
|
\subsection{{Daten abrufen}}
|
|
|
|
%InfluxDB QUerrys
|
|
|
|
\subsection{{Daten verarbeiten und Visualisieren}}
|
|
|
|
%InfluxDB Tasks
|
|
% InfluxDB Graphen
|
|
|
|
\subsection{{weitere InfluxDB-Funktionen}}
|
|
|
|
% Monitoring und Alamierung mit InfluxDB
|
|
% InfluxDB Notebooks
|
|
|
|
|
|
\subsection{{Wetterdaten}}
|
|
|
|
\subsubsection{{Wetterdaten Aufbau}}
|
|
|
|
Die Wetterdaten des DWD können über den CDC OpenData Bereich heruntergeladen werden. Hier werden die Wetterdaten über FTP und HTTPS zum Download angeboten.
|
|
Unter der URL \url{https://www.dwd.de/DE/leistungen/cdc/cdc_ueberblick-klimadaten.html} wird eine gute übersicht über die zum Download angeboten Daten geboten.
|
|
|
|
Die Werte für die aktuelle Lufttemperatur können über \url{https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/10_minutes/air_temperature/now/}
|
|
abgerufen werden. Historische Daten können über \url{https://opendata.dwd.de/climate_environment/CDC/observations_germany/climate/10_minutes/air_temperature/now/}
|
|
abgerufen werden.
|
|
|
|
Aktuell werden auf der Webseite für die aktuelle Lufttemperatur ca 480 Datein zum Download angeboten. Die meisten dieser Datein entspricht einer Messstatione
|
|
und je nach Tageszeit kann deswegen die Menge der Daten varieiren, weil immer um 00:00 eine neue Datei angefangen wird. In den Zip Dateinen finden sich außerdem
|
|
Metadaten über die Messtationen. Die eigentlichen Daten sind als CSV formatiert und sehen aus wie in Listing~\ref{list:wetter_csv} dargestellt
|
|
|
|
\begin{figure}[bht]
|
|
\begin{lstlisting}[caption=Wetterdaten CSV, label=list:wetter_csv]
|
|
STATIONS_ID;MESS_DATUM; QN;PP_10;TT_10;TM5_10;RF_10;TD_10;eor
|
|
73;202205120000; 2; -999; 12.9; 11.2; 84.2; 10.3;eor
|
|
73;202205120010; 2; -999; 12.7; 11.2; 84.9; 10.2;eor
|
|
73;202205120020; 2; -999; 12.9; 11.4; 83.0; 10.1;eor
|
|
73;202205120030; 2; -999; 12.4; 10.7; 86.9; 10.3;eor
|
|
73;202205120040; 2; -999; 12.4; 10.5; 86.2; 10.2;eor
|
|
73;202205120050; 2; -999; 12.3; 10.3; 85.5; 9.9;eor
|
|
73;202205120100; 2; -999; 12.1; 10.1; 88.1; 10.2;eor
|
|
73;202205120110; 2; -999; 11.7; 9.9; 90.1; 10.1;eor
|
|
73;202205120120; 2; -999; 11.7; 10.0; 89.0; 10.0;eor
|
|
73;202205120130; 2; -999; 11.9; 10.2; 86.3; 9.7;eor
|
|
73;202205120140; 2; -999; 12.3; 10.6; 83.5; 9.6;eor
|
|
73;202205120150; 2; -999; 12.4; 10.9; 83.3; 9.7;eor
|
|
73;202205120200; 2; -999; 11.7; 9.8; 86.2; 9.5;eor
|
|
73;202205120210; 2; -999; 11.6; 9.6; 88.5; 9.8;eor
|
|
73;202205120220; 2; -999; 11.4; 9.4; 88.6; 9.6;eor
|
|
73;202205120230; 2; -999; 11.8; 9.9; 88.7; 10.0;eor
|
|
73;202205120240; 2; -999; 11.4; 9.9; 88.7; 9.6;eor
|
|
73;202205120250; 2; -999; 11.5; 9.7; 89.5; 9.8;eor
|
|
73;202205120300; 2; -999; 11.6; 10.0; 88.4; 9.8;eor
|
|
73;202205120310; 2; -999; 11.4; 10.3; 87.5; 9.4;eor
|
|
73;202205120320; 2; -999; 11.6; 9.9; 89.0; 9.9;eor
|
|
73;202205120330; 2; -999; 12.1; 10.4; 87.3; 10.1;eor
|
|
73;202205120340; 2; -999; 12.1; 10.6; 87.2; 10.0;eor
|
|
73;202205120350; 2; -999; 11.9; 10.2; 87.2; 9.8;eor
|
|
...
|
|
\end{lstlisting}
|
|
\end{figure}
|
|
%Eventuell kürzen wenn zu viele Seiten
|
|
|
|
|
|
In der CSV Datei gibt es 9 Felder.
|
|
|
|
%Quelle einfügen
|
|
|
|
\begin{tabular}{l|p{13.0cm}}
|
|
|
|
STATION\_ID & Gibt an von welcher Station die Werte stammen \\ \hline
|
|
MESS\_DATUM & Gibt an wann gemessen wurde im Format "\%Y\%m\%d\%H\%M" Also Jahr Monat Tag Stunde Minute als eine zusammengeschriebene Zahl. \\ \hline
|
|
QN & Gibt die Qualität der Messwerte an. Hier gibt es die Werte 1 bis 3
|
|
\begin{compactenum}
|
|
\item nur formale Kontrolle bei Dekodierung und Import
|
|
\item Kontrolle mit individuell festgelegten Kriterien
|
|
\item ROUTINE automatische Kontrolle und Korrektur mit QUALIMET
|
|
\end{compactenum} \\ \hline
|
|
|
|
PP\_10 & Luftdruck auf Stationshöhe \\ \hline
|
|
TT\_10 & Lufttemperatur auf 2 Meter höhe \\ \hline
|
|
TM5\_10 & Lufttemperatur auf 5cm höhe \\ \hline
|
|
TD\_10 & relative Luftfeuchtigkeit auf 2m höhe \\ \hline
|
|
eor & END OF RECORD kann ignriert werden.
|
|
|
|
\end{tabular}
|
|
|
|
In dieser CSV Datei sind die Daten mit einem Semikoln voneinander getrennt. Der erste Wert in der CSV Datei ist die STATIONS\_ID auf die später noch weiter eingegangen wird.
|
|
Danach folgt das Feld Mess\_Datum Formatiert nach dem
|
|
|
|
|
|
\subsubsection{{Wetterdaten abrufen}}
|
|
|
|
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
|
|
At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
|
|
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
|
|
sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. |