Conectarse a una fuente de datos de Microsoft SQL Server - Amazon Managed Grafana

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Conectarse a una fuente de datos de Microsoft SQL Server

Utilice la fuente de datos de Microsoft SQL Server (MSSQL) para consultar y visualizar datos de cualquier Microsoft SQL Server 2005 o posterior, incluida Microsoft Azure SQL Database.

importante

La versión 8.0 de Grafana cambia la estructura de datos subyacente de los marcos de datos de Microsoft SQL Server, Postgres y MySQL. Como resultado, el resultado de una consulta de series temporales se devuelve en un formato ancho. Para obtener más información, consulte Formato ancho en la documentación de los marcos de datos de Grafana.

Para que sus visualizaciones funcionen como lo hacían antes, puede que tenga que realizar algunas migraciones manuales. Una solución está documentada en Github en Postgres/MySQL/MSSQL: Un cambio radical en la versión 8.0 relacionado con las consultas de series temporales y el orden de las columnas de datos.

Añadir la fuente de datos

  1. Abre el menú lateral seleccionando el icono de Grafana en el encabezado superior.

  2. En el menú lateral, debajo del enlace Configuración, encontrarás un enlace de Fuentes de datos.

  3. Pulse el botón + Añadir fuente de datos en el encabezado superior.

  4. Seleccione Microsoft SQL Server en la lista desplegable Tipo.

Opciones de fuente de datos

Nombre Descripción
Name El nombre de la fuente de datos. Así es como se ve la fuente de datos en los paneles y las consultas.
Default La fuente de datos predeterminada significa que se preseleccionará para los nuevos paneles.
Host La dirección IP o el nombre de host y el puerto opcional de su instancia de MSSQL. Si se omite el puerto, se usará el 1433 predeterminado.
Database Nombre de su base de datos MSSQL.
User Nombre de usuario/nombre de usuario de la base de datos.
Password Contraseña del usuario de la base de datos.
Encrypt Esta opción determina si se negociará una conexión SSL TCP/IP segura con el servidor, o en qué medida, de forma predeterminada false (Grafana v5.4+).
Max open El número máximo de conexiones abiertas a la base de datos, predeterminado unlimited (Grafana v5.4+).
Max idle El número máximo de conexiones en el grupo de conexiones inactivas, predeterminado 2 (Grafana v5.4+).
Max lifetime El tiempo máximo en segundos que se puede reutilizar una conexión; el valor predeterminado es de /4 horas. 14400

Intervalo de tiempo mínimo

Límite inferior para las $_interval $_interval_ms variables. Se recomienda configurar la frecuencia de escritura, por ejemplo, 1m si los datos se escriben cada minuto. Esta opción también se puede anular o configurar en un panel de control, en las opciones de fuentes de datos. Este valor debe tener el formato de un número seguido de un identificador de tiempo válido; por ejemplo, 1m (1 minuto) o 30s (30 segundos). Se admiten los siguientes identificadores de tiempo.

Identificador Descripción
y Año
M Mes
w Semana
d Día
h Hora
m Minuto
s Segundo
ms Milisegundos

Permisos de usuario de la base

importante

Al usuario de la base de datos que especifique al agregar la fuente de datos solo se le deben conceder los permisos SELECT en la base de datos y las tablas especificadas que desee consultar. Grafana no valida que la consulta sea segura. La consulta puede incluir cualquier sentencia SQL. Por ejemplo, se DROP TABLE user; ejecutarían sentencias como DELETE FROM user; y. Para evitar esto, le recomendamos encarecidamente que cree un usuario de MSSQL específico con permisos restringidos.

El siguiente código de ejemplo muestra la creación de un usuario de MSSQL específico con permisos restringidos.

CREATE USER grafanareader WITH PASSWORD 'password' GRANT SELECT ON dbo.YourTable3 TO grafanareader

Asegúrese de que el usuario no reciba ningún permiso no deseado del rol público.

Problemas conocidos

Si utilizas una versión anterior de Microsoft SQL Server, como 2008 y 2008R2, es posible que tengas que deshabilitar el cifrado para poder conectarte. Si es posible, le recomendamos que utilice el último service pack disponible para lograr una compatibilidad óptima.

Editor de consultas

