Connectez-vous à une source de données SAP HANA - Amazon Managed Grafana

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Connectez-vous à une source de données SAP HANA

SAP HANA est une base de données en mémoire à hautes performances qui accélère les décisions et les actions en temps réel basées sur les données. Il est développé et commercialisé par SAP. Le plug-in de source de données SAP HANA vous permet de connecter votre instance SAP HANA à Grafana.

Avec le plugin SAP HANA Grafana Enterprise, vous pouvez visualiser vos données SAP HANA aux côtés de toutes vos autres sources de données dans Grafana, ainsi que les données de log et de métrique dans leur contexte. Ce plugin inclut un éditeur de requêtes intégré, prend en charge les annotations et vous permet de définir des seuils d'alerte, de contrôler l'accès, de définir des autorisations, etc.

Note

Cette source de données est réservée à Grafana Enterprise. Pour plus d’informations, consultez Gérer l'accès aux plug-ins d'entreprise.

En outre, dans les espaces de travail qui prennent en charge la version 9 ou une version plus récente, cette source de données peut nécessiter l'installation du plug-in approprié. Pour plus d’informations, consultez Étendez votre espace de travail avec des plugins.

Fonctionnalités

  • Éditeur de requêtes — Le plugin est livré avec un éditeur de requêtes SQL intégré avec surlignage syntaxique qui vous permet de visualiser des séries chronologiques ou des données de tables et de compléter automatiquement les macros Grafana de base.

  • Autorisations relatives aux sources de données : contrôlez qui peut consulter ou interroger les données SAP HANA dans Grafana.

  • Annotations — Superposez les événements ou les données SAP HANA sur n'importe quel graphe Grafana pour corréler les événements avec d'autres données du graphique.

  • Alertes — Définissez des magasins de métriques basés sur des alertes dans SAP HANA.

  • Variables pour les requêtes — Créez des variables modèles dans Grafana, basées sur les données SAP HANA, et incluez des variables dans les requêtes SAP HANA pour rendre les tableaux de bord interactifs.

Ajouter la source de données

  1. Ouvrez la console Grafana dans l'espace de travail Amazon Managed Grafana et assurez-vous que vous êtes connecté.

  2. Dans le menu latéral, sous Configuration (icône en forme de roue dentée), choisissez Sources de données.

  3. Choisissez Add data source.

    Note

    Si le lien Sources de données n'apparaît pas dans le menu latéral, cela signifie que votre utilisateur actuel n'a pas le Admin rôle.

  4. Sélectionnez SAP HANA dans la liste des sources de données.

  5. Dans l'éditeur Config, entrez les informations suivantes :

    • Pour Adresse du serveur, indiquez l'adresse de l'instance SAP HANA. Exemple :xxxxxxx-xxxx-xxxx-xxxx-xxxxxxx.hana.trial-us10.hanacloud.ondemand.com.

    • Pour le port du serveur, indiquez le port de l'instance SAP HANA.

    • Dans Nom d'utilisateur, entrez le nom d'utilisateur à utiliser pour vous connecter à l'instance SAP HANA.

    • Dans Mot de passe, entrez le mot de passe de cet utilisateur.

    • (Facultatif) Activez Ignorer la vérification TLS si vous souhaitez ignorer la vérification TLS.

    • (Facultatif) Activez l'authentification du client TLS si vous devez fournir un certificat client et une clé.

    • (Facultatif) Activez avec certificat CA si vous souhaitez activer la vérification des certificats TLS auto-signés.

    • (Facultatif) Dans Schéma par défaut, entrez le schéma par défaut à utiliser. Si vous omettez cela, vous devrez spécifier le schéma dans chaque requête.

Accès et autorisations

Pour connecter Grafana à SAP HANA, utilisez des informations d'identification dédiées. Fournissez uniquement les autorisations requises à l'utilisateur. Créez d'abord un utilisateur restreint avec un nom d'utilisateur et un mot de passe. La requête suivante est un exemple de création d'un utilisateur restreint. Cette requête désactive également le changement de mot de passe forcé.

CREATE RESTRICTED USER <USER> PASSWORD <PASSWORD> NO FORCE_FIRST_PASSWORD_CHANGE;

Ensuite, autorisez l'utilisateur à connecter le système via des clients tels que Grafana avec les éléments suivants :

ALTER USER <USER> ENABLE CLIENT CONNECT;

Enfin, donnez à l'utilisateur l'accès aux vues, tables et schémas nécessaires.

ALTER USER <USER> GRANT ROLE PUBLIC; GRANT SELECT ON SCHEMA <SCHEMA> TO <USER>;

Autorisations au niveau de l'utilisateur

Limitez l'accès à SAP HANA en cliquant sur l'onglet Autorisations de la page de configuration de la source de données pour activer les autorisations de source de données. Sur la page des autorisations, les administrateurs peuvent activer les autorisations et restreindre les autorisations de requête à des utilisateurs et à des équipes spécifiques.

