Connect à une source de données MySQL - 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.

Connect à une source de données MySQL

Ajoutez la source de données MySQL pour pouvoir interroger et visualiser les données d'une base de données compatible MySQL.

Important

Grafana version 8.0 modifie la structure de données sous-jacente des trames de données pour les sources de données MySQL, Postgres et Microsoft SQL Server. Par conséquent, le résultat d'une requête de série chronologique est renvoyé dans un format large. Pour plus d'informations, consultez la section Format large dans la documentation des trames de données Grafana.

Pour que vos visualisations fonctionnent comme elles le faisaient auparavant, vous devrez peut-être effectuer des migrations manuelles. Une solution est documentée sur Github à l'adresse Postgres/MySQL/MSSQL : modification majeure de la version 8.0 concernant les requêtes de séries chronologiques et l'ordre des colonnes de données.

Ajouter la source de données

  1. Ouvrez le menu latéral en choisissant l'icône Grafana dans l'en-tête supérieur.

  2. Dans le menu latéral, sous le lien Tableaux de bord, vous devriez trouver un lien intitulé Sources de données.

  3. Cliquez sur le bouton + Ajouter une source de données dans l'en-tête supérieur.

  4. Sélectionnez MySQL dans la liste déroulante Type.

Options de source de données

Name (Nom) Description
Name Le nom de la source de données. C'est ainsi que vous voyez la source de données dans les panneaux et les requêtes.
Default La source de données par défaut signifie qu'elle sera présélectionnée pour les nouveaux panneaux.
Host Adresse IP/nom d'hôte et port optionnel de votre instance MySQL.
Database Nom de votre base de données MySQL.
User Login/nom d'utilisateur de l'utilisateur de la base de données.
Password Mot de passe de l'utilisateur de la base de données
Max open Nombre maximum de connexions ouvertes à la base de données, par défaut unlimited (Grafana v5.4+).
Max idle Nombre maximal de connexions dans le pool de connexions inactives, par défaut 2 (Grafana v5.4+).
Max lifetime Durée maximale en secondes pendant laquelle une connexion peut être réutilisée, par défaut 14400 /4 heures. Cela doit toujours être inférieur à la valeur configurée pour wait_timeout dans MySQL (Grafana v5.4+).

Intervalle de temps minimum

Une limite inférieure pour les $_interval $_interval_ms variables. Il est recommandé de régler la fréquence d'écriture, par exemple 1m si vos données sont écrites toutes les minutes. Cette option peut également être remplacée/configurée dans un panneau de tableau de bord sous Options de source de données. Cette valeur doit être formatée sous la forme d'un nombre suivi d'un identifiant horaire valide, par exemple 1m (1 minute) ou 30s (30 secondes). Les identifiants horaires suivants sont pris en charge.

Identifiant Description
y Année
M Mois
w semaine
d jour
h Heure
m Minute
s Seconde
ms Milliseconde

Autorisations utilisateur de base de données

Important

L'utilisateur de base de données que vous spécifiez lorsque vous ajoutez la source de données ne doit disposer que des autorisations SELECT sur la base de données et les tables spécifiées que vous souhaitez interroger. Grafana ne confirme pas que la requête est sûre. La requête peut inclure n'importe quelle instruction SQL. Par exemple, des instructions telles que USE otherdb; et DROP TABLE user; seraient exécutées. Pour vous protéger contre cela, nous vous recommandons vivement de créer un utilisateur MySQL spécifique avec des autorisations restreintes.

L'exemple de code suivant montre la création d'un utilisateur MySQL spécifique avec des autorisations restreintes.

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

Pour autoriser l'accès à davantage de bases de données et de tables, vous pouvez utiliser des caractères génériques (*) à la place de la base de données ou de la table si vous le souhaitez.

Éditeur de requête

Vous trouverez l'éditeur de requêtes MySQL dans l'onglet métriques en mode édition d'un panneau. Vous passez en mode édition en choisissant le titre du panneau, puis Modifier.

