Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Stellen Sie eine Connect zu einer Microsoft SQL Server-Datenquelle her
Verwenden Sie die Microsoft SQL Server (MSSQL) -Datenquelle, um Daten aus einem beliebigen Microsoft SQL Server 2005 oder neuer, einschließlich Microsoft Azure SQL-Datenbank, abzufragen und zu visualisieren.
Wichtig
Grafana Version 8.0 ändert die zugrunde liegende Datenstruktur für Datenrahmen für Microsoft SQL Server, Postgres und MySQL. Infolgedessen wird ein Zeitreihenabfrageergebnis in einem breiten Format zurückgegeben. Weitere Informationen finden Sie unter Wide Format
Damit Ihre Visualisierungen wie zuvor funktionieren, müssen Sie möglicherweise einige manuelle Migrationen durchführen. Eine Lösung ist auf Github unter Postgres/MySQL/MSSQL dokumentiert: Wichtige Änderung in Version 8.0 in Bezug auf Zeitreihenabfragen
Die Datenquelle hinzufügen
-
Öffnen Sie das Seitenmenü, indem Sie das Grafana-Symbol in der oberen Kopfzeile auswählen.
-
Im Seitenmenü unter dem Link Konfiguration sollten Sie einen Link Datenquellen finden.
-
Wählen Sie in der oberen Kopfzeile die Schaltfläche + Datenquelle hinzufügen.
-
Wählen Sie Microsoft SQL Server aus der Dropdownliste Typ aus.
Datenquellenoptionen
Name | Beschreibung |
---|---|
Name
|
Der Name der Datenquelle. So sehen Sie die Datenquelle in Bedienfeldern und Abfragen. |
Default
|
Die Standarddatenquelle bedeutet, dass sie für neue Panels vorab ausgewählt wird. |
Host
|
Die IP-Adresse/der Hostname und der optionale Port Ihrer MSSQL-Instanz. Wenn der Port weggelassen wird, wird der Standardwert 1433 verwendet. |
Database
|
Name Ihrer MSSQL-Datenbank. |
User
|
Login/Benutzername des Datenbankbenutzers. |
Password
|
Passwort des Datenbankbenutzers. |
Encrypt
|
Diese Option bestimmt, ob oder in welchem Umfang eine sichere SSL-TCP/IP-Verbindung mit dem Server ausgehandelt wird, Standard false (Grafana v5.4+). |
Max open
|
Die maximale Anzahl offener Verbindungen zur Datenbank, Standard unlimited (Grafana v5.4+). |
Max idle
|
Die maximale Anzahl von Verbindungen im inaktiven Verbindungspool, Standard 2 (Grafana v5.4+). |
Max lifetime
|
Die maximale Zeit in Sekunden, für die eine Verbindung wiederverwendet werden kann, Standardeinstellung /4 Stunden. 14400 |
Minimales Zeitintervall
Eine Untergrenze für die $_interval
$_interval_ms
Variablen. Es wird empfohlen, die Schreibfrequenz einzustellen, z. B. 1m
wenn Ihre Daten jede Minute geschrieben werden. Diese Option kann auch in einem Dashboard unter Datenquellenoptionen überschrieben/konfiguriert werden. Dieser Wert muss als Zahl gefolgt von einer gültigen Zeit-ID formatiert werden, z. B. 1m
(1 Minute) oder 30s
(30 Sekunden). Die folgenden Zeitkennungen werden unterstützt.
Kennung | Beschreibung |
---|---|
y
|
Jahr |
M
|
Monat |
w
|
Woche |
d
|
Tag |
h
|
Stunde |
m
|
Minute |
s
|
Sekunde |
ms
|
Millisekunde |
Berechtigungen für Datenbankbenutzer
Wichtig
Dem Datenbankbenutzer, den Sie beim Hinzufügen der Datenquelle angeben, sollten nur SELECT-Berechtigungen für die angegebene Datenbank und die Tabellen erteilt werden, die Sie abfragen möchten. Grafana überprüft nicht, ob die Abfrage sicher ist. Die Abfrage kann jede SQL-Anweisung enthalten. Beispielsweise DROP TABLE user;
würden Anweisungen wie DELETE FROM user;
und ausgeführt werden. Um sich davor zu schützen, empfehlen wir dringend, einen bestimmten MSSQL-Benutzer mit eingeschränkten Rechten zu erstellen.
Der folgende Beispielcode zeigt die Erstellung eines bestimmten MSSQL-Benutzers mit eingeschränkten Rechten.
CREATE USER grafanareader WITH PASSWORD 'password' GRANT SELECT ON dbo.YourTable3 TO grafanareader
Stellen Sie sicher, dass der Benutzer keine unerwünschten Berechtigungen von der öffentlichen Rolle erhält.
Bekannte Probleme
Wenn Sie eine ältere Version von Microsoft SQL Server wie 2008 und 2008R2 verwenden, müssen Sie möglicherweise die Verschlüsselung deaktivieren, um eine Verbindung herstellen zu können. Wenn möglich, empfehlen wir Ihnen, das neueste verfügbare Service Pack zu verwenden, um eine optimale Kompatibilität zu gewährleisten.
Abfrage-Editor
Sie finden den MSSQL-Abfrage-Editor auf der Registerkarte „Metriken“ im Bearbeitungsmodus des Diagramm-, Singlestat- oder Tabellenfensters. Sie wechseln in den Bearbeitungsmodus, indem Sie den Titel des Bedienfelds und dann Bearbeiten wählen. Mit dem Editor können Sie eine SQL-Abfrage definieren, um Daten auszuwählen, die visualisiert werden sollen.
-
Wählen Sie Format als
Time series
(unter anderem zur Verwendung in Graph- oder Singlestat-Bedienfeldern) oderTable
(unter anderem zur Verwendung im Tabellenfenster). -
Dies ist der eigentliche Editor, in den Sie Ihre SQL-Abfragen schreiben.
-
Zeigt den Hilfebereich für MSSQL unter dem Abfrage-Editor an.
-
Zeigt die SQL-Abfrage an, die ausgeführt wurde. Wird zuerst verfügbar sein, nachdem eine erfolgreiche Abfrage ausgeführt wurde.
-
Fügen Sie eine zusätzliche Abfrage hinzu, bei der ein zusätzlicher Abfrage-Editor angezeigt wird.
Makros
Um die Syntax zu vereinfachen und dynamische Teile wie Datumsbereichsfilter zu berücksichtigen, kann die Abfrage Makros enthalten.
Beispiel für ein Makro | Beschreibung |
---|---|
$__time(dateColumn)
|
Wird durch einen Ausdruck ersetzt, um die Spalte in Zeit umzubenennen. Zum Beispiel DateColumn als Uhrzeit. |
$__timeEpoch(dateColumn)
|
Wird durch einen Ausdruck ersetzt, um einen DATETIME-Spaltentyp in einen Unix-Zeitstempel zu konvertieren und ihn in Zeit umzubenennen. Zum Beispiel DATEDIFF (second, „1970-01-01", DateColumn) ALS Uhrzeit. |
$__timeFilter(dateColumn)
|
Wird durch einen Zeitbereichsfilter ersetzt, der den angegebenen Spaltennamen verwendet. Zum Beispiel DateColumn BETWEEN „2017-04-21T 05:01:17 Z“ UND „2017-04-21T 05:06:17 Z“. |
$__timeFrom()
|
Wird durch den Start der aktuell aktiven Zeitauswahl ersetzt. Zum Beispiel „2017-04-21T 05:01:17 Z“. |
$__timeTo()
|
Wird durch das Ende der aktuell aktiven Zeitauswahl ersetzt. Zum Beispiel „2017-04-21T 05:06:17 Z“. |
$__timeGroup(dateColumn,'5m'[, fillvalue])
|
Wird durch einen Ausdruck ersetzt, der in der GROUP BY-Klausel verwendet werden kann. Wenn Sie für FillValue den Wert NULL oder einen Gleitkommawert angeben, werden leere Reihen im Zeitbereich automatisch mit diesem Wert gefüllt. Beispiel: CAST (ROUND (DATEDIFF (second, „1970-01-01", time_column) /300.0, 0) als bigint) *300. |
$__timeGroup(dateColumn,'5m', 0)
|
Wie zuvor, aber mit einem Füllparameter, sodass fehlende Punkte in dieser Serie von grafana hinzugefügt und 0 als Wert verwendet wird. |
$__timeGroup(dateColumn,'5m', NULL)
|
Wie oben, aber NULL wird als Wert für fehlende Punkte verwendet. |
$__timeGroup(dateColumn,'5m', previous)
|
Wie oben, aber der vorherige Wert in dieser Reihe wird als Füllwert verwendet, wenn noch kein Wert gesehen wurde. NULL wird verwendet (nur in Grafana 5.3+ verfügbar). |
Der Abfrage-Editor verfügt über einen Link Generiertes SQL, der angezeigt wird, nachdem eine Abfrage ausgeführt wurde, während Sie sich im Panel-Bearbeitungsmodus befinden. Wenn Sie ihn auswählen, wird er erweitert und zeigt die unformatierte interpolierte SQL-Zeichenfolge an, die ausgeführt wurde.
Tabellenabfragen
Wenn die Abfrageoption auf Als Tabelle formatieren gesetzt ist, können Sie grundsätzlich jede Art von SQL-Abfrage ausführen. Das Tabellenfenster zeigt automatisch die Ergebnisse der Spalten und Zeilen an, die Ihre Abfrage zurückgibt.
Der folgende Beispielcode zeigt eine Datenbanktabelle.
CREATE TABLE [event] ( time_sec bigint, description nvarchar(100), tags nvarchar(100), )
CREATE TABLE [mssql_types] ( c_bit bit, c_tinyint tinyint, c_smallint smallint, c_int int, c_bigint bigint, c_money money, c_smallmoney smallmoney, c_numeric numeric(10,5), c_real real, c_decimal decimal(10,2), c_float float, c_char char(10), c_varchar varchar(10), c_text text, c_nchar nchar(12), c_nvarchar nvarchar(12), c_ntext ntext, c_datetime datetime, c_datetime2 datetime2, c_smalldatetime smalldatetime, c_date date, c_time time, c_datetimeoffset datetimeoffset ) INSERT INTO [mssql_types] SELECT 1, 5, 20020, 980300, 1420070400, '$20000.15', '£2.15', 12345.12, 1.11, 2.22, 3.33, 'char10', 'varchar10', 'text', N'☺nchar12☺', N'☺nvarchar12☺', N'☺text☺', GETDATE(), CAST(GETDATE() AS DATETIME2), CAST(GETDATE() AS SMALLDATETIME), CAST(GETDATE() AS DATE), CAST(GETDATE() AS TIME), SWITCHOFFSET(CAST(GETDATE() AS DATETIMEOFFSET), '-07:00')
Der folgende Beispielcode zeigt eine Abfrage.
SELECT * FROM [mssql_types]
Sie können den Namen der Spalten im Tabellenfenster mithilfe der regulären AS
SQL-Spaltenauswahlsyntax steuern, wie im folgenden Beispielcode gezeigt.
SELECT c_bit as [column1], c_tinyint as [column2] FROM [mssql_types]
Das resultierende Tabellenfeld:
Zeitreihenabfragen
Wenn Sie Format auf Zeitreihe festlegen, z. B. für die Verwendung im Grafikfenster, muss die Abfrage eine Spalte mit dem Namen time
haben, die entweder einen SQL-Datetime-Wert oder einen beliebigen numerischen Datentyp zurückgibt, der die Unix-Epoche in Sekunden darstellt. Sie können eine Spalte mit dem Namen zurückgebenmetric
, der als Metrikname für die Wertspalte verwendet wird. Jede Spalte außer time
und metric
wird als Wertspalte behandelt. Wenn Sie die metric
Spalte weglassen, ist der Name der Wertspalte der Metrikname. Sie können mehrere Wertspalten auswählen, von denen jede ihren Namen als Metrik hat. Wenn Sie mehrere Wertspalten und eine Spalte mit dem Namen zurückgeben, metric
wird diese Spalte als Präfix für den Seriennamen verwendet.
Ergebnissätze von Zeitreihenabfragen müssen nach Zeit sortiert werden.
Der folgende Beispielcode zeigt eine Datenbanktabelle.
CREATE TABLE [event] ( time_sec bigint, description nvarchar(100), tags nvarchar(100), )
CREATE TABLE metric_values ( time datetime, measurement nvarchar(100), valueOne int, valueTwo int, ) INSERT metric_values (time, measurement, valueOne, valueTwo) VALUES('2018-03-15 12:30:00', 'Metric A', 62, 6) INSERT metric_values (time, measurement, valueOne, valueTwo) VALUES('2018-03-15 12:30:00', 'Metric B', 49, 11) ... INSERT metric_values (time, measurement, valueOne, valueTwo) VALUES('2018-03-15 13:55:00', 'Metric A', 14, 25) INSERT metric_values (time, measurement, valueOne, valueTwo) VALUES('2018-03-15 13:55:00', 'Metric B', 48, 10)
Der folgende Beispielcode zeigt eine value
und eine metric
Spalte.
SELECT time, valueOne, measurement as metric FROM metric_values WHERE $__timeFilter(time) ORDER BY 1
Wenn die vorhergehende Abfrage in einem Grafikfenster verwendet wird, werden zwei Reihen mit Namen Metric A
und Metric B
mit den Werten erstellt, über time
denen die Werte valueOne
valueTwo
dargestellt werden.
Der folgende Beispielcode zeigt mehrere value
Spalten.
SELECT time, valueOne, valueTwo FROM metric_values WHERE $__timeFilter(time) ORDER BY 1
Wenn die vorhergehende Abfrage in einem Grafikfenster verwendet wird, werden zwei Reihen mit Namen Metric A
und Metric B
mit den Werten valueOne
erzeugt, die valueTwo
time
überzeichnet wurden.
Der folgende Beispielcode zeigt die Verwendung des Makros $__timeGroup.
SELECT $__timeGroup(time, '3m') as time, measurement as metric, avg(valueOne) FROM metric_values WHERE $__timeFilter(time) GROUP BY $__timeGroup(time, '3m'), measurement ORDER BY 1
Wenn die vorherige Abfrage in einem Grafikfenster verwendet wird, werden zwei Reihen mit Namen Metric A
und Metric B
mit den Werten valueOne
erstellt, die übereinander gezeichnet wurden. valueTwo
time
Bei zwei Reihen, in denen innerhalb eines Drei-Minuten-Fensters ein Wert fehlt, wird eine Linie zwischen diesen beiden Linien gerendert. Sie werden feststellen, dass das Diagramm auf der rechten Seite niemals auf Null sinkt.
Der folgende Beispielcode zeigt die Verwendung des Makros $__timeGroup mit einem Füllparameter, der auf Null gesetzt ist.
SELECT $__timeGroup(time, '3m', 0) as time, measurement as metric, sum(valueTwo) FROM metric_values WHERE $__timeFilter(time) GROUP BY $__timeGroup(time, '3m'), measurement ORDER BY 1
Wenn diese Abfrage in einem Grafikfeld verwendet wird, sind das Ergebnis zwei Reihen Metric B
mit Namen Metric A
und übereinander geplottet. valueTwo
time
Jede Reihe, in der innerhalb eines Drei-Minuten-Fensters ein Wert fehlt, hat den Wert Null. Dieser Wert wird im Diagramm auf der rechten Seite wiedergegeben.
Erstellen von Vorlagen
Anstatt Dinge wie Server-, Anwendungs- und Sensornamen in Ihren metrischen Abfragen fest zu codieren, können Sie stattdessen Variablen verwenden. Variablen werden als Drop-down-Auswahlfelder oben im Dashboard angezeigt. Sie können diese Dropdown-Felder verwenden, um die in Ihrem Dashboard angezeigten Daten zu ändern.
Weitere Informationen zu Vorlagen und Vorlagenvariablen finden Sie unter. Vorlagen und Variablen
Variable abfragen
Wenn Sie eine Vorlagenvariable dieses Typs hinzufügenQuery
, können Sie eine MSSQL-Abfrage schreiben, die beispielsweise Messnamen, Schlüsselnamen oder Schlüsselwerte zurückgeben kann, die als Dropdownauswahlfeld angezeigt werden.
Sie können beispielsweise eine Variable verwenden, die alle Werte für die hostname
Spalte in einer Tabelle enthält, wenn Sie eine solche Abfrage in der Abfrageeinstellung für die Vorlagenvariable angeben.
SELECT hostname FROM host
Eine Abfrage kann mehrere Spalten zurückgeben und Grafana erstellt automatisch eine Liste daraus. Die folgende Abfrage gibt beispielsweise eine Liste mit Werten von hostname
und hostname2
zurück.
SELECT [host].[hostname], [other_host].[hostname2] FROM host JOIN other_host ON [host].[city] = [other_host].[city]
Eine weitere Option ist eine Abfrage, die eine Schlüssel/Wert-Variable erstellen kann. Die Abfrage sollte zwei Spalten mit dem Namen __text
und zurückgeben. __value
Der __text
Spaltenwert sollte eindeutig sein (wenn er nicht eindeutig ist, wird der erste Wert verwendet). Die Optionen in der Dropdownliste enthalten einen Text und einen Wert, sodass Sie einen benutzerfreundlichen Namen als Text und eine ID als Wert angeben können. Eine Beispielabfrage mit hostname
als Text und id
als Wert:
SELECT hostname __text, id __value FROM host
Sie können auch verschachtelte Variablen erstellen. Zum Beispiel, wenn Sie eine andere Variable benannt region
haben. Dann könnten Sie festlegen, dass die hosts-Variable nur Hosts aus der aktuell ausgewählten Region mit einer Abfrage wie dieser anzeigt (wenn region
es sich =
um eine Variable mit mehreren Werten handelt, verwenden Sie den IN
Vergleichsoperator, anstatt einen Vergleich mit mehreren Werten durchzuführen).
SELECT hostname FROM host WHERE region IN ($region)
Verwenden von Variablen in Abfragen
Anmerkung
Werte von Vorlagenvariablen werden nur in Anführungszeichen gesetzt, wenn die Vorlagenvariable a istmulti-value
.
Wenn es sich bei der Variablen um eine Variable mit mehreren Werten handelt, verwenden Sie den IN
Vergleichsoperator=
, anstatt sie mit mehreren Werten abzugleichen.
Es gibt zwei Syntaxen:
$<varname>
Beispiel mit einer Vorlagenvariablen namenshostname
:
SELECT atimestamp time, aint value FROM table WHERE $__timeFilter(atimestamp) and hostname in($hostname) ORDER BY atimestamp
[[varname]]
Beispiel mit einer Vorlagenvariablen namenshostname
:
SELECT atimestamp as time, aint as value FROM table WHERE $__timeFilter(atimestamp) and hostname in([[hostname]]) ORDER BY atimestamp
Ausschalten der Anführungszeichen für Variablen mit mehreren Werten
Grafana erstellt automatisch eine durch Kommas getrennte Zeichenfolge in Anführungszeichen für Variablen mit mehreren Werten. Wenn zum Beispiel server01
und ausgewählt server02
sind, wird es wie folgt formatiert:. 'server01', 'server02'
Verwenden Sie die CSV-Formatierungsoption für Variablen, um das Anführen von Anführungszeichen zu deaktivieren.
${servers:csv}
Weitere Informationen zu den Formatierungsoptionen für Variablen finden Sie unterVorlagen und Variablen.
Anmerkungen
Mithilfe von Anmerkungen können Sie Grafiken mit ausführlichen Ereignisinformationen überlagern. Sie fügen Annotationsabfragen über das Dashboard-Menü /die Ansicht Anmerkungen hinzu. Weitere Informationen finden Sie unter Anmerkungen.
Spalten:
Name | Beschreibung |
---|---|
time
|
Der Name des Datums-/Uhrzeitfeldes. Könnte eine Spalte mit einem systemeigenen SQL-Datentyp für Datum/Uhrzeit oder Epochenwert sein. |
timeend
|
Optionaler Name des Enddatums-/Uhrzeitfeldes. Könnte eine Spalte mit einem systemeigenen SQL-Datentyp für Datum/Uhrzeit oder Epochenwert sein. |
text
|
Feld mit der Beschreibung des Ereignisses. |
tags
|
Optionaler Feldname, der für Event-Tags als kommagetrennte Zeichenfolge verwendet werden soll. |
Der folgende Beispielcode zeigt Datenbanktabellen.
CREATE TABLE [events] ( time_sec bigint, description nvarchar(100), tags nvarchar(100), )
Wir verwenden auch die in definierte DatenbanktabelleZeitreihenabfragen.
Der folgende Beispielcode zeigt eine Abfrage, die eine Zeitspalte mit Epochenwerten verwendet.
SELECT time_sec as time, description as [text], tags FROM [events] WHERE $__unixEpochFilter(time_sec) ORDER BY 1
Der folgende Beispielcode zeigt eine Regionsabfrage, die Zeit- und Zeitendspalten mit Epochenwerten verwendet.
SELECT time_sec as time, time_end_sec as timeend, description as [text], tags FROM [events] WHERE $__unixEpochFilter(time_sec) ORDER BY 1
Der folgende Beispielcode zeigt eine Abfrage, die eine Zeitspalte des systemeigenen SQL-Datentyps Datum/Uhrzeit verwendet.
SELECT time, measurement as text, convert(varchar, valueOne) + ',' + convert(varchar, valueTwo) as tags FROM metric_values WHERE $__timeFilter(time_column) ORDER BY 1
Unterstützung für gespeicherte Prozeduren
Es wurde verifiziert, dass gespeicherte Prozeduren funktionieren. Es kann jedoch Randfälle geben, in denen es nicht wie erwartet funktioniert. Gespeicherte Prozeduren sollten in Tabellen-, Zeitreihen- und Annotationsabfragen unterstützt werden, solange Sie dieselbe Benennung von Spalten verwenden und Daten im gleichen Format zurückgeben, wie zuvor in den jeweiligen Abschnitten beschrieben.
Makrofunktionen funktionieren nicht innerhalb einer gespeicherten Prozedur.
Beispiele
In den folgenden Beispielen ist die Datenbanktabelle in Zeitreihenabfragen definiert. Nehmen wir an, Sie möchten vier Reihen in einem Grafikfeld visualisieren, z. B. alle Kombinationen von Spalten valueOne
valueTwo
undmeasurement
. Das Grafikfeld auf der rechten Seite visualisiert, was wir erreichen wollen. Um dieses Problem zu lösen, müssen Sie zwei Abfragen verwenden:
Der folgende Beispielcode zeigt die erste Abfrage.
SELECT $__timeGroup(time, '5m') as time, measurement + ' - value one' as metric, avg(valueOne) as valueOne FROM metric_values WHERE $__timeFilter(time) GROUP BY $__timeGroup(time, '5m'), measurement ORDER BY 1
Der folgende Beispielcode zeigt die zweite Abfrage.
SELECT $__timeGroup(time, '5m') as time, measurement + ' - value two' as metric, avg(valueTwo) as valueTwo FROM metric_values GROUP BY $__timeGroup(time, '5m'), measurement ORDER BY 1
Gespeicherte Prozedur, die Zeit im Epochenformat verwendet
Sie können eine gespeicherte Prozedur definieren, die alle Daten zurückgibt, die Sie zum Rendern von vier Serien in einem Grafikfeld wie oben benötigen. In diesem Fall akzeptiert die gespeicherte Prozedur zwei Parameter @from
und @to
int
Datentypen, bei denen es sich um einen Zeitraum (von bis) im Epochenformat handeln sollte, der verwendet wird, um die Daten zu filtern, die von der gespeicherten Prozedur zurückgegeben werden sollen.
Dies ahmt die Ausdrücke $__timeGroup(time, '5m')
in den Ausdrücken „Auswählen“ und „Gruppieren nach“ nach, weshalb zahlreiche lange Ausdrücke benötigt werden. Diese könnten, falls gewünscht, in MSSQL-Funktionen extrahiert werden.
CREATE PROCEDURE sp_test_epoch( @from int, @to int ) AS BEGIN SELECT cast(cast(DATEDIFF(second, {d '1970-01-01'}, DATEADD(second, DATEDIFF(second,GETDATE(),GETUTCDATE()), time))/600 as int)*600 as int) as time, measurement + ' - value one' as metric, avg(valueOne) as value FROM metric_values WHERE time >= DATEADD(s, @from, '1970-01-01') AND time <= DATEADD(s, @to, '1970-01-01') GROUP BY cast(cast(DATEDIFF(second, {d '1970-01-01'}, DATEADD(second, DATEDIFF(second,GETDATE(),GETUTCDATE()), time))/600 as int)*600 as int), measurement UNION ALL SELECT cast(cast(DATEDIFF(second, {d '1970-01-01'}, DATEADD(second, DATEDIFF(second,GETDATE(),GETUTCDATE()), time))/600 as int)*600 as int) as time, measurement + ' - value two' as metric, avg(valueTwo) as value FROM metric_values WHERE time >= DATEADD(s, @from, '1970-01-01') AND time <= DATEADD(s, @to, '1970-01-01') GROUP BY cast(cast(DATEDIFF(second, {d '1970-01-01'}, DATEADD(second, DATEDIFF(second,GETDATE(),GETUTCDATE()), time))/600 as int)*600 as int), measurement ORDER BY 1 END
Dann können Sie die folgende Abfrage für Ihr Grafikpanel verwenden.
DECLARE @from int = $__unixEpochFrom(), @to int = $__unixEpochTo() EXEC dbo.sp_test_epoch @from, @to
Gespeicherte Prozedur, die Uhrzeit im Datetime-Format verwendet
Sie können eine gespeicherte Prozedur definieren, die alle Daten zurückgibt, die Sie zum Rendern von vier Serien in einem Grafikfeld wie oben benötigen. In diesem Fall akzeptiert die gespeicherte Prozedur zwei Parameter @from
und @to
datetime
Datentypen, bei denen es sich um einen Zeitraum (von-bis) handeln sollte, der verwendet wird, um die Daten zu filtern, die aus der gespeicherten Prozedur zurückgegeben werden sollen.
Dies ahmt die Ausdrücke $__timeGroup(time, '5m')
in den Ausdrücken „Auswählen“ und „Gruppieren nach“ nach, weshalb zahlreiche lange Ausdrücke benötigt werden. Diese könnten, falls gewünscht, in MSSQL-Funktionen extrahiert werden.
CREATE PROCEDURE sp_test_datetime( @from datetime, @to datetime ) AS BEGIN SELECT cast(cast(DATEDIFF(second, {d '1970-01-01'}, time)/600 as int)*600 as int) as time, measurement + ' - value one' as metric, avg(valueOne) as value FROM metric_values WHERE time >= @from AND time <= @to GROUP BY cast(cast(DATEDIFF(second, {d '1970-01-01'}, time)/600 as int)*600 as int), measurement UNION ALL SELECT cast(cast(DATEDIFF(second, {d '1970-01-01'}, time)/600 as int)*600 as int) as time, measurement + ' - value two' as metric, avg(valueTwo) as value FROM metric_values WHERE time >= @from AND time <= @to GROUP BY cast(cast(DATEDIFF(second, {d '1970-01-01'}, time)/600 as int)*600 as int), measurement ORDER BY 1 END
Dann können Sie die folgende Abfrage für Ihr Grafikpanel verwenden.
DECLARE @from datetime = $__timeFrom(), @to datetime = $__timeTo() EXEC dbo.sp_test_datetime @from, @to
Warnfunktion
Zeitreihenabfragen sollten unter Alarmbedingungen funktionieren. Abfragen im Tabellenformat werden in Warnungsregelbedingungen noch nicht unterstützt.