Éditeur de requête

Le plugin SAP HANA Grafana est livré avec un éditeur de requêtes SQL dans lequel vous pouvez saisir toutes les requêtes HANA. Si votre requête renvoie des données de séries chronologiques, vous pouvez les formater sous forme de séries chronologiques pour les visualiser dans un panneau graphique. L'éditeur de requêtes permet de compléter automatiquement les macros Grafana prises en charge et de mettre en évidence la syntaxe de votre requête SQL.

Annotations

Vous pouvez utiliser les requêtes SAP HANA comme sources d'annotations Grafana. Votre requête d'annotation doit renvoyer au moins une colonne temporelle et une colonne de texte. Pour plus d'informations sur les annotations, consultezAnnotations.

Pour créer des annotations à partir de SAP HANA
  1. Choisissez l'icône représentant un engrenage dans les paramètres du tableau de bord.

  2. Dans le menu de gauche, choisissez Annotations, Nouveau.

  3. Dans le menu déroulant Source de données, sélectionnez votre instance de source de données SAP HANA.

  4. Dans le champ Requête, entrez une requête SAP HANA qui renvoie au moins un champ temporel et un champ de texte.

  5. Dans le menu déroulant Format en tant que, sélectionnez Série chronologique.

  6. Pour chaque annotation, configurez les champs From.

Modèles et variables

Pour ajouter une nouvelle variable de requête SAP HANA, consultezAjouter une variable de requête. Utilisez votre source de données SAP HANA comme source de données.

L'exemple de requête suivant renvoie la liste distincte des éléments username de la users table.

select distinct("username") from "users"
Note

Assurez-vous de ne sélectionner qu'une seule colonne dans votre requête variable. Si votre requête renvoie deux colonnes, la première colonne sera utilisée comme valeur d'affichage et la deuxième comme valeur réelle de la variable. Si votre requête renvoie plus de deux colonnes, elles seront rejetées.

Modèles et variables

Vous pouvez utiliser n'importe quelle variable Grafana dans votre requête. Les exemples suivants montrent comment utiliser la variable unique/multiple dans votre requête.

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

Tout comme le texte, les variables fonctionnent également pour les champs numériques. Dans l'exemple ci-dessous, il ${age} s'agit d'une variable de zone de texte dans laquelle elle accepte des nombres puis est comparée au champ numérique du tableau.

select * from "users" where "age" > ${age} --- wil be translated into select * from "users" where "age" > '36'

Si votre variable renvoie plusieurs valeurs, vous pouvez l'utiliser dans l'inétat de la requête SAP HANA, comme ci-dessous. Notez les crochets qui entourent la variable pour que la where in condition soit valide dans 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>)— Applique la plage de temps de Grafana à la colonne spécifiée lorsqu'elle est utilisée dans la requête brute. Applicable aux colonnes de date/horodatage/longue durée.

  • $__timeFilter(<time_column>, <format>)— Comme ci-dessus. Mais donne la possibilité de spécifier le format de la time_column stockée dans la base de données.

  • $__timeFilter(<time_column>, "epoch", <format>)— Comme ci-dessus, mais peut être utilisé lorsque votre colonne de temps est en époque. Le format peut être l'un des suivants : « s », « ms » et « ns ».

  • $__fromTimeFilter(<time_column>)— Comme ci-dessus, mais peut être utilisé lorsque votre colonne de temps est en époque. Le format peut être l'un des suivants : « s », « ms » et « ns ».

  • $__fromTimeFilter(<time_column>, <comparison_predicate>)— Identique à ci-dessus, mais possibilité de spécifier comparison_predicate.

  • $__fromTimeFilter(<time_column>, <format>)— Comme ci-dessus, mais possibilité de spécifier le format de la colonne de temps.

  • $__fromTimeFilter(<time_column>, <format>, <comparison_predicate>)— Identique à ci-dessus, mais possibilité de spécifier comparison_predicate.

  • $__toTimeFilter(<time_column>)— Renvoie la condition temporelle basée sur le temps de grafana sur un champ temporel.

  • $__toTimeFilter(<time_column>, <comparison_predicate>)— Identique à ci-dessus, mais possibilité de spécifier comparison_predicate.

  • $__toTimeFilter(<time_column>, <format>)— Comme ci-dessus, mais possibilité de spécifier le format de la colonne de temps.

  • $__toTimeFilter(<time_column>, <comparison_predicate>)— Identique à ci-dessus, mais possibilité de spécifier comparison_predicate.

  • $__timeGroup(<time_column>, <interval>)— Étend la colonne de temps en groupes d'intervalles. Applicable aux colonnes de date/horodatage/longue durée.

macro $__timeFilter () <time_column>

L'exemple suivant explique la $__timeFilter(<time_column>) macro :

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

