Verwendung von MySQL in SmartCollect SC²

Ab SmartCollect SC² v5.1 können Sie die Zeitspalte time zusätzlich zu dem früher unterstützten time_sec benennen. Die Verwendung von time_sec wird irgendwann veraltet sein.

SmartCollect SC² wird mit einem eingebauten MySQL-Datenquellen-Plugin ausgeliefert, das Ihnen die Abfrage und Visualisierung von Daten aus einer MySQL-kompatiblen Datenbank ermöglicht.

Hinzufügen der Datenquelle

  1. Öffnen Sie das Seitenmenü, indem Sie auf das SmartCollect SC²-Symbol in der oberen Kopfzeile klicken.
  2. Im Seitenmenü unter dem Link Dashboards sollten Sie einen Link namens Data Sources finden.
  3. Klicken Sie auf die Schaltfläche “+ Datenquelle hinzufügen” in der oberen Kopfzeile.
  4. Wählen Sie MySQL aus der Dropdown-Liste Typ.

Optionen für Datenquellen

Name Description
Name The data source name. This is how you refer to the data source in panels and queries.
Default Default data source means that it will be pre-selected for new panels.
Host The IP address/hostname and optional port of your MySQL instance.
Database Name of your MySQL database.
User Database user’s login/username
Password Database user’s password
Max open The maximum number of open connections to the database, default unlimited (SmartCollect SC² v5.4+).
Max idle The maximum number of connections in the idle connection pool, default 2 (SmartCollect SC² v5.4+).
Max lifetime The maximum amount of time in seconds a connection may be reused, default 14400/4 hours. This should always be lower than configured wait_timeout in MySQL (SmartCollect SC² v5.4+).

Min Zeitintervall

Eine untere Grenze für die Variablen $__interval und $__interval_ms. Es wird empfohlen, diese auf die Schreibhäufigkeit zu setzen, zum Beispiel 1m, wenn Ihre Daten jede Minute geschrieben werden. Diese Option kann auch in einem Dashboard-Panel unter Datenquellenoptionen überschrieben/konfiguriert werden. Es ist wichtig zu beachten, dass dieser Wert als Zahl formatiert werden muss, gefolgt von einer gültigen Zahl, gefolgt von einem gültigen Zeitbezeichner, z. B. “1m” (1 Minute) oder “30s” (30 Sekunden). Die folgenden Zeitbezeichner werden unterstützt:

Identifier Description
y year
M month
w week
d day
h hour
m minute
s second
ms millisecond

Datenbank-Benutzerberechtigungen (Wichtig!)

Der Datenbankbenutzer, den Sie beim Hinzufügen der Datenquelle angeben, sollte nur SELECT-Berechtigungen für die angegebene Datenbank und die Tabellen haben, die Sie abfragen möchten. SmartCollect SC² prüft nicht, ob die Abfrage sicher ist. Die Abfrage könnte jede SQL-Anweisung enthalten. Zum Beispiel würden Anweisungen wie USE otherdb; und DROP TABLE user; ausgeführt werden ausgeführt. Um sich dagegen zu schützen, empfehlen wir stark, einen speziellen mysql-Benutzer mit eingeschränkten Rechten zu erstellen.

Beispiel:

 CREATE USER 'smartcollectReader' IDENTIFIED BY 'password';
 GRANT SELECT ON mydatabase.mytable TO 'smartcollectReader';

Sie können Platzhalter (*) anstelle von Datenbank oder Tabelle verwenden, wenn Sie Zugriff auf mehr Datenbanken und Tabellen gewähren möchten.

Abfrage-Editor

Nur in SmartCollect SC² v5.4+ verfügbar.

Sie finden den MySQL-Abfrage-Editor auf der Registerkarte “Metriken” im Bearbeitungsmodus eines Panels. Sie gelangen in den Bearbeitungsmodus, indem Sie auf den Panel-Titel und dann auf “Bearbeiten” klicken.