Encontrarás el editor de consultas de MSSQL en la pestaña de métricas del modo de edición del gráfico, Singlestat o panel de tablas. Para entrar en el modo de edición, elija el título del panel y, a continuación, elija Editar. El editor le permite definir una consulta SQL para seleccionar los datos que se van a visualizar.

  1. Seleccione Formatear como Time series (para usarlo en los paneles Graph o Singlestat, entre otros) o Table (para usarlo en el panel Tabla, entre otros).

  2. Este es el editor real en el que escribes tus consultas SQL.

  3. Muestra la sección de ayuda para MSSQL debajo del editor de consultas.

  4. Muestra la consulta SQL que se ejecutó. Estará disponible primero después de que se haya ejecutado correctamente la consulta.

  5. Agregue una consulta adicional donde se muestre un editor de consultas adicional.

Macros

Para simplificar la sintaxis y permitir partes dinámicas, como los filtros de intervalo de fechas, la consulta puede contener macros.

Ejemplo de macro Descripción
$__time(dateColumn) Se reemplazará por una expresión para cambiar el nombre de la columna a tiempo. Por ejemplo, DateColumn como hora.
$__timeEpoch(dateColumn) Se reemplazará por una expresión para convertir un tipo de columna DATETIME en una marca de tiempo de Unix y cambiarle el nombre a hora. Por ejemplo, DATEDIFF (segundo, «1970-01-01", DateColumn) como hora.
$__timeFilter(dateColumn) Se reemplazará por un filtro de intervalo de tiempo con el nombre de columna especificado. Por ejemplo, DateColumn ESTÁ ENTRE «2017-04-21T 05:01:17 Z» Y «2017-04-21T 05:06:17 Z».
$__timeFrom() Se sustituirá por el inicio de la selección de hora actualmente activa. Por ejemplo, «2017-04-21T 05:01:17 Z».
$__timeTo() Se sustituirá por el final de la selección de tiempo actualmente activa. Por ejemplo, «2017-04-21T 05:06:17 Z».
$__timeGroup(dateColumn,'5m'[, fillvalue]) Se sustituirá por una expresión utilizable en la cláusula GROUP BY. Si se proporciona un valor de relleno nulo o flotante, se rellenarán automáticamente las series vacías en un intervalo de tiempo con ese valor. Por ejemplo, CAST (ROUND (DATEDIFF (second, «1970-01-01", time_column) /300.0, 0) as bigint) *300.
$__timeGroup(dateColumn,'5m', 0) Igual que el anterior, pero con un parámetro de relleno, por lo que grafana añadirá los puntos que falten en esa serie y usará 0 como valor.
$__timeGroup(dateColumn,'5m', NULL) Igual que el anterior, pero se usará NULL como valor para los puntos faltantes.
$__timeGroup(dateColumn,'5m', previous) Igual que el anterior, pero el valor anterior de esa serie se utilizará como valor de relleno si no se ha visto ningún valor, pero se utilizará NULL (solo disponible en Grafana 5.3+).

El editor de consultas tiene un enlace SQL generado que aparece después de ejecutar una consulta, mientras se encuentra en el modo de edición de panel. Si lo eliges, se expandirá y mostrará la cadena SQL interpolada sin procesar que se ejecutó.

Consultas de tabla

Si la opción de consulta está establecida en Formatear como tabla, básicamente puede realizar cualquier tipo de consulta SQL. El panel de tablas mostrará automáticamente los resultados de las columnas y filas que devuelva la consulta.

El siguiente código de ejemplo muestra una tabla de base de datos.

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')

El siguiente código de ejemplo muestra una consulta.

SELECT * FROM [mssql_types]

Puede controlar el nombre de las columnas del panel Tabla mediante la sintaxis de selección de columnas de AS SQL normal, como se muestra en el siguiente código de ejemplo.

SELECT c_bit as [column1], c_tinyint as [column2] FROM [mssql_types]

El panel de tabla resultante:

Consultas de series temporales

Si establece el formato como serie temporal, para usarla en el panel de gráficos, por ejemplo, la consulta debe tener una columna con un nombre time que devuelva una fecha y hora de SQL o cualquier tipo de datos numéricos que representen la época de Unix en segundos. Puede devolver un nombre de columna metric que se utilice como nombre métrico para la columna de valores. Cualquier columna excepto time y metric se trata como una columna de valores. Si omite la metric columna, el nombre de la columna de valores será el nombre de la métrica. Puede seleccionar varias columnas de valores, cada una tendrá su nombre como métrica. Si devuelve varias columnas de valores y una columna con un nombremetric, esta columna se utilizará como prefijo para el nombre de la serie.

Los conjuntos de resultados de las consultas de series temporales se deben ordenar por tiempo.

El siguiente código de ejemplo muestra una tabla de base de datos.

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)

El siguiente código de ejemplo muestra una metric columna value y una.

SELECT time, valueOne, measurement as metric FROM metric_values WHERE $__timeFilter(time) ORDER BY 1

Si la consulta anterior se utiliza en un panel de gráficos, se generan dos series denominadas Metric A y Metric B con los valores valueOne y valueTwo trazadas sobre time ellas.

El siguiente código de ejemplo muestra varias value columnas.

SELECT time, valueOne, valueTwo FROM metric_values WHERE $__timeFilter(time) ORDER BY 1

Cuando la consulta anterior se utilice en un panel de gráficos, se generarán dos series denominadas Metric A y Metric B con los valores valueOne valueTwo trazados sobre time ellos.

El siguiente código de ejemplo muestra el uso de la macro $__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

Si la consulta anterior se utiliza en un panel de gráficos, se generan dos series denominadas Metric A y Metric B con los valores valueOne y valueTwo trazadas sobre ellas. time Si hay dos series sin un valor en una ventana de tres minutos, se mostrará una línea entre esas dos líneas. Te darás cuenta de que la gráfica de la derecha nunca baja a cero.

El siguiente código de ejemplo muestra el uso de la macro $__TimeGroup con el parámetro fill establecido en cero.

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

Cuando se utiliza esta consulta en un panel de gráficos, el resultado son dos series denominadas Metric A y Metric B sobre las que se representa la suma de los valueTwo números. time Cualquier serie que no tenga un valor en una ventana de 3 minutos tendrá un valor de cero, que verá representado en el gráfico de la derecha.

Creación de plantillas

En lugar de codificar elementos como el nombre del servidor, la aplicación y el sensor en las consultas de métricas, puede utilizar variables en su lugar. Las variables se muestran como cuadros de selección desplegables en la parte superior del panel de control. Puedes usar estos cuadros desplegables para cambiar los datos que se muestran en tu panel de control.

Para obtener más información sobre las plantillas y las variables de plantilla, consulte. Plantillas y variables

Variable de consulta

Si agrega una variable de plantilla de este tipoQuery, puede escribir una consulta de MSSQL que devuelva datos como nombres de medidas, nombres clave o valores clave que se muestran en un cuadro de selección desplegable.

Por ejemplo, puede tener una variable que contenga todos los valores de la hostname columna de una tabla si especifica una consulta como esta en la configuración de consulta de la variable de plantilla.

SELECT hostname FROM host

Una consulta puede devolver varias columnas y Grafana creará automáticamente una lista a partir de ellas. Por ejemplo, la siguiente consulta devolverá una lista con los valores de hostname yhostname2.

SELECT [host].[hostname], [other_host].[hostname2] FROM host JOIN other_host ON [host].[city] = [other_host].[city]

Otra opción es una consulta que puede crear una variable clave/valor. La consulta debe devolver dos columnas __text denominadas y. __value El valor de la __text columna debe ser único (si no lo es, se utilizará el primer valor). Las opciones de la lista desplegable tendrán un texto y un valor que te permitirán tener un nombre descriptivo como texto y un identificador como valor. Un ejemplo de consulta con hostname como texto y id como valor:

SELECT hostname __text, id __value FROM host

También puede crear variables anidadas. Por ejemplo, si tuviera otra variable llamadaregion. A continuación, puede hacer que la variable hosts muestre solo los hosts de la región actualmente seleccionada con una consulta como esta (si region es una variable con varios valores, utilice el operador de IN comparación en lugar de = compararla con varios valores).

SELECT hostname FROM host WHERE region IN ($region)

Uso de variables en las consultas

nota

Los valores de las variables de plantilla solo se citan cuando la variable de plantilla es amulti-value.

Si la variable es una variable con varios valores, utilice el operador de IN comparación en lugar de = compararla con varios valores.

Hay dos sintaxis:

$<varname>Ejemplo con una variable de plantilla llamadahostname:

SELECT atimestamp time, aint value FROM table WHERE $__timeFilter(atimestamp) and hostname in($hostname) ORDER BY atimestamp

[[varname]]Ejemplo con una variable de plantilla llamadahostname:

SELECT atimestamp as time, aint as value FROM table WHERE $__timeFilter(atimestamp) and hostname in([[hostname]]) ORDER BY atimestamp

Desactivar las comillas para variables con varios valores

Grafana crea automáticamente una cadena entrecomillada y separada por comas para variables con varios valores. Por ejemplo, si server02 se selecciona server01 y, se formateará como:. 'server01', 'server02' Para desactivar las comillas, use la opción de formato csv para las variables.

${servers:csv}

Para obtener más información sobre las opciones de formato variable, consultePlantillas y variables.

Annotations

Puede utilizar las anotaciones para superponer información detallada sobre los eventos sobre los gráficos. Las consultas de anotación se añaden a través del menú del panel de control o la vista de anotaciones. Para obtener más información, consulte Annotations.

Columnas:

Nombre Descripción
time El nombre del campo de fecha y hora. Puede ser una columna con un tipo de datos de fecha y hora nativo de SQL o un valor de época.
timeend Nombre opcional del campo de fecha y hora de finalización. Puede ser una columna con un tipo de datos de fecha y hora de SQL nativo o un valor de época.
text Campo de descripción del evento.
tags Nombre de campo opcional para usar en las etiquetas de eventos como cadena separada por comas.

El siguiente código de ejemplo muestra las tablas de la base de datos.

CREATE TABLE [events] ( time_sec bigint, description nvarchar(100), tags nvarchar(100), )

También utilizamos la tabla de base de datos definida enConsultas de series temporales.

El siguiente código de ejemplo muestra una consulta que utiliza una columna de tiempo con valores de época.

SELECT time_sec as time, description as [text], tags FROM [events] WHERE $__unixEpochFilter(time_sec) ORDER BY 1

El siguiente código de ejemplo muestra una consulta de región que utiliza columnas de hora y fin de tiempo con valores de época.

SELECT time_sec as time, time_end_sec as timeend, description as [text], tags FROM [events] WHERE $__unixEpochFilter(time_sec) ORDER BY 1

El siguiente código de ejemplo muestra una consulta que utiliza una columna de hora del tipo de datos de fecha y hora nativo de SQL.

SELECT time, measurement as text, convert(varchar, valueOne) + ',' + convert(varchar, valueTwo) as tags FROM metric_values WHERE $__timeFilter(time_column) ORDER BY 1

Soporte para procedimientos almacenados

Se ha comprobado que los procedimientos almacenados funcionan. Sin embargo, puede haber casos extremos en los que no funcione como cabría esperar. Los procedimientos almacenados deberían ser compatibles con las consultas de tablas, series temporales y anotaciones, siempre y cuando se utilice el mismo nombre para las columnas y se devuelvan los datos en el mismo formato que el descrito anteriormente en las secciones correspondientes.

Las funciones de macro no funcionarán dentro de un procedimiento almacenado.

Ejemplos

En los ejemplos siguientes, la tabla de la base de datos se define en las consultas de series temporales. Supongamos que desea visualizar cuatro series en un panel de gráficos, como todas las combinaciones de columnasvalueOne, valueTwo ymeasurement. El panel gráfico de la derecha visualiza lo que queremos lograr. Para resolver esto, debes usar dos consultas:

El siguiente código de ejemplo muestra la primera consulta.

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

El siguiente código de ejemplo muestra la segunda consulta.

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

Procedimiento almacenado que utiliza la hora en formato de época

Puede definir un procedimiento almacenado que devuelva todos los datos que necesite para representar cuatro series en un panel gráfico como el anterior. En este caso, el procedimiento almacenado acepta dos parámetros @from y tipos de int datos@to, que deben ser un rango de tiempo (de a) en formato de época que se utilizará para filtrar los datos que se devolverán del procedimiento almacenado.

Esto imita las expresiones $__timeGroup(time, '5m') de seleccionar y agrupar por, por lo que se necesitan numerosas expresiones largas. Si se desea, se pueden extraer a funciones de MSSQL.

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

A continuación, puede utilizar la siguiente consulta para su panel de gráficos.

DECLARE @from int = $__unixEpochFrom(), @to int = $__unixEpochTo() EXEC dbo.sp_test_epoch @from, @to

Procedimiento almacenado que utiliza la hora en formato de fecha y hora

Puede definir un procedimiento almacenado que devuelva todos los datos que necesite para representar cuatro series en un panel gráfico como el anterior. En este caso, el procedimiento almacenado acepta dos parámetros @from y @to dos tipos de datetime datos, que deben ser un intervalo de tiempo (de a) que se utilizará para filtrar los datos que se devolverán del procedimiento almacenado.

Esto imita las expresiones $__timeGroup(time, '5m') de seleccionar y agrupar por, por lo que se necesitan numerosas expresiones largas. Si se desea, se pueden extraer a funciones de MSSQL.

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

A continuación, puede utilizar la siguiente consulta para su panel de gráficos.

DECLARE @from datetime = $__timeFrom(), @to datetime = $__timeTo() EXEC dbo.sp_test_datetime @from, @to

Alertas

Las consultas de series temporales deberían funcionar en condiciones de alerta. Las consultas con formato de tabla aún no se admiten en las condiciones de las reglas de alerta.