Dans certains cas, les colonnes temporelles de la base de données sont stockées dans des formats personnalisés. L'exemple suivant explique la $__timeFilter(<time_column>, <format>) macro, qui permet de filtrer les horodatages personnalisés en fonction du sélecteur de temps 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

Dans la macro, le format peut être l'un des formats HANA valides correspondant à votre colonne d'horodatage. Par exemple, YYYYMMDDHH24MISS est un format valide lorsque vos données sont stockées dans un 20210421162012 format.

macro $__timeFilter (, « époque ») <time_column><format>

Dans certains cas, les horodatages sont stockés sous forme d'horodatages d'époque dans votre base de données. L'exemple suivant explique la $__timeFilter(<time_column>, "epoch" <format>) macro qui permet de filtrer les horodatages d'époque en fonction du sélecteur de temps de Grafana. Dans la macro, le format peut être ms, s ou ns. S'il n'est pas spécifié, s sera traité comme format par défaut.

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

Au lieu d'utiliser le troisième argument du $__timeFilter, vous pouvez utiliser l'un des arguments epoch_s, epoch_ms ou epoch_ns comme deuxième argument.

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 () et $__ toTimeFilter ()

La $__fromTimeFilter() macro s'étend à une condition sur un champ temporel en fonction du temps du sélecteur de temps de Grafana.

Cela accepte trois paramètres. Le premier paramètre est le nom du champ horaire. Vous pouvez passer comparison_predicate ou le format de la colonne de temps comme deuxième argument. Si vous souhaitez transmettre les deux, le format est le deuxième paramètre et utilisez comparison_predicate comme troisième paramètre.

<format>Si le format n'est pas spécifié, le plugin supposera que la colonne d'heure est de type timestamp/date. Si votre colonne d'heure est stockée dans un format autre que l'horodatage/la date, transmettez le format comme deuxième argument. <format>peut être l'un des formats epoch_s, epoch_ms, epoch_ns ou tout autre format personnalisé tel que YYYY-MM-DD.

<comparison_predicate>paramètre optionnel. S'il n'est pas transmis, le plugin utilisera > comme prédicat de comparaison. <comparison_predicate>peut être l'un des suivants =, ! =, <>, <, <=, >, >=

$__toTimeFilter()fonctionne de la même manière que $__ fromTimeFilter (). Au lieu d'utiliser Grafana de temps en temps, il l'utilisera au fil du temps. Le prédicat de comparaison par défaut sera également <.

$__timeGroup (,) <time_column><interval>

Par exemple, la macro $__timeGroup (timecol,1h) est étendue à SERIES_ROUND (« timecol », « INTERVAL 1 HOUR ») dans la requête.

L'exemple suivant explique $__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

Ceci est traduit dans la requête suivante où il $__timeGroup(timestamp,1h) est développé dansSERIES_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
Note

Lorsque vous utilisez la macro group by avec $__timeGroup, assurez-vous que vos champs de sélection et de tri par portent le même nom que votre groupe par champ. Sinon, HANA risque de ne pas reconnaître la requête.

Si vous ne voulez pas coder en dur l'intervalle dans la fonction $__timeGroup (), vous pouvez laisser Grafana s'en charger en spécifiant $__interval comme intervalle. Grafana calculera cet intervalle à partir de la plage de temps du tableau de bord. Exemple de requête :

SELECT $__timeGroup(timestamp, $__interval), sum("value") as "value" FROM "salesdata" WHERE $__timeFilter("timestamp") GROUP BY $__timeGroup(timestamp, $__interval) ORDER BY $__timeGroup(timestamp, $__interval) ASC

Cette requête est traduite dans la requête suivante en fonction de la plage horaire du tableau de bord.

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

Alerte

Pour configurer une alerte SAP HANA dans Grafana
  1. Créez un panneau graphique dans votre tableau de bord.

  2. Créez une requête SAP HANA au format de série chronologique.

  3. Choisissez l'onglet Alerte et spécifiez les critères d'alerte.

  4. Choisissez Test Rule pour tester la requête d'alerte.

  5. Spécifiez les destinataires des alertes, les messages et le traitement des erreurs.

  6. Enregistrez le tableau de bord.

Alertes sur les données autres que les séries chronologiques

Pour émettre une alerte sur des données autres que des séries chronologiques, utilisez la TO_TIMESTAMP('${__to:date}') macro pour transformer des métriques autres que des séries chronologiques en séries chronologiques. Cela convertira votre métrique en une requête de série chronologique à point unique. Le format de la requête est indiqué ci-dessous

SELECT TO_TIMESTAMP('${__to:date}'), <METRIC> FROM <TABLE≶ WHERE <YOUR CONDITIONS>

Dans l'exemple suivant, une table comporte quatre champs appelés nom d'utilisateur, âge, ville et rôle. Ce tableau ne contient aucun champ horaire. Nous voulons avertir lorsque le nombre d'utilisateurs ayant le rôle de développeur est inférieur à trois.

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'