Der Abfrage-Editor hat einen Link namens “Generated SQL”, der angezeigt wird, nachdem eine Abfrage im Bearbeitungsmodus eines Panels ausgeführt wurde. Klicken Sie darauf und er wird erweitert und zeigt die rohe interpolierte SQL-Zeichenkette, die ausgeführt wurde.

Tabelle, Zeitspalte und metrische Spalte auswählen (FROM)

Wenn Sie den Bearbeitungsmodus zum ersten Mal aufrufen oder eine neue Abfrage hinzufügen, versucht SmartCollect SC², den Abfragegenerator mit der ersten Tabelle vorzufüllen, die eine Zeitstempelspalte und eine numerische Spalte hat.

Im FROM-Feld wird SmartCollect SC² Tabellen vorschlagen, die sich in der konfigurierten Datenbank befinden. Um eine Tabelle oder Ansicht in einer anderen Datenbank auszuwählen, auf die Ihr Datenbankbenutzer Zugriff hat, können Sie manuell einen voll qualifizierten Namen (database.table) wie “otherDb.metrics” eingeben.

Das Feld Zeitspalte verweist auf den Namen der Spalte, die Ihre Zeitwerte enthält. Die Auswahl eines Wertes für das Spaltenfeld “Metrik” ist optional. Wenn ein Wert ausgewählt wird, wird das Metrik-Spaltenfeld als Serienname verwendet.

Die metrischen Spaltenvorschläge enthalten nur Spalten mit einem Text-Datentyp (text, tinytext, mediumtext, longtext, varchar, char). Wenn Sie eine Spalte mit einem anderen Datentyp als metrische Spalte verwenden möchten, können Sie den Spaltennamen mit einem Cast eingeben: CAST(numericColumn as CHAR). Sie können auch beliebige SQL-Ausdrücke in das Feld für die metrische Spalte eingeben, die auf einen Text-Datentyp ausgewertet werden, wie CONCAT(column1, " ", CAST(numericColumn as CHAR)).

Spalten und Aggregationsfunktionen (SELECT)

In der Zeile SELECT können Sie angeben, welche Spalten und Funktionen Sie verwenden möchten. In das Spaltenfeld können Sie anstelle eines Spaltennamens beliebige Ausdrücke schreiben wie column1 * column2 / column3.

Wenn Sie Aggregatfunktionen verwenden, müssen Sie Ihre Ergebnismenge gruppieren. Der Editor fügt automatisch ein GROUP BY time hinzu, wenn Sie eine Aggregatfunktion hinzufügen.

Sie können weitere Wertespalten hinzufügen, indem Sie auf die Plus-Schaltfläche klicken und “Spalte” aus dem Menü wählen. Mehrere Wertspalten werden als separate Reihen im Diagrammfenster gezeichnet.

Daten filtern (WHERE)

Um einen Filter hinzuzufügen, klicken Sie auf das Plus-Symbol rechts neben der WHERE-Bedingung. Sie können Filter entfernen, indem Sie auf den Filter klicken und “Entfernen” wählen. Ein Filter für den aktuell ausgewählten Zeitbereich wird automatisch zu neuen Abfragen hinzugefügt.

Group By

Um nach der Zeit oder einer anderen Spalte zu gruppieren, klicken Sie auf das Plus-Symbol am Ende der Zeile GROUP BY. Das Dropdown-Menü mit den Vorschlägen zeigt nur die Textspalten der aktuell ausgewählten Tabelle an, aber Sie können jede Spalte manuell eingeben. Sie können die Gruppierung entfernen, indem Sie auf das Element klicken und dann “Entfernen” wählen.

Wenn Sie eine Gruppierung hinzufügen, muss auf alle ausgewählten Spalten eine Aggregatfunktion angewendet werden. Der Query Builder fügt automatisch Aggregat-funktionen zu allen Spalten ohne Aggregatfunktionen hinzu, wenn Sie Gruppierungen hinzufügen.

Gap Filling