L'éditeur de requêtes possède un lien SQL généré qui s'affiche après l'exécution d'une requête, en mode édition du panneau. Choisissez-le, il se développera et affichera la chaîne SQL interpolée brute qui a été exécutée.

Sélectionnez le tableau, la colonne horaire et la colonne métrique (FROM)

Lorsque vous entrez en mode édition pour la première fois ou que vous ajoutez une nouvelle requête, Grafana essaie de préremplir le générateur de requêtes avec la première table contenant une colonne d'horodatage et une colonne numérique.

Dans le champ FROM, Grafana proposera des tables qui se trouvent dans la base de données configurée. Pour sélectionner une table ou une vue dans une autre base de données à laquelle l'utilisateur de votre base de données a accès, vous pouvez saisir manuellement un nom complet (database.table) tel que. otherDb.metrics

Le champ de colonne Heure fait référence au nom de la colonne contenant vos valeurs temporelles. La sélection d'une valeur pour le champ de colonne métrique est facultative. Si une valeur est sélectionnée, le champ de colonne métrique sera utilisé comme nom de série.

Les suggestions de colonnes métriques contiendront uniquement des colonnes contenant un type de données texte (text, tinytext, mediumtext, longtext, varchar, char). Si vous souhaitez utiliser une colonne avec un type de données différent en tant que colonne métrique, vous pouvez saisir le nom de la colonne avec un transtypage :CAST(numericColumn as CHAR). Vous pouvez également saisir des expressions SQL arbitraires dans le champ de la colonne métrique qui correspondent à un type de données texte tel queCONCAT(column1, " ", CAST(numericColumn as CHAR)).

Colonnes et fonctions d'agrégation (SELECT)

Dans la SELECT ligne, vous pouvez spécifier les colonnes et les fonctions que vous souhaitez utiliser. Dans le champ de colonne, vous pouvez écrire des expressions arbitraires au lieu d'un nom de colonne tel quecolumn1 * column2 / column3.

Si vous utilisez des fonctions d'agrégation, vous devez regrouper votre jeu de résultats. L'éditeur ajoutera automatiquement un GROUP BY time si vous ajoutez une fonction d'agrégation.

Vous pouvez ajouter d'autres colonnes de valeur en cliquant sur le bouton plus et en sélectionnant dans le Column menu. Les colonnes de valeurs multiples seront tracées sous forme de séries distinctes dans le panneau graphique.

Filtrage des données (WHERE)

Pour ajouter un filtre, cliquez sur l'icône plus à droite de la WHERE condition. Vous pouvez supprimer des filtres en choisissant un filtre puis en sélectionnantRemove. Un filtre pour la plage de temps actuellement sélectionnée est automatiquement ajouté aux nouvelles requêtes.

Grouper par

Pour regrouper par heure ou par toute autre colonne, cliquez sur l'icône plus à la fin de la ligne GROUPER PAR. La liste déroulante des suggestions n'affiche que les colonnes de texte du tableau actuellement sélectionné, mais vous pouvez saisir manuellement n'importe quelle colonne. Vous pouvez supprimer le groupe en choisissant l'élément, puis en le sélectionnantRemove.

Si vous ajoutez un regroupement, une fonction d'agrégation doit être appliquée à toutes les colonnes sélectionnées. Le générateur de requêtes ajoute automatiquement des fonctions d'agrégation à toutes les colonnes sans fonctions d'agrégation lorsque vous ajoutez des groupements.

Combler les lacunes

Grafana peut compléter les valeurs manquantes lorsque vous les regroupez par heure. La fonction time accepte deux arguments. Le premier argument est la fenêtre temporelle selon laquelle vous souhaitez effectuer le regroupement, et le second argument est la valeur avec laquelle vous souhaitez que Grafana remplisse les éléments manquants.

Mode éditeur de texte (brut)

