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.
Conexión a un origen de datos de SAP HANA
SAP HANA
Con el complemento de SAP HANA Grafana Enterprise, puede visualizar sus datos de SAP HANA junto con todos sus demás orígenes de datos en Grafana, así como datos de registro y métricas en contexto. Este complemento incluye un editor de consultas integrado, admite anotaciones y le permite establecer umbrales de alerta, controlar el acceso, establecer permisos y mucho más.
nota
Este origen de datos es solo para Grafana Enterprise. Para obtener más información, consulte Administración del acceso a los complementos empresariales.
Además, en los espacios de trabajo compatibles con la versión 9 o posterior, es posible que se deba instalar el complemento adecuado para este origen de datos. Para obtener más información, consulte Ampliación de su espacio de trabajo con complementos.
Características
-
Editor de consultas: el complemento viene con un editor de consultas SQL integrado con resaltado de sintaxis que le permite visualizar series temporales o datos de tablas y completar automáticamente las macros básicas de Grafana.
-
Permisos de orígenes de datos: controle quién puede ver o consultar los datos de SAP HANA en Grafana.
-
Anotaciones: superponga eventos o datos de SAP HANA en cualquier gráfico de Grafana para correlacionar los eventos con otros datos del gráfico.
-
Alertas: configure almacenes de métricas basados en alertas en SAP HANA.
-
Variables para consultas: cree variables de plantilla en Grafana, que se basen en datos de SAP HANA, e incluya variables en las consultas de SAP HANA para que los paneles sean interactivos.
Adición del origen de datos
-
Abra la consola de Grafana en el espacio de trabajo de Amazon Managed Grafana y asegúrese de haber iniciado sesión.
-
En el menú lateral, en Configuración (el icono con forma de engranaje), seleccione Orígenes de datos.
-
Elija Agregar origen de datos.
nota
Si no ve el enlace Orígenes de datos en el menú lateral, su usuario actual no tiene el rol
Admin
. -
Seleccione SAP HANA de la lista de orígenes de datos.
-
En el editor de configuración, ingrese lo siguiente:
-
En Dirección del servidor, proporcione la dirección de la instancia de SAP HANA. Ejemplo:
xxxxxxx-xxxx-xxxx-xxxx-xxxxxxx.hana.trial-us10.hanacloud.ondemand.com
. -
En Puerto del servidor, proporcione el puerto de la instancia de SAP HANA.
-
En Nombre de usuario, ingrese el nombre de usuario que se utilizará para conectarse a la instancia de SAP HANA.
-
En Contraseña, escriba la contraseña para este usuario.
-
(Opcional) Habilite Omitir la verificación de TLS si desea omitir la verificación de TLS.
-
(Opcional) Habilite Autenticación del cliente TLS si necesita proporcionar un certificado y una clave de cliente.
-
(Opcional) Habilite Con un certificado de CA si desea habilitar la verificación de los certificados TLS autofirmados.
-
(Opcional) En Esquema predeterminado, ingrese el esquema predeterminado que se utilizará. Si lo omite, tendrá que especificar el esquema en cada consulta.
-
Accesos y permisos
Para conectar Grafana a SAP HANA, utilice credenciales dedicadas. Proporcione al usuario únicamente los permisos necesarios. En primer lugar, cree un usuario restringido con nombre de usuario y contraseña. La siguiente consulta es un ejemplo de creación de un usuario restringido. Esta consulta también deshabilita el cambio forzoso de la contraseña.
CREATE RESTRICTED USER <USER> PASSWORD <PASSWORD> NO FORCE_FIRST_PASSWORD_CHANGE;
A continuación, permita al usuario conectar el sistema a través de clientes como Grafana con lo siguiente:
ALTER USER <USER> ENABLE CLIENT CONNECT;
Por último, dé al usuario acceso a las vistas, tablas y esquemas necesarios.
ALTER USER <USER> GRANT ROLE PUBLIC; GRANT SELECT ON SCHEMA <SCHEMA> TO <USER>;
Permisos de nivel de usuario
Limite el acceso a SAP HANA haciendo clic en la pestaña Permisos de la página de configuración del origen de datos para habilitar los permisos del origen de datos. En la página de permisos, los administradores pueden habilitar los permisos y restringir los permisos de consulta a usuarios y equipos específicos.
Editor de consultas
El complemento de Grafana de SAP HANA incluye un editor de consultas SQL en el que puede ingresar cualquier consulta de HANA. Si la consulta devuelve datos de series temporales, puede formatearlos como series temporales para visualizarlos en un panel de gráficos. El editor de consultas permite completar automáticamente las macros de Grafana compatibles y resaltar la sintaxis de la consulta SQL.
Anotaciones
Puede utilizar las consultas de SAP HANA como orígenes de las anotaciones de Grafana. La consulta de anotaciones debe devolver al menos una columna de tiempo y una columna de texto. Para obtener más información acerca de las anotaciones, consulte Annotations.
Creación de anotaciones desde SAP HANA
-
Seleccione el icono con forma de engranaje Configuración del panel.
-
En el menú de la izquierda, seleccione Anotaciones, Nuevo.
-
En el menú desplegable Origen de datos, seleccione su instancia de origen de datos de SAP HANA.
-
En el campo Consulta, ingrese una consulta de SAP HANA que devuelva al menos un campo de tiempo y un campo de texto.
-
En el menú desplegable Dar formato como, seleccione Serie temporal.
-
Para cada anotación, configure los campos Desde.
Plantillas y variables
Para agregar una nueva variable de consulta de SAP HANA, consulte Adición de una variable de consulta. Utilice su origen de datos de SAP HANA como origen de datos.
La siguiente consulta de ejemplo devuelve la lista definida de username
de la tabla users
.
select distinct("username") from "users"
nota
Asegúrese de seleccionar solo una columna en la consulta de variables. Si la consulta devuelve dos columnas, la primera columna se utilizará como valor de visualización y la segunda como valor real de la variable. Si la consulta devuelve más de dos columnas, se rechazarán.
Plantillas y variables
Puede usar cualquier variable de Grafana en su consulta. En los siguientes ejemplos, se muestra cómo utilizar la variable única o múltiple en la consulta.
-- For example, following query select * from "users" where "city" = ${city} -- will be translated into select * from "users" where "city" = 'london' --- where you can see ${city} variable translated into actual value in the variable
Al igual que el texto, las variables también funcionan para los campos numéricos. En el siguiente ejemplo, ${age}
es una variable de cuadro de texto en la que acepta números y, a continuación, los compara con el campo numérico de la tabla.
select * from "users" where "age" > ${age} --- wil be translated into select * from "users" where "age" > '36'
Si la variable devuelve varios valores, puede utilizarla en la condición in
de la consulta de SAP HANA, como se muestra a continuación. Tenga en cuenta los corchetes que rodean la variable para que la condición where in
sea válida en SAP HANA.
select * from "users" where "city" in (${cities}) --- will be translated into select * from "users" where "city" in ('london','perth','delhi') --- where you can see ${cities} turned into a list of grafana variables selected. --- You can also write the same query using shorthand notation as shown below select * from "users" where "city" in ($cities)
Macros
-
$__timeFilter(<time_column>)
: aplica el intervalo de tiempo de Grafana a la columna especificada cuando se usa en la consulta sin procesar. Aplicable a las columnas de date/timestamp/long tiempo. -
$__timeFilter(<time_column>, <format>)
: igual que lo mencionado anteriormente. Sin embargo, le permite especificar el formato de la columna time_column almacenada en la base de datos. -
$__timeFilter(<time_column>, "epoch", <format>)
: igual que lo mencionado anteriormente, pero se puede usar cuando la columna de tiempo está en época. El formato puede ser “s”, “ms” y “ns”. -
$__fromTimeFilter(<time_column>)
: igual que lo mencionado anteriormente, pero se puede usar cuando la columna de tiempo está en época. El formato puede ser “s”, “ms” y “ns”. -
$__fromTimeFilter(<time_column>, <comparison_predicate>)
: igual que lo mencionado anteriormente, pero se puede especificar comparison_predicate. -
$__fromTimeFilter(<time_column>, <format>)
: igual que lo mencionado anteriormente, pero se puede especificar el formato de la columna de tiempo. -
$__fromTimeFilter(<time_column>, <format>, <comparison_predicate>)
: igual que lo mencionado anteriormente, pero se puede especificar comparison_predicate. -
$__toTimeFilter(<time_column>)
: devuelve la condición de tiempo basada en el tiempo de Grafana sobre un campo de tiempo. -
$__toTimeFilter(<time_column>, <comparison_predicate>)
: igual que lo mencionado anteriormente, pero se puede especificar comparison_predicate. -
$__toTimeFilter(<time_column>, <format>)
: igual que lo mencionado anteriormente, pero se puede especificar el formato de la columna de tiempo. -
$__toTimeFilter(<time_column>, <comparison_predicate>)
: igual que lo mencionado anteriormente, pero se puede especificar comparison_predicate. -
$__timeGroup(<time_column>, <interval>)
: expande la columna de tiempo en grupos de intervalos. Aplicable a las columnas de date/timestamp/long tiempo.
Macro $__timeFilter(<time_column>)
En el siguiente ejemplo se explica la macro $__timeFilter(<time_column>)
:
- In the following example, the query select ts, temperature from weather where $__timeFilter(ts) --- will be translated into select ts, temperature from weather where ts > '2021-02-24T12:52:48Z' AND ts < '2021-03-24T12:52:48Z' --- where you can see the grafana dashboard's time range is applied to the column ts in the query.
Macro $__timeFilter(<time_column>, <format>)
En algunos casos, las columnas de tiempo de la base de datos se almacenan en formatos personalizados. En el siguiente ejemplo se explica la macro $__timeFilter(<time_column>,
<format>)
, que ayuda a filtrar las marcas de tiempo personalizadas en función del selector de tiempo de Grafana:
SELECT TO_TIMESTAMP("TS",'YYYYMMDDHH24MISS') AS METRIC_TIME , "VALUE" FROM "SCH"."TBL" WHERE $__timeFilter("TS","YYYYMMDDHH24MISS") -- TS is in 20210421162012 format SELECT TO_TIMESTAMP("TS",'YYYY-MON-DD') AS METRIC_TIME , "VALUE" FROM "SCH"."TBL" WHERE $__timeFilter("TS","YYYY-MON-DD") -- TS is in 2021-JAN-15 format
En la macro, el formato puede ser uno de los formatos de HANA válidos que coincidan con su columna de marcas de tiempo. Por ejemplo, YYYYMMDDHH24MISS
es un formato válido cuando los datos se almacenan en formato 20210421162012
.
Macro $__timeFilter(<time_column>, "epoch" <format>)
En algunos casos, las marcas de tiempo se almacenan como marcas de tiempo de época en su base de datos. En el siguiente ejemplo se explica la macro $__timeFilter(<time_column>,
"epoch" <format>)
, que ayuda a filtrar las marcas de tiempo de época en función del selector de tiempo de grafana. En la macro, el formato puede ser ms, s o ns. Si no se especifica, s se considerará el formato predeterminado.
SELECT ADD_SECONDS('1970-01-01', "TIMESTAMP") AS "METRIC_TIME", "VALUE" FROM "SCH"."TBL" WHERE $__timeFilter("TIMESTAMP","epoch") -- Example : TIMESTAMP field stored in epoch_second format 1257894000 SELECT ADD_SECONDS('1970-01-01', "TIMESTAMP") AS "METRIC_TIME", "VALUE" FROM "SCH"."TBL" WHERE $__timeFilter("TIMESTAMP","epoch","s") -- Example : TIMESTAMP field stored in epoch_second format 1257894000 SELECT ADD_SECONDS('1970-01-01', "TIMESTAMP"/1000) AS "METRIC_TIME", "VALUE" FROM "SCH"."TBL" WHERE $__timeFilter("TIMESTAMP","epoch","ms") -- Example : TIMESTAMP field stored in epoch_ms format 1257894000000 SELECT ADD_SECONDS('1970-01-01', "TIMESTAMP"/1000000000) AS "METRIC_TIME", "VALUE" FROM "SCH"."TBL" WHERE $__timeFilter("TIMESTAMP","epoch","ns") -- Example : TIMESTAMP field stored in epoch_nanoseconds format 1257894000000000000
En lugar de usar el tercer argumento de $__timeFilter, puede usar epoch_s, epoch_ms o epoch_ns como segundo argumento.
SELECT ADD_SECONDS('1970-01-01', "TIMESTAMP"/1000) AS "METRIC_TIME", "VALUE" FROM "SCH"."TBL" WHERE $__timeFilter("TIMESTAMP","epoch","ms") -- is same as SELECT ADD_SECONDS('1970-01-01', "TIMESTAMP"/1000) AS "METRIC_TIME", "VALUE" FROM "SCH"."TBL" WHERE $__timeFilter("TIMESTAMP","epoch_ms")
Macros $__ fromTimeFilter () y $__ toTimeFilter ()
La macro $__fromTimeFilter()
se expande a una condición sobre un campo de tiempo basado en el tiempo del selector de tiempo de Grafana.
Esto acepta tres parámetros. El primer parámetro es el nombre del campo de tiempo. Puede pasar comparison_predicate o el formato de la columna de tiempo como segundo argumento. Si quiere pasar ambos, el formato es el segundo parámetro y use comparison_predicate como tercer parámetro.
<format>Si no se especifica el formato, el complemento asumirá que la columna de tiempo es de y, a continuacióntimestamp/date type. If your time column is stored in any other format than timestamp/date, pasará el formato como segundo argumento. <format>puede ser epoch_s, epoch_ms, epoch_ns o cualquier otro formato personalizado similar. YYYY-MM-DD
<comparison_predicate>: parámetro opcional. Si no se pasa, el complemento usará > como predicado de comparación. <comparison_predicate> puede ser uno de los siguientes: =, !=, <>, <, <=, >, >=
$__toTimeFilter()
funciona igual fromTimeFilter que $__ (). En lugar de usar el tiempo de inicio de Grafana, usará el tiempo de finalización. Además, el predicado de comparación predeterminado será <.
$__timeGroup(<time_column>, <interval>)
Por ejemplo, la macro $__timeGroup(timecol,1h) se expande a SERIES_ROUND("timecol", 'INTERVAL 1 HOUR') en la consulta.
En el siguiente ejemplo se explica $__timeGroup(<time_column>,
<interval>) macro.
SELECT $__timeGroup(timestamp,1h), "user", sum("value") as "value" FROM "salesdata" WHERE $__timeFilter("timestamp") GROUP BY $__timeGroup(timestamp,1h), "user" ORDER BY $__timeGroup(timestamp,1h) ASC
Esto se traduce en la siguiente consulta, donde $__timeGroup(timestamp,1h)
se amplía a SERIES_ROUND("timestamp", 'INTERVAL 1 HOUR')
.
SELECT SERIES_ROUND("timestamp", 'INTERVAL 1 HOUR') as "timestamp", "user", sum("value") as "value" FROM "salesdata" WHERE "timestamp" > '2020-01-01T00:00:00Z' AND "timestamp" < '2020-01-01T23:00:00Z' GROUP BY SERIES_ROUND("timestamp", 'INTERVAL 1 HOUR'), "user" ORDER BY "timestamp" ASC
nota
Cuando utilice group by con la macro $__timeGroup, asegúrese de que al seleccionar y ordenar por campos se le asigne el mismo nombre que al agrupar por campo. De lo contrario, es posible que HANA no reconozca la consulta.
Si no quiere codificar de manera rígida el intervalo en la función $__timeGroup(), puede dejar eso en manos de Grafana especificando $__interval como su intervalo. Grafana calculará ese intervalo a partir del intervalo de tiempo del panel. Consulta de ejemplo:
SELECT $__timeGroup(timestamp, $__interval), sum("value") as "value" FROM "salesdata" WHERE $__timeFilter("timestamp") GROUP BY $__timeGroup(timestamp, $__interval) ORDER BY $__timeGroup(timestamp, $__interval) ASC
Esa consulta se traduce en la siguiente consulta en función del intervalo de tiempo del panel.
SELECT SERIES_ROUND("timestamp", 'INTERVAL 1 MINUTE'), sum("value") as "value" FROM "salesdata" WHERE "timestamp" > '2019-12-31T23:09:14Z' AND "timestamp" < '2020-01-01T23:17:54Z' GROUP BY SERIES_ROUND("timestamp", 'INTERVAL 1 MINUTE') ORDER BY SERIES_ROUND("timestamp", 'INTERVAL 1 MINUTE') ASC
Alertas
Configuración de una alerta de SAP HANA en Grafana
-
Cree un panel de gráficos en su panel.
-
Cree una consulta de SAP HANA en formato de serie temporal.
-
Elija la pestaña Alerta y especifique los criterios de alerta.
-
Elija Probar regla para probar la consulta de alertas.
-
Especifique los destinatarios de la alerta, el mensaje y la gestión de errores.
-
Guarde el panel de control.
Alertas sobre datos que no son de series temporales
Para enviar alertas sobre datos que no sean de series temporales, utilice la macro TO_TIMESTAMP('${__to:date}')
para convertir las métricas que no son de series temporales en series temporales. Esto convertirá la métrica en una consulta de series temporales de un solo punto. El formato de la consulta se indica a continuación
SELECT TO_TIMESTAMP('${__to:date}'), <METRIC> FROM <TABLE≶ WHERE <YOUR CONDITIONS>
En el siguiente ejemplo, una tabla tiene cuatro campos denominados username, age, city y role. Esta tabla no tiene ningún campo de tiempo. Queremos notificar cuando el número de usuarios con el rol de desarrollador sea inferior a tres.
SELECT TO_TIMESTAMP('${__to:date}'), count(*) as "count" FROM ( SELECT 'John' AS "username", 32 AS "age", 'Chennai' as "city", 'dev' as "role" FROM dummy UNION ALL SELECT 'Jacob' AS "username", 32 AS "age", 'London' as "city", 'accountant' as "role" FROM dummy UNION ALL SELECT 'Ali' AS "username", 42 AS "age", 'Delhi' as "city", 'admin' as "role" FROM dummy UNION ALL SELECT 'Raja' AS "username", 12 AS "age", 'New York' as "city", 'ceo' as "role" FROM dummy UNION ALL SELECT 'Sara' AS "username", 35 AS "age", 'Cape Town' as "city", 'dev' as "role" FROM dummy UNION ALL SELECT 'Ricky' AS "username", 25 AS "age", 'London' as "city", 'accountant' as "role" FROM dummy UNION ALL SELECT 'Angelina' AS "username", 31 AS "age", 'London' as "city", 'cxo' as "role" FROM dummy ) WHERE "role" = 'dev'