SmartCollect SC² kann fehlende Werte auffüllen, wenn Sie nach Zeit gruppieren. Die Zeitfunktion nimmt zwei Argumente an. Das erste Argument ist das Zeitfenster, nach dem Sie gruppieren möchten, und das zweite Argument ist der Wert, mit dem SmartCollect SC² fehlende Elemente auffüllen soll.

Texteditor-Modus (RAW)

Sie können in den Rohabfrage-Editormodus wechseln, indem Sie auf das Hamburger-Symbol klicken und “Editormodus umschalten” wählen oder indem Sie auf “SQL bearbeiten” unterhalb der Abfrage klicken.

Wenn Sie den Rohabfrage-Editor verwenden, stellen Sie sicher, dass Ihre Abfrage mindestens “ORDER BY time” und einen Filter für den zurückgegebenen Zeitbereich enthält.

Macros

Zur Vereinfachung der Syntax und um dynamische Teile, wie Datumsbereichsfilter, zu ermöglichen, kann die Abfrage Makros enthalten.

Macro Beispiel Description
$__time(dateColumn) Will be replaced by an expression to convert to a UNIX timestamp and rename the column to time_sec. For example, UNIX_TIMESTAMP(dateColumn) as time_sec
$__timeEpoch(dateColumn) Will be replaced by an expression to convert to a UNIX timestamp and rename the column to time_sec. For example, UNIX_TIMESTAMP(dateColumn) as time_sec
$__timeFilter(dateColumn) Will be replaced by a time range filter using the specified column name. For example, dateColumn BETWEEN FROM_UNIXTIME(1494410783) AND FROM_UNIXTIME(1494410983)
$__timeFrom() Will be replaced by the start of the currently active time selection. For example, FROM_UNIXTIME(1494410783)
$__timeTo() Will be replaced by the end of the currently active time selection. For example, FROM_UNIXTIME(1494410983)
$__timeGroup(dateColumn,'5m') Will be replaced by an expression usable in GROUP BY clause. For example, *cast(cast(UNIX_TIMESTAMP(dateColumn)/(300) as signed)300 as signed),
$__timeGroup(dateColumn,'5m', 0) Same as above but with a fill parameter so missing points in that series will be added by smartcollect and 0 will be used as value.
$__timeGroup(dateColumn,'5m', NULL) Same as above but NULL will be used as value for missing points.
$__timeGroup(dateColumn,'5m', previous) Same as above but the previous value in that series will be used as fill value if no value has been seen yet NULL will be used (only available in SmartCollect SC² 5.3+).
$__timeGroupAlias(dateColumn,'5m') Will be replaced identical to $__timeGroup but with an added column alias (only available in SmartCollect SC² 5.3+).
$__unixEpochFilter(dateColumn) Will be replaced by a time range filter using the specified column name with times represented as Unix timestamp. For example, dateColumn > 1494410783 AND dateColumn < 1494497183
$__unixEpochFrom() Will be replaced by the start of the currently active time selection as Unix timestamp. For example, 1494410783
$__unixEpochTo() Will be replaced by the end of the currently active time selection as Unix timestamp. For example, 1494497183
$__unixEpochNanoFilter(dateColumn) Will be replaced by a time range filter using the specified column name with times represented as nanosecond timestamp. For example, dateColumn > 1494410783152415214 AND dateColumn < 1494497183142514872
$__unixEpochNanoFrom() Will be replaced by the start of the currently active time selection as nanosecond timestamp. For example, 1494410783152415214
$__unixEpochNanoTo() Will be replaced by the end of the currently active time selection as nanosecond timestamp. For example, 1494497183142514872
$__unixEpochGroup(dateColumn,'5m', [fillmode]) Same as $__timeGroup but for times stored as Unix timestamp (only available in SmartCollect SC² 5.3+).
$__unixEpochGroupAlias(dateColumn,'5m', [fillmode]) Same as above but also adds a column alias (only available in SmartCollect SC² 5.3+).

Wir planen, viele weitere Makros hinzuzufügen. Wenn Sie Vorschläge für Makros haben, die Sie gerne sehen würden, dann open an issue in unserem GitHub-Repositorium.

Der Abfrage-Editor hat einen Link namens “Generated SQL”, der nach der Ausführung einer Abfrage im Bearbeitungsmodus des Bedienfelds angezeigt wird. Klicken Sie darauf und er wird erweitert und zeigt die rohe interpolierte SQL-Zeichenkette, die ausgeführt wurde.

Tabellenabfragen

Wenn die Abfrageoption “Format als” auf “Tabelle” eingestellt ist, können Sie grundsätzlich jede Art von SQL-Abfrage durchführen. Das Tabellenfeld zeigt automatisch die Ergebnisse aller Spalten und Zeilen an, die Ihre Abfrage liefert.

Abfrage-Editor mit Beispielabfrage:

Die Abfrage:

SELECT
  title as 'Title',
  user.login as 'Created By' ,
  dashboard.created as 'Created On'
 FROM dashboard
INNER JOIN user on user.id = dashboard.created_by
WHERE $__timeFilter(dashboard.created)

Sie können den Namen der Spalten des Tabellen-Panels steuern, indem Sie die reguläre “as”-Syntax für die Spaltenauswahl verwenden.

Das resultierende Tabellenfeld:

Zeitreihenabfragen

Wenn Sie Format als auf Zeitreihe setzen, z. B. für die Verwendung im Diagrammbedienfeld, dann muss die Abfrage eine Spalte mit dem Namen time zurückgeben, die entweder eine SQL-Datetime oder einen beliebigen numerischen Datentyp, der eine Unix-Epoche darstellt, zurückgibt. Jede Spalte außer time und metric wird als Wertspalte behandelt. Sie können eine Spalte namens “metric” zurückgeben, die als Metrikname für die Wertspalte verwendet wird. Wenn Sie mehrere Wertspalten und eine Spalte mit dem Namen metric zurückgeben, wird diese Spalte als Präfix für den Seriennamen verwendet (nur in SmartCollect SC² 5.3+ verfügbar).

Ergebnismengen von Zeitreihenabfragen müssen nach Zeit sortiert werden.

Beispiel mit metrischer Spalte:

SELECT
  $__timeGroup(time_date_time,'5m'),
  min(value_double),
  'min' as metric
FROM test_data
WHERE $__timeFilter(time_date_time)
GROUP BY time
ORDER BY time

Beispiel für die Verwendung des Füllparameters im $__timeGroup-Makro, um Nullwerte in Nullwerte zu konvertieren:

SELECT
  $__timeGroup(createdAt,'5m',0),
  sum(value_double) as value,
  measurement
FROM test_data
WHERE
  $__timeFilter(createdAt)
GROUP BY time, measurement
ORDER BY time

Beispiel mit mehreren Spalten:

SELECT
  $__timeGroup(time_date_time,'5m'),
  min(value_double) as min_value,
  max(value_double) as max_value
FROM test_data
WHERE $__timeFilter(time_date_time)
GROUP BY time
ORDER BY time

Derzeit gibt es keine Unterstützung für eine dynamische Gruppierung nach Zeit basierend auf dem Zeitbereich und der Feldbreite. Dies ist etwas, das wir planen, hinzuzufügen.

Templating

Diese Funktion ist derzeit in den nächtlichen Builds verfügbar und wird in der Version SmartCollect SC² 5.0.0 enthalten sein.

Anstatt Dinge wie Server, Anwendung und Sensorname in Ihren metrischen Abfragen hart zu kodieren, können Sie an deren Stelle Variablen verwenden. Variablen werden als Dropdown-Auswahlfelder am oberen Rand des Dashboards angezeigt. Mit diesen Dropdown-Feldern können Sie die Daten, die in Ihrem Dashboard angezeigt werden, leicht ändern.

In der Dokumentation Templating finden Sie eine Einführung in die Templating-Funktion und die verschiedenen Typen von Template-Variablen.

Abfrage-Variable

Wenn Sie eine Template-Variable vom Typ Query hinzufügen, können Sie eine MySQL-Abfrage schreiben, die Dinge wie Messungsnamen, Schlüsselnamen oder Schlüsselwerte zurückgeben, die als Dropdown-Auswahlfeld angezeigt werden.

Sie können z. B. eine Variable haben, die alle Werte für die Spalte Hostname in einer Tabelle enthält, wenn Sie eine solche Abfrage in der Einstellung für die Template-Variable Query angeben.

SELECT hostname FROM my_host

Eine Abfrage kann mehrere Spalten zurückgeben und SmartCollect SC² wird automatisch eine Liste daraus erstellen. Zum Beispiel gibt die folgende Abfrage eine Liste mit Werten von “Hostname” und “Hostname2” zurück.

SELECT my_host.hostname, my_other_host.hostname2 FROM my_host JOIN my_other_host ON my_host.city = my_other_host.city

Um zeitbereichsabhängige Makros wie $__timeFilter(column) in Ihrer Abfrage zu verwenden, muss der Aktualisierungsmodus der Template-Variable auf On Time Range Change gesetzt werden.

SELECT event_name FROM event_log WHERE $__timeFilter(time_column)

Eine weitere Möglichkeit ist eine Abfrage, die eine Schlüssel/Wert-Variable erstellen kann. Die Abfrage sollte zwei Spalten zurückgeben, die __text und __value heißen. Der Wert der Spalte __text sollte eindeutig sein (wenn er nicht eindeutig ist, wird der erste Wert verwendet). Die Optionen im Dropdown haben einen Text und einen Wert, so dass Sie einen Friendly-Namen als Text und eine ID als Wert haben können. Eine Beispielabfrage mit “hostname” als Text und “id” als Wert:

SELECT hostname AS __text, id AS __value FROM my_host

Sie können auch verschachtelte Variablen erstellen. Wenn Sie zum Beispiel eine weitere Variable mit dem Namen “Region” haben. Dann könnten Sie die Hosts-Variable nur Hosts aus der aktuell ausgewählten Region mit einer Abfrage wie dieser anzeigen (wenn “region” eine mehrwertige Variable ist, verwenden Sie den Vergleichsoperator “IN” statt “=”, um mehrere Werte zu vergleichen):

SELECT hostname FROM my_host  WHERE region IN($region)

Verwendung von __searchFilter zum Filtern der Ergebnisse in der Abfragevariable

Verfügbar ab SmartCollect SC² 6.5 und höher

Die Verwendung von __searchFilter im Abfragefeld filtert das Abfrageergebnis basierend darauf, was der Benutzer in das Dropdown-Auswahlfeld eingibt. Wenn der Benutzer nichts eingegeben hat, ist der Standardwert für __searchFilter %.

Wichtig ist, dass Sie den Ausdruck “_searchFilter” mit Anführungszeichen umgeben, da SmartCollect SC² dies nicht für Sie tut.

Das folgende Beispiel zeigt, wie Sie __searchFilter als Teil des Abfragefelds verwenden, um die Suche nach Hostname zu ermöglichen, während der Benutzer in das Dropdown-Auswahlfeld eingibt.

Abfrage

SELECT hostname FROM my_host  WHERE hostname LIKE '$__searchFilter'

Verwendung von Variablen in Abfragen

Von SmartCollect SC² 4.3.0 bis 4.6.0 werden Schablonenvariablen immer automatisch in Anführungszeichen gesetzt; wenn es sich also um einen String-Wert handelt, brauchen Sie sie in Where-Klauseln nicht in Anführungszeichen zu setzen.

Ab SmartCollect SC² 4.7.0 werden die Werte von Schablonenvariablen nur in Anführungszeichen gesetzt, wenn die Schablonenvariable ein “Multi-Wert” ist.

Wenn die Variable eine mehrwertige Variable ist, verwenden Sie den Vergleichsoperator IN anstelle von =, um mit mehreren Werten übereinzustimmen.