Vous pouvez passer en mode éditeur de requête brut en choisissant l'icône en forme de hamburger et en sélectionnant Changer le mode éditeur ou en choisissant Modifier le code SQL sous la requête.

Note

Si vous utilisez l'éditeur de requête brut, assurez-vous que votre requête contient ORDER BY time au minimum un filtre sur la plage de temps renvoyée.

Macros

Pour simplifier la syntaxe et autoriser les parties dynamiques, telles que les filtres de plage de dates, la requête peut contenir des macros.

Exemple de macro Description
$__time(dateColumn) Sera remplacée par une expression à convertir en horodatage UNIX et à renommer la colonne en time_sec ; par exemple, UNIX_TIMESTAMP (DateColumn) en time_sec.
$__timeEpoch(dateColumn) Sera remplacée par une expression à convertir en horodatage UNIX et à renommer la colonne en time_sec ; par exemple, UNIX_TIMESTAMP (DateColumn) en time_sec.
$__timeFilter(dateColumn) Sera remplacé par un filtre de plage de temps utilisant le nom de colonne spécifié. Par exemple, DateColumn BETWEEN FROM_UNIXTIME (1494410783) ET FROM_UNIXTIME (1494410983).
$__timeFrom() Sera remplacé par le début de la sélection d'heure actuellement active. Par exemple, FROM_UNIXTIME (1494410783).
$__timeTo() Sera remplacé à la fin de la sélection d'heure actuellement active. Par exemple, FROM_UNIXTIME (1494410983).
$__timeGroup(dateColumn,'5m') Sera remplacée par une expression utilisable dans la clause GROUP BY. Par exemple, cast (cast (UNIX_TIMESTAMP (DateColumn)/(300) comme signé) 300 comme signé), *
$__timeGroup(dateColumn,'5m', 0) Identique à la ligne précédente, mais avec un paramètre de remplissage, les points manquants dans cette série seront ajoutés par grafana et 0 sera utilisé comme valeur.
$__timeGroup(dateColumn,'5m', NULL) Comme ci-dessus, mais NULL sera utilisé comme valeur pour les points manquants.
$__timeGroup(dateColumn,'5m', previous) Comme ci-dessus, mais la valeur précédente de cette série sera utilisée comme valeur de remplissage si aucune valeur n'a été vue, mais la valeur NULL sera utilisée (uniquement disponible dans Grafana 5.3+).
$__timeGroupAlias(dateColumn,'5m') Sera remplacé de la même manière $__timeGroup mais avec un alias de colonne ajouté (disponible uniquement dans Grafana 5.3+).
$__unixEpochFilter(dateColumn) Sera remplacé par un filtre de plage horaire utilisant le nom de colonne spécifié avec les heures représentées par un horodatage Unix. Par exemple, dateColumn > 1494410783 AND dateColumn < 1494497183.
$__unixEpochFrom() Sera remplacé par le début de la sélection d'heure actuellement active sous forme d'horodatage Unix. Par exemple, 1494410783.
$__unixEpochTo() Sera remplacé par la fin de la sélection d'heure actuellement active sous forme d'horodatage Unix. Par exemple, 1494497183.
$__unixEpochNanoFilter(dateColumn) Sera remplacé par un filtre de plage de temps utilisant le nom de colonne spécifié, les heures étant représentées par un horodatage en nanosecondes. Par exemple, dateColumn > 1494410783152415214 AND dateColumn < 1494497183142514872.
$__unixEpochNanoFrom() Sera remplacé par le début de la sélection temporelle actuellement active sous forme d'horodatage en nanosecondes. Par exemple, 1494410783152415214.
$__unixEpochNanoTo() Sera remplacé par la fin de la sélection temporelle actuellement active sous forme d'horodatage en nanosecondes. Par exemple, 1494497183142514872.
$__unixEpochGroup(dateColumn,"5m", [fillmode]) Identique à l'$__timeGroupexception des heures stockées sous forme d'horodatage Unix (disponible uniquement dans Grafana 5.3+).
$__unixEpochGroupAlias(dateColumn,"5m", [fillmode])` Comme ci-dessus, mais ajoute également un alias de colonne (disponible uniquement dans Grafana 5.3+).

L'éditeur de requêtes possède un lien SQL généré qui s'affiche après l'exécution d'une requête, en mode édition du panneau. Choisissez-le, il se développera et affichera la chaîne SQL interpolée brute qui a été exécutée.

Requêtes de table

Si l'option Formater en tant que requête est définie sur Table, vous pouvez essentiellement effectuer n'importe quel type de requête SQL. Le panneau du tableau affiche automatiquement les résultats des colonnes et des lignes renvoyées par votre requête.

Le code suivant montre un exemple de requête.

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)

Vous pouvez contrôler le nom des colonnes du panneau Table à l'aide de la syntaxe as SQL classique de sélection des colonnes.

Requêtes de séries chronologiques

Si vous définissez Format en fonction de la série chronologique, pour une utilisation dans un panneau graphique par exemple, la requête doit renvoyer une colonne nommée time qui renvoie soit une date/heure SQL, soit un type de données numérique représentant l'époque Unix. Toute colonne sauf time et metric est traitée comme une colonne de valeur. Vous pouvez renvoyer une colonne nommée metric qui est utilisée comme nom de métrique pour la colonne de valeurs. Si vous renvoyez plusieurs colonnes de valeurs et une colonne nomméemetric, cette colonne est utilisée comme préfixe pour le nom de série (disponible uniquement dans Grafana 5.3+).

Les ensembles de résultats des requêtes de séries chronologiques doivent être triés par ordre chronologique.

L'exemple de code suivant montre la metric colonne.

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

L'exemple de code suivant montre comment utiliser le paramètre fill dans la macro $__TimeGroup pour convertir des valeurs nulles en zéro à la place.

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

L'exemple de code suivant montre plusieurs colonnes.

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

Il n'existe aucun support pour un groupe dynamique par heure basé sur la plage de temps et la largeur du panneau.

Création de modèles

Au lieu de coder en dur des éléments tels que le nom du serveur, de l'application et du capteur dans vos requêtes métriques, vous pouvez utiliser des variables à leur place. Les variables sont affichées sous forme de boîtes de sélection déroulantes en haut du tableau de bord. Vous pouvez utiliser ces listes déroulantes pour modifier les données affichées dans votre tableau de bord.

Pour plus d'informations sur les modèles et les variables de modèles, consultezModèles.

Variable de requête

Si vous ajoutez une variable de modèle de ce typeQuery, vous pouvez écrire une requête MySQL qui peut renvoyer des éléments tels que des noms de mesures, des noms de clés ou des valeurs de clé affichées sous forme de boîte de sélection déroulante.

Par exemple, vous pouvez avoir une variable contenant toutes les valeurs de la hostname colonne d'une table si vous spécifiez une requête comme celle-ci dans le paramètre Query de la variable de modèle.

SELECT hostname FROM my_host

Une requête peut renvoyer plusieurs colonnes et Grafana créera automatiquement une liste à partir de celles-ci. Par exemple, la requête suivante renverra une liste contenant les valeurs de hostname ethostname2.

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

Pour utiliser des macros dépendantes d'une plage de temps, comme $__timeFilter(column) dans votre requête, le mode d'actualisation de la variable de modèle doit être défini sur On Time Range Change.

SELECT event_name FROM event_log WHERE $__timeFilter(time_column)

Une autre option est une requête qui permet de créer une variable clé/valeur. La requête doit renvoyer deux colonnes nommées __text et__value. La valeur de la __text colonne doit être unique (si elle ne l'est pas, la première valeur est utilisée). Les options de la liste déroulante comporteront un texte et une valeur afin que vous puissiez avoir un nom convivial sous forme de texte et un identifiant comme valeur.

L'exemple de code suivant montre une requête avec hostname comme texte et id comme valeur.

SELECT hostname AS __text, id AS __value FROM my_host

Vous pouvez également créer des variables imbriquées. Par exemple, si vous aviez une autre variable nomméeregion. Vous pouvez alors demander à la variable hosts d'afficher uniquement les hôtes de la région actuellement sélectionnée avec une requête comme celle-ci (s'il s'regionagit d'une variable à valeurs multiples, utilisez l'opérateur de IN comparaison plutôt que de la comparer = à plusieurs valeurs).

SELECT hostname FROM my_host WHERE region IN($region)

Utilisation __searchFilter pour filtrer les résultats dans une variable de requête

L'utilisation __searchFilter du champ de requête filtrera le résultat de la requête en fonction de ce que l'utilisateur saisit dans la zone de sélection déroulante. Lorsque rien n'a été saisi par l'utilisateur, la valeur par défaut __searchFilter est%.

Note

Il est important que vous entouriez l'__searchFilterexpression de guillemets, car Grafana ne le fait pas pour vous.

L'exemple suivant montre comment l'utiliser __searchFilter dans le champ de requête pour activer la recherche hostname pendant que l'utilisateur tape dans la zone de sélection déroulante.

SELECT hostname FROM my_host WHERE hostname LIKE '$__searchFilter'

Utilisation de variables dans les requêtes

De Grafana 4.3.0 à 4.6.0, les variables de modèle sont toujours citées automatiquement, donc s'il s'agit d'une valeur de chaîne, ne les mettez pas entre guillemets dans les clauses where.

À partir de Grafana 4.7.0, les valeurs des variables de modèle ne sont citées que lorsque la variable de modèle est un. multi-value

Si la variable est une variable à valeurs multiples, utilisez l'opérateur de IN comparaison plutôt que de = la comparer à plusieurs valeurs.

Il existe deux syntaxes :

$<varname>Exemple avec une variable de modèle nommée 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]]Exemple avec une variable de modèle nommée 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

Désactiver les guillemets pour les variables à valeurs multiples

Grafana crée automatiquement une chaîne entre guillemets séparée par des virgules pour les variables à valeurs multiples. Par exemple : si server01 et server02 sont sélectionnés, ils seront formatés comme suit :'server01', 'server02'. Pour désactiver les guillemets, utilisez l'option de formatage csv pour les variables.

${servers:csv}

Pour plus d'informations sur les options de mise en forme des variables, consultezOptions avancées de format variable.

Annotations

Vous pouvez utiliser des annotations pour superposer des informations détaillées sur les événements au-dessus des graphiques. Vous pouvez ajouter des requêtes d'annotation via le menu Tableau de bord/Vue des annotations. Pour plus d’informations, consultez .

L'exemple de code suivant montre une requête utilisant une colonne de temps avec des valeurs d'époque.

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

L'exemple de code suivant montre une requête de région utilisant des colonnes d'heure et de fin de période avec des valeurs d'époque.

Note

Disponible uniquement dans Grafana v6.6 et versions ultérieures.

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)

L'exemple de code suivant montre une requête utilisant une colonne de temps de type date/heure SQL natif.

SELECT native_date_time as time, metric1 as text, CONCAT(tag1, ',', tag2) as tags FROM public.test_data WHERE $__timeFilter(native_date_time)
Name (Nom) Description
time Nom du champ date/heure. Il peut s'agir d'une colonne avec un type de données de date/heure ou une valeur d'époque SQL natif.
timeend Nom facultatif du champ date/heure de fin. Il peut s'agir d'une colonne avec un type de données de date/heure ou une valeur d'époque SQL natif.
text Champ de description de l'événement.
tags Nom de champ facultatif à utiliser pour les balises d'événements sous forme de chaîne séparée par des virgules.

Alerte

Les requêtes de séries chronologiques devraient fonctionner dans des conditions d'alerte. Les requêtes mises en forme de tableau ne sont pas encore prises en charge dans les conditions des règles d'alerte.