Es gibt zwei Syntaxen:

$<varname> Beispiel mit einer Template-Variable namens hostname:

SELECT
  UNIX_TIMESTAMP(atimestamp) as time,
  aint as value,
  avarchar as metric
FROM my_table
WHERE $__timeFilter(atimestamp) and hostname in($hostname)
ORDER BY atimestamp ASC

[[varname]] Beispiel mit einer Template-Variable namens hostname:

SELECT
  UNIX_TIMESTAMP(atimestamp) as time,
  aint as value,
  avarchar as metric
FROM my_table
WHERE $__timeFilter(atimestamp) and hostname in([[hostname]])
ORDER BY atimestamp ASC

Deaktivieren der Quotierung für mehrwertige Variablen

SmartCollect SC² erstellt automatisch eine durch Anführungszeichen und Kommata getrennte Zeichenkette für mehrwertige Variablen. Zum Beispiel: Wenn Server01 und Server02 ausgewählt werden, dann wird sie formatiert als: 'server01', 'server02'. Deaktivieren Sie die Anführungszeichen, verwenden Sie die csv-Formatierungsoption für Variablen:

${servers:csv}

Lesen Sie mehr über die Formatierungsoptionen für Variablen in der Variables Dokumentation.

Anmerkungen

Anmerkungen ermöglichen es Ihnen, reichhaltige Ereignisinformationen über die Diagramme zu legen. Sie fügen Anmerkungsabfragen über das Menü “Dashboard”/Ansicht “Anmerkungen” hinzu.

Beispielabfrage mit Zeitspalte und Epochenwerten:

SELECT
  epoch_time as time,
  metric1 as text,
  CONCAT(tag1, ',', tag2) as tags
FROM
  public.test_data
WHERE
  $__unixEpochFilter(epoch_time)

Beispiel für eine Regionsabfrage unter Verwendung der Spalten time und timeend mit Epochenwerten:

Nur in SmartCollect SC² v6.6+ verfügbar.

SELECT
  epoch_time as time,
  epoch_timeend as timeend,
  metric1 as text,
  CONCAT(tag1, ',', tag2) as tags
FROM
  public.test_data
WHERE
  $__unixEpochFilter(epoch_time)

Beispielabfrage unter Verwendung der Zeitspalte des nativen SQL-Datentyps Datum/Zeit:

SELECT
  native_date_time as time,
  metric1 as text,
  CONCAT(tag1, ',', tag2) as tags
FROM
  public.test_data
WHERE
  $__timeFilter(native_date_time)
Name Description
time The name of the date/time field. Could be a column with a native SQL date/time data type or epoch value.
timeend Optional name of the end date/time field. Could be a column with a native SQL date/time data type or epoch value. (SmartCollect SC² v6.6+)
text Event description field.
tags Optional field name to use for event tags as a comma separated string.

Alarmierung

Zeitreihenabfragen sollten in Alarmbedingungen funktionieren. Tabellenformatierte Abfragen werden in Alert-Rule-Bedingungen noch nicht unterstützt.

Konfigurieren der Datenquelle mit Provisioning

Es ist jetzt möglich, Datenquellen mit Hilfe von Konfigurationsdateien mit dem Provisioning-System von SmartCollect SC² zu konfigurieren. Sie können mehr darüber lesen, wie es funktioniert und alle Einstellungen, die Sie für Datenquellen festlegen können, auf der Seite provisioning docs page

Hier finden Sie einige Beispiele für die Bereitstellung dieser Datenquelle.

apiVersion: 1

datasources:
  - name: MySQL
    type: mysql
    url: localhost:3306
    database: smartcollect
    user: smartcollect
    password: password
    jsonData:
      maxOpenConns: 0         # SmartCollect SC² v5.4+
      maxIdleConns: 2         # SmartCollect SC² v5.4+
      connMaxLifetime: 14400  # SmartCollect SC² v5.4+