Ce document explique comment créer et gérer des tableaux de bord personnalisés et leurs widgets à l'aide de la ressource Dashboard
de l'API Cloud Monitoring.
Les exemples ci-dessous montrent comment gérer vos tableaux de bord à l'aide de curl
pour appeler l'API et comment utiliser Google Cloud CLI.
Vous pouvez également gérer vos tableaux de bord personnalisés via la console Google Cloud, mais l'API vous permet de gérer plusieurs tableaux de bord en même temps et par programmation.
Le point de terminaison accepte les méthodes suivantes pour la gestion et la configuration des tableaux de bord :
dashboards.create
: crée un tableau de bord.dashboards.delete
: supprime le tableau de bord spécifié.dashboards.list
: récupère la liste de tous les tableaux de bord d'un projet donné.dashboards.get
: récupère le tableau de bord spécifié.dashboards.patch
: met à jour la structure du tableau de bord spécifié.
Vous pouvez appeler l'API directement à l'aide de l'utilitaire curl
ou de la Google Cloud CLI.
Vous ne pouvez pas récupérer, modifier ni supprimer des tableaux de bord prédéfinis.
À propos des tableaux de bord
Lorsque vous créez un tableau de bord, vous devez spécifier les composants ou widgets que vous souhaitez afficher ainsi que leur disposition. Vous pouvez également ajouter des libellés et des filtres à votre tableau de bord. Les libellés peuvent vous aider à trouver un tableau de bord ou à indiquer le type de contenu qu'il contient.
Dispositions de tableaux de bord
La disposition ou mise en page d'un tableau de bord définit la façon dont ses composants sont organisés. L'API fournit les dispositions suivantes :
GridLayout
(en grille) : partage l'espace disponible en colonnes verticales de même largeur et organise l'ensemble de widgets ligne par ligne.MosaicLayout
(en grille) : divise l'espace disponible en grille. Chaque widget peut occuper un ou plusieurs blocs de type grille.RowLayout
(en mosaïque) : partage l'espace disponible en lignes et organise l'ensemble de widgets horizontalement sur chaque ligne.ColumnLayout
(en colonne) : partage l'espace disponible en colonnes verticales et organise l'ensemble de widgets verticalement dans chaque colonne.
Par exemple, voici la représentation JSON d'un tableau de bord en disposition RowLayout
avec trois widgets Text
:
{
"displayName": "Row-layout example",
"rowLayout": {
"rows": [
{
"widgets": [
{
"text": {
"content": "Text Widget 1",
"format": "RAW"
}
},
{
"text": {
"content": "**Text Widget 2**",
"format": "MARKDOWN"
}
},
{
"text": {
"content": "_Text Widget 3_",
"format": "MARKDOWN"
}
}
]
}
]
}
}
Widgets de tableau de bord
Un widget contient un unique composant de tableau de bord, ainsi que la configuration définissant comment présenter ce composant dans le tableau de bord. Un tableau de bord peut comporter plusieurs widgets. Il existe plusieurs types d'objets Widget
:
Le widget
XyChart
affiche les données sur les axes X et Y.Ce widget affiche un ensemble de données pouvant être des données de série temporelle ou générées par une requête SQL. Ce widget vous permet d'associer les données du graphique à l'axe Y de gauche ou de droite. Lorsque plusieurs types de métriques sont représentés graphiquement, vous pouvez utiliser les deux axes Y. Le widget
XyChart
est compatible avec les styles d'affichage suivants:- Graphiques en courbes
- Graphique à barres
- Graphiques en aires empilées
- Cartes de densité
Widgets qui s'affichent à partir d'une dimension, comme la dernière valeur:
PieChart
: affiche les dernières valeurs d'une collection de séries temporelles, où chaque série temporelle contribue à une tranche du graphique en secteurs.Scorecard
(tableau de données) : affiche la valeur la plus récente d'une série temporelle et sa position par rapport à un ou plusieurs seuils.TimeSeriesTable
(tableau de données) : affiche la valeur la plus récente ou une valeur agrégée pour chaque série temporelle. Les tableaux sont personnalisables. Par exemple, vous pouvez attribuer un code couleur aux cellules, et configurer les noms de colonnes et l'alignement des données.
Widgets qui affichent des règles d'alerte ou des informations sur les incidents:
AlertChart
(graphique d'alerte) : affiche un résumé d'une règle d'alerte à une seule condition. Ce widget affiche les données sous la forme d'un graphique en courbes, affiche le seuil et indique le nombre d'incidents ouverts.IncidentList
: affiche la liste des incidents. Vous pouvez configurer le widget pour afficher des incidents pour des règles d'alerte spécifiques ou pour des types de ressources spécifiques.
Widgets qui affichent des entrées de journal et des erreurs:
ErrorReportingPanel
: affiche les groupes d'erreurs stockés dans le projet Google Cloud sélectionné.LogsPanel
(panneau des journaux) : affiche les entrées de journal à l'échelle du projet stockées dans le projet Google Cloud actuel. Vous pouvez configurer le widget pour afficher les entrées de journal stockées dans les projets Google Cloud accessibles via le champ d'application des métriques actuel.
Widgets de texte et d'organisation:
CollapsibleGroup
: affiche une collection de widgets. Vous pouvez réduire la vue d'un groupe.SingleViewGroup
: affiche un widget dans une collection de widgets. Vous pouvez sélectionner le widget à afficher.SectionHeader
: crée un séparateur horizontal dans votre tableau de bord et une entrée dans la table des matières du tableau de bord.Text
(texte) : affiche du contenu textuel sous forme de texte brut ou de chaîne Markdown.
Pour inclure les widgets de texte et d'organisation dans un tableau de bord, celui-ci doit comporter un
MosaicLayout
.
Outre ces objets, vous pouvez également ajouter à un tableau de bord un espace réservé vide.
Par exemple, voici la représentation JSON d'un widget XyChart
dont l'axe Y droit est configuré:
{
"displayName": "Demo dashboard",
"gridLayout": {
"widgets": [
{
"title": "Sample line chart",
"xyChart": {
"dataSets": [
{
"timeSeriesQuery": {
"timeSeriesFilter": {
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\"",
"aggregation": {
"perSeriesAligner": "ALIGN_MEAN",
"crossSeriesReducer": "REDUCE_MAX",
"groupByFields": [
"resource.label.zone"
]
}
},
"unitOverride": "1"
},
"plotType": "LINE"
}
],
"timeshiftDuration": "0s",
"yAxis": {
"label": "y1Axis",
"scale": "LINEAR"
},
"chartOptions": {
"mode": "COLOR"
}
}
}
]
}
}
Étiquettes du tableau de bord
Les libellés peuvent vous aider à gérer et à organiser vos tableaux de bord. Par exemple, vous pouvez ajouter un libellé nommé prod
pour indiquer que le tableau de bord affiche des données de série temporelle et des données de journal pour vos ressources de production. Vous pouvez également ajouter le libellé playbook
pour indiquer que le tableau de bord contient des informations pour vous aider à résoudre les échecs.
L'ajout de libellés à un tableau de bord est facultatif.
Par exemple, l'exemple suivant montre un objet Dashboard
qui spécifie l'étiquette nommée playbook
.
{
"displayName": "Example",
"mosaicLayout": {
"columns": 12,
"tiles": [
...
]
},
"dashboardFilters": [],
"labels": {
"playbook": ""
}
}
Comme l'illustre l'exemple précédent, le champ labels
est implémenté en tant que map
, où les champs key
et value
sont tous deux des chaînes. Lorsque vous ajoutez un libellé à un tableau de bord, définissez key
sur le nom du libellé et le champ value
sur une chaîne vide.
Filtres et variables de tableau de bord
Lorsque vous concevez un tableau de bord, vous pouvez identifier plusieurs façons d'afficher les données qu'il affiche. Par exemple, supposons qu'un tableau de bord affiche des données de série temporelle pour vos instances de machine virtuelle (VM). Vous pouvez afficher les données de séries temporelles pour toutes les VM, ou uniquement celles d'une zone spécifique. Dans ce cas, nous vous recommandons de créer un filtre épinglé ou une variable, puis de définir la valeur par défaut de ce filtre sur la zone la plus consultée.
Les filtres épinglés s'appliquent à tous les widgets de tableau de bord compatibles avec le libellé spécifié dans le filtre, sauf si le widget contient un filtre avec la même clé de libellé.
Par exemple, lorsqu'un graphique inclut le filtre zone = us-central1-a
, il ignore un filtre épinglé dont la clé de libellé est zone
. De même, ce filtre est ignoré par les graphiques qui ne comportent pas de libellé avec une clé zone
.
Les variables sont comme des filtres épinglés, mais elles ne s'appliquent qu'à des widgets spécifiques. Les variables peuvent être basées sur des libellés, comme les filtres épinglés, ou ne comporter qu'une valeur. Les variables à valeur unique contiennent une ou plusieurs valeurs par défaut et une liste de toutes les valeurs possibles. Si vous ne spécifiez pas de valeur par défaut, la valeur par défaut est l'opérateur générique (*)
.
Pour définir l'ensemble de toutes les valeurs possibles, vous devez fournir un tableau de valeurs ou écrire une requête SQL.
Pour les filtres et les variables épinglés, la barre d'outils du tableau de bord affiche chaque variable, ainsi qu'un menu qui vous permet de modifier temporairement la valeur de la variable. La même structure de données est utilisée pour représenter les filtres et les variables épinglés. Pour en savoir plus, consultez la page DashboardFilter
.
Pour savoir comment appliquer une variable basée sur un libellé ou une variable de valeur uniquement à un widget, consultez les sections suivantes:
- Syntaxe générale pour désadresser une variable
- Widgets du panneau "Journaux"
- Graphiques avec des requêtes PromQL
- Graphiques avec des requêtes SQL
- Graphiques avec des requêtes MQL
Graphiques avec des requêtes de filtre Monitoring
Lorsque vous utilisez l'interface à menus pour créer un graphique qui affiche des données de séries temporelles, vos sélections sont converties en filtre de surveillance.
Créer des filtres et des variables
Console
Pour savoir comment utiliser la console Google Cloud pour créer des filtres et des variables épinglés, consultez les documents suivants:
API
Pour définir des filtres et des variables épinglés, utilisez la structure de données dashboardFilters
.
- Pour créer une variable, définissez la valeur du champ
templateVariable
sur le nom de la variable. Omettez ce champ ou définissez sa valeur sur une chaîne vide lorsque vous souhaitez créer un filtre épinglé. - Pour créer un filtre épinglé ou une variable basée sur un libellé, vous devez spécifier le champ
labelKey
. Omettre ce champ lorsque vous souhaitez une variable à valeur unique. Définissez la valeur par défaut du filtre ou de la variable. La configuration de ce champ détermine si un utilisateur peut sélectionner exactement une option dans le menu de valeurs ou s'il peut sélectionner plusieurs valeurs.
- Pour définir une seule valeur par défaut et limiter les utilisateurs à la sélection d'une seule option dans le menu des valeurs, définissez le champ
valueType
surSTRING
et définissez également le champstringValue
:
"valueType": "STRING", "stringValue": "my-default-value",
- Pour définir au moins une valeur par défaut et permettre aux utilisateurs de sélectionner plusieurs options dans le menu des valeurs, définissez le champ
valueType
surSTRING_ARRAY
et le champstringArrayValue
. Dans l'exemple suivant, trois valeurs par défaut sont définies.
"valueType": "STRING_ARRAY", "stringArrayValue": { "values": [ "a", "b", "c" ] },
- Pour définir une seule valeur par défaut et limiter les utilisateurs à la sélection d'une seule option dans le menu des valeurs, définissez le champ
Facultatif: pour spécifier la liste de toutes les valeurs possibles pour une variable à valeur unique, définissez le champ
stringArray
ou le champtimeSeriesQuery
. Si vous spécifiez une requête, il doit s'agir d'une requête d'analyse.
Prenons l'exemple de l'objet dashboardFilters
suivant:
{ "dashboardFilters": [ { "labelKey": "zone" "stringValue": "us-central1-c", "valueType": "STRING", "filterType": "RESOURCE_LABEL" }, { "labelKey": "instance_id", "stringValue": "3133577226154888113", "valueType": "STRING", "filterType": "RESOURCE_LABEL", "templateVariable": "my_label_based_variable" }, { "filterType": "VALUE_ONLY", "templateVariable": "my_value_only_variable", timeSeriesQuery: { opsAnalyticsQuery: { sql: " SELECT log_name FROM `MY_TABLE` GROUP BY log_name ", } } } ], "displayName": "Illustrate Variables", ... }
Le code JSON précédent définit un filtre épinglé et deux variables:
Le filtre épinglé a la clé de libellé
zone
, qui s'affiche dans la barre d'outils. Les champsvalueType
etstringValue
spécifient la valeur par défaut unique. Pour en savoir plus, consultez la page de la documentation de référence de l'API pour la structure de donnéesdashboardFilters
.La variable basée sur une étiquette s'appelle
my_label_based_variable
, et sa clé d'étiquette estinstance_id
. La valeur par défaut de cette variable est définie sur un ID d'instance spécifique. Vous pouvez également configurer la valeur par défaut à l'aide d'un tableau. Dans la barre d'outils, le filtre s'affiche sous le nommy_label_based_variable
.La variable à valeur unique est nommée
my_value_only_variable
. Cette entrée ne spécifie pas de valeur par défaut. L'opérateur générique,(*)
, est donc appliqué automatiquement. De plus, cette variable utilise une requête SQL pour générer la liste des valeurs possibles.
Notez que l'objet dashboardFilters
ne liste pas les widgets auxquels la variable s'applique. Pour appliquer une variable à un widget, vous devez modifier la requête du widget.
Syntaxe générale pour désadresser une variable
Pour tous les widgets, à l'exception de ceux définis par SQL, utilisez la syntaxe suivante pour appliquer une variable à une requête:
Pour appliquer une variable basée sur une étiquette et que la clé et la valeur de l'étiquette soient résolues en une expression de filtre valide pour le langage de requête, utilisez
${my_label_based_variable}
.Pour n'appliquer que la valeur d'une variable basée sur un libellé, utilisez
${my_label_based_variable.value}
. La comparaison doit utiliser une expression régulière.Pour n'appliquer que la valeur d'une variable à valeur unique, utilisez
${my_value_only_variable}
. Pour les variables de type "Valeur uniquement", n'incluez pas de clause.value
. La comparaison doit utiliser une expression régulière.
Widgets du panneau des journaux
Pour appliquer une variable à un widget de panneau de journaux, mettez à jour le volet des requêtes. La syntaxe de ces widgets suit celle spécifiée sous Syntaxe générale.
Console
Par exemple, la requête suivante utilise une expression régulière pour comparer la valeur du champ jsonPayload.message
à une valeur de chaîne qui inclut la valeur d'une variable basée sur des libellés:
jsonPayload.message=~"Connected to instance: ${my_label_based_variable.value}"
Prenons un autre exemple. Considérons une variable à valeur unique, value_only_severity_variable
, et supposons que trois valeurs sont sélectionnées dans le menu des valeurs: ERROR
, INFO
et NOTICE
.
Ajoutez ensuite le code suivant au volet de requête du widget de panneau des journaux:
severity =~ "${value_only_severity_variable}"
Voici un exemple de formulaire affiché:
severity =~ "^(ERROR|INFO|NOTICE)$"
API
Par exemple, le code JSON suivant montre comment appliquer une variable basée sur un libellé à la requête d'un widget de panneau de journaux:
"logsPanel": { "filter": "${my_label_based_variable}", "resourceNames": [ "projects/1234512345" ] },
Par exemple, la requête suivante utilise une expression régulière pour comparer la valeur du champ jsonPayload.message
à une valeur de chaîne qui inclut la valeur d'une variable basée sur des libellés:
"logsPanel": { "filter": "resource.type=\"gce_instance\"\n resource.labels.project_id=~\"${my_label_based_variable.value}\"\n", "resourceNames": [ "projects/012345" ] }
Prenons un autre exemple. Considérons une variable à valeur unique, value_only_severity_variable
, et supposons que trois valeurs sont sélectionnées dans le menu: ERROR
, INFO
et NOTICE
.
Ajoutez ensuite le code suivant au volet de requête du widget de panneau des journaux:
"logsPanel": {
"filter": "severity =~ \"${value_only_severity_variable}\"\n",
...
}
L'illustration suivante montre la requête exécutée par le widget du panneau des journaux:
severity =~ "^(ERROR|INFO|NOTICE)$"
Si vous avez configuré une requête pour le panneau des journaux, puis sélectionné le bouton pour ouvrir l'explorateur de journaux, les variables sont résolues avant l'ouverture de l'explorateur de journaux.
Le tableau suivant illustre la façon dont les exemples de variables sont résolus par le panneau des journaux. Comme indiqué précédemment, lorsque seule la valeur d'une variable est utilisée, vous devez utiliser une expression régulière comme opérateur de comparaison:
Syntaxe | Valeur sélectionnée |
Expression du panneau des journaux résolus |
---|---|---|
${my_label_based_variable} |
12345 |
resource.labels."instance_id"="12345"
L'exemple de variable est basé sur le libellé de ressource |
${my_label_based_variable} |
* |
"" |
${my_label_based_variable.value} ${my_value_based_variable} |
12345 |
12345 |
${my_label_based_variable.value} ${my_value_based_variable} |
* |
.* |
Graphiques avec des requêtes PromQL
Pour appliquer une variable basée sur un libellé à un graphique contenant une requête PromQL, suivez les instructions de la section Syntaxe générale.
Console
Par exemple, la requête suivante repose sur la résolution de la variable basée sur le libellé, my_label_based_variable
, en une expression de filtre:
compute_googleapis_com:instance_cpu_utilization{ monitored_resource="gce_instance", ${my_label_based_variable} }
Vous pouvez également modifier la requête pour ne résoudre que la valeur d'une variable.
L'exemple suivant utilise une expression régulière pour comparer la valeur d'une requête basée sur un libellé à instance_id
:
compute_googleapis_com:instance_cpu_utilization{ instance_id=~"${my_label_based_variable.value}" }
Si vous disposez d'une variable à valeur unique, omettez la clause .value
. Par exemple, pour filtrer par zone à l'aide d'une variable à valeur unique, la requête inclurait quelque chose comme ce qui suit:
zone=~"${my_value_only_variable}"
API
Par exemple, le code JSON suivant illustre une requête qui s'appuie sur la résolution de la variable basée sur le libellé, my_label_based_variable
, en une expression de filtre:
"timeSeriesQuery": { "prometheusQuery": "avg_over_time( compute_googleapis_com:instance_cpu_utilization{ monitored_resource=\"gce_instance\", ${my_label_based_variable} }[${__interval}])", "unitOverride": "", "outputFullDuration": false },
Vous pouvez également modifier la requête pour ne résoudre que la valeur d'une variable.
L'exemple suivant utilise une expression régulière pour comparer la valeur d'une requête basée sur un libellé à instance_id
:
"timeSeriesQuery": { "prometheusQuery": "avg_over_time( compute_googleapis_com:instance_cpu_utilization{ monitored_resource=\"gce_instance\", instance_id=~\"${my_label_based_variable.value}\" }[${__interval}])", "unitOverride": "", "outputFullDuration": false },
Si vous disposez d'une variable à valeur unique, omettez la clause .value
. Par exemple, pour filtrer par zone à l'aide d'une variable à valeur unique, la requête inclut quelque chose comme ce qui suit:
zone=~\"${my_value_only_variable}\"
Le tableau suivant illustre la façon dont les exemples de variables sont résolus par PromQL. Comme indiqué précédemment, lorsque seule la valeur d'une variable est utilisée, vous devez utiliser une expression régulière comme opérateur de comparaison:
Syntaxe | Valeur sélectionnée |
Expression PromQL résolue |
---|---|---|
${my_label_based_variable} |
12345 |
instance_id == '12345'
L'exemple de variable est basé sur le libellé de ressource |
${my_label_based_variable} |
* |
noop_filter=~".*" |
${my_label_based_variable.value} ${my_value_based_variable} |
12345 |
12345 |
${my_label_based_variable.value} ${my_value_based_variable} |
* |
.+ |
Graphiques avec des requêtes SQL
Lorsque vous souhaitez appliquer une variable à un widget défini en SQL, mettez à jour la clause WHERE
pour faire référence à la valeur de la variable.
Pour toutes les variables, préfixez le nom de la variable avec le signe "at", par exemple : @variable_name
. Pour les variables basées sur des libellés, ajoutez .value
au nom de la variable, @my_label_based_variabe.value
.
Pour les requêtes SQL, la substitution de variables repose sur BigQuery et est sécurisée contre les injections SQL. Pour en savoir plus, consultez la section Exécuter des requêtes paramétrées.
Console
Étant donné que SQL n'interprète pas l'opérateur générique comme signifiant "n'importe quelle valeur", nous vous recommandons de toujours utiliser une instruction IF
lorsque vous appliquez des variables à une requête SQL. L'exemple suivant illustre l'utilisation d'une variable à valeur unique dont le type de données est une chaîne:
WHERE IF(@my_value_only_variable = "*", TRUE, log_name = @my_value_only_variable)
Lorsque l'option de menu de la variable permet aux utilisateurs de sélectionner plusieurs valeurs, vous devez caster la valeur de la variable en type de données GoogleSQL à l'aide de la fonction CAST
.
La requête suivante illustre cette syntaxe:
IF(ARRAY_LENGTH(CAST(@my_value_only_variable)) = 0, TRUE, severity IN UNNEST(@my_value_only_variable))
L'instruction IF
affichée dans les exemples précédents est recommandée, car SQL n'interprète pas l'opérateur générique comme signifiant "n'importe quelle valeur". Par conséquent, si vous omettez l'instruction IF
et si vous sélectionnez l'opérateur de caractères génériques, le résultat de la requête est une table vide. Dans le deuxième exemple, la fonction UNNEST
convertit le tableau en table.
Pour ajouter une clause WHERE
correctement formatée, procédez comme suit:
- Modifiez le widget.
- Dans la barre d'outils, sélectionnez Insérer un filtre de variable, puis sélectionnez la variable que vous souhaitez appliquer à la clause
WHERE
. - Dans la boîte de dialogue qui s'affiche, vérifiez le code généré, puis cliquez sur Copier et fermer.
Collez le code copié dans le volet Requête, puis apportez les modifications nécessaires.
Par exemple, supposons que vous créiez une variable nommée
LogName
qui génère une liste de noms de journaux et affiche le résultat dans un tableau avec une seule colonne nomméelog_name
. Vous créez ensuite un graphique, sélectionnez Insérer un filtre de variable, puis la variableLogName
. Le code suivant est généré:WHERE IF(@LogName = '*', TRUE, LogName = @LogName)
Dans cet exemple, vous devez modifier le code généré et remplacer
LogName =
parlog_name =
pour que la jointure de table puisse avoir lieu:WHERE IF(@LogName = '*', TRUE, log_name = @LogName)
Cliquez sur Run (Exécuter), puis sur Apply (Appliquer).
Pour enregistrer le tableau de bord modifié, cliquez sur Enregistrer dans la barre d'outils.
API
Étant donné que SQL n'interprète pas l'opérateur générique comme signifiant "n'importe quelle valeur", nous vous recommandons de toujours utiliser une instruction IF
lorsque vous appliquez des variables à une requête SQL. L'exemple suivant illustre l'utilisation d'une variable à valeur unique dont le type de données est une chaîne:
WHERE IF(@my_value_only_variable = "*", TRUE, log_name = @my_value_only_variable)
Par exemple, voici une représentation JSON partielle d'un graphique qui affiche les résultats d'une requête SQL : Pour permettre de filtrer les résultats par nom de journal, une clause WHERE
a été ajoutée qui fait référence à la variable LogName
:
"plotType": "STACKED_BAR", "targetAxis": "Y1", "timeSeriesQuery": { "opsAnalyticsQuery": { "queryExecutionRules": {}, "queryHandle": "", "sql": "SELECT\n timestamp, severity, resource.type, log_name, text_payload, proto_payload, json_payload\n FROM\n `my-project.global._Default._Default`\n WHERE \n IF (@LogName = \"*\", TRUE, log_name=@LogName)\nLIMIT 10000" } }
La variable LogName
émet également une requête pour déterminer la liste des noms de journaux possibles:
"dashboardFilters": [ { "filterType": "VALUE_ONLY", "templateVariable": "LogName", "valueType": "STRING", "timeSeriesQuery": { "opsAnalyticsQuery": { "savedQueryId": "", "sql": "SELECT log_name FROM `my-project.global._Default._Default` GROUP BY log_name LIMIT 1000", "queryHandle": "" }, "unitOverride": "", "outputFullDuration": false } } ],
Lorsque l'option de menu de la variable permet aux utilisateurs de sélectionner plusieurs valeurs, vous devez caster la valeur de la variable en type de données GoogleSQL à l'aide de la fonction CAST
.
La requête suivante illustre cette syntaxe:
IF(ARRAY_LENGTH(CAST(@my_value_only_variable)) = 0, TRUE, severity IN UNNEST(@my_value_only_variable))
L'instruction IF
affichée dans les exemples précédents est recommandée, car SQL n'interprète pas l'opérateur générique comme signifiant "n'importe quelle valeur". Par conséquent, si vous omettez l'instruction IF
et si vous sélectionnez l'opérateur de caractères génériques, le résultat de la requête est une table vide. Dans le deuxième exemple, la fonction UNNEST
convertit le tableau en table.
Graphiques avec des requêtes MQL
Pour appliquer une variable basée sur un libellé à un graphique contenant une requête MQL, ajoutez un pipe, (|)
, puis suivez les instructions indiquées dans la section Syntaxe générale.
Lorsque vous utilisez l'interface à menus pour créer un graphique qui affiche des données de séries temporelles, vos sélections sont converties en filtre de surveillance.
Console
Par exemple, la requête suivante repose sur une variable basée sur un libellé, my_label_based_variable
, qui est résolue en expression de filtre:
fetch gce_instance | metric 'compute.googleapis.com/instance/cpu/utilization' | every 1m | ${my_label_based_variable}
Vous pouvez également modifier la requête pour ne résoudre que la valeur d'une variable.
L'exemple suivant utilise une expression régulière pour comparer la valeur d'une requête basée sur un libellé à instance_id
:
fetch gce_instance | metric 'compute.googleapis.com/instance/cpu/utilization' | filter resource.instance_id=~'${my_label_based_variable.value}' | group_by 1m, [value_utilization_mean: mean(value.utilization)] | every 1m
Si vous disposez d'une variable à valeur unique, omettez la clause .value
. Par exemple, pour filtrer par zone à l'aide d'une variable à valeur unique, la requête inclurait quelque chose comme ce qui suit:
resource.zone=~'${my_value_only_variable}'
API
Par exemple, le code JSON suivant illustre une requête qui s'appuie sur une variable basée sur un libellé, my_label_based_variable
, qui est résolue en expression de filtre:
"timeSeriesQuery": { "timeSeriesQueryLanguage": "fetch gce_instance\n | metric 'compute.googleapis.com/instance/cpu/utilization'\n | group_by 1m, [value_utilization_mean: mean(value.utilization)]\n | every 1m\n | ${my_label_based_variable}", "unitOverride": "", "outputFullDuration": false },
Vous pouvez également modifier la requête pour ne résoudre que la valeur d'une variable.
L'exemple suivant utilise une expression régulière pour comparer la valeur d'une requête basée sur un libellé à instance_id
:
"timeSeriesQuery": { "timeSeriesQueryLanguage": "fetch gce_instance\n | metric 'compute.googleapis.com/instance/cpu/utilization'\n | filter resource.instance_id=~'${my_label_based_variable.value}'\n | group_by 1m, [value_utilization_mean: mean(value.utilization)]\n | every 1m\n", "unitOverride": "", "outputFullDuration": false },
Si vous disposez d'une variable à valeur unique, omettez la clause .value
. Par exemple, pour filtrer par zone à l'aide d'une variable à valeur unique, la requête inclurait quelque chose comme ce qui suit:
resource.zone=~'${my_value_only_variable}'
Le tableau suivant illustre la façon dont les exemples de variables sont résolus par le MQL. Comme indiqué précédemment, lorsque seule la valeur d'une variable est utilisée, vous devez utiliser une expression régulière comme opérateur de comparaison:
Syntaxe | Valeur sélectionnée |
Expression MQL résolue |
---|---|---|
${my_label_based_variable} |
12345 |
filter (resource.instance_id == '12345')
L'exemple de variable est basé sur le libellé de ressource |
${my_label_based_variable} |
* |
filter (true) |
${my_label_based_variable.value} ${my_value_based_variable} |
12345 |
12345 |
${my_label_based_variable.value} ${my_value_based_variable} |
* |
.* |
Graphiques avec des requêtes de filtres de surveillance
Pour appliquer une variable basée sur des étiquettes à un graphique contenant une requête sous la forme d'un filtre de surveillance, suivez les instructions de la section Syntaxe générale.
Console
Si vous utilisez la console Google Cloud pour créer vos graphiques et si vous utilisez l'interface basée sur les menus, vous pouvez appliquer une variable basée sur des libellés à un graphique à l'aide du champ Appliquer aux graphiques de la variable ou en modifiant le widget et en sélectionnant la variable basée sur des libellés dans le menu Filtrer. Le menu Filtrer liste toutes les variables basées sur des étiquettes et toutes les clés d'étiquette.
Pour appliquer une variable basée sur la valeur à ces types de graphiques, procédez comme suit:
- Modifier le graphique
- Dans le volet de requête, cliquez sur Ajouter un filtre, puis sélectionnez une clé de libellé. Par exemple, vous pouvez sélectionner zone.
- Dans le menu Valeur, sélectionnez votre variable à valeur unique.
- Cliquez sur Appliquer.
- Pour enregistrer le tableau de bord modifié, cliquez sur Enregistrer dans la barre d'outils.
Par exemple, le code JSON suivant illustre une requête qui s'appuie sur une variable basée sur un libellé, my_label_based_variable
, qui est résolue en expression de filtre:
metric.type="compute.googleapis.com/instance/cpu/utilization" resource.type="gce_instance" ${my_label_based_variable}"
Les widgets qui utilisent une requête sous la forme d'un filtre de surveillance ne peuvent pas filtrer la série temporelle en fonction de la valeur d'une variable basée sur des étiquettes. Toutefois, vous pouvez filtrer en fonction de variables de type "Valeur uniquement".
Par exemple, la requête suivante affiche la valeur du champ Filtres d'une requête qui filtre par zone
, en fonction de la valeur d'une variable à valeur unique:
metric.type="compute.googleapis.com/instance/cpu/utilization" resource.type="gce_instance" resource.label."zone"=monitoring.regex.full_match(${my_value_only_variable})
API
Par exemple, le code JSON suivant illustre une requête qui s'appuie sur une variable basée sur un libellé, my_label_based_variable
, qui est résolue en expression de filtre:
"timeSeriesQuery": { "timeSeriesFilter": { "filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\" ${my_label_based_variable} ", "aggregation": { "alignmentPeriod": "60s", "perSeriesAligner": "ALIGN_MEAN", "groupByFields": [] } }, "unitOverride": "", "outputFullDuration": false },
Les widgets qui utilisent une requête sous la forme d'un filtre de surveillance ne peuvent pas filtrer la série temporelle en fonction de la valeur d'une variable basée sur des étiquettes. Toutefois, vous pouvez filtrer en fonction de variables de type "Valeur uniquement".
Par exemple, la requête suivante affiche le champ "filter"
d'une requête qui filtre par zone
, en fonction de la valeur d'une variable à valeur unique:
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\" resource.labels.\"zone\"=monitoring.regex.full_match(${my_value_only_variable})"
Le tableau suivant illustre la façon dont les exemples de variables sont résolus par le filtre de surveillance. Comme indiqué précédemment, lorsque seule la valeur d'une variable est utilisée, vous devez utiliser une expression régulière comme opérateur de comparaison:
Syntaxe | Valeur sélectionnée |
Expression de filtre résolue |
---|---|---|
${my_label_based_variable} |
12345 |
resource.instance_id == "12345"
L'exemple de variable est basé sur le libellé de ressource |
${my_label_based_variable} |
* |
Omission |
${my_label_based_variable.value} |
12345 |
Non compatible |
${my_label_based_variable.value} |
* |
Non compatible |
${my_value_based_variable} |
12345 |
"12345" |
${my_value_based_variable} |
* |
".*" |
Créer un tableau de bord
Pour créer un tableau de bord personnalisé, appelez la méthode dashboards.create
en lui fournissant la disposition du tableau de bord et les widgets à y afficher.
Lorsque vous créez un tableau de bord, l'API génère automatiquement l'identifiant dashboard_id
. Si vous souhaitez spécifier un identifiant dashboard_id
personnalisé, vous pouvez définir le champ name
d'un objet Dashboard
. Le format du champ de nom se présente ainsi :
"name": "projects/${PROJECT_ID}/dashboards/${DASHBOARD_ID}"
API
Pour créer un tableau de bord, envoyez une requête POST
au point de terminaison Dashboard
.
curl -d @my-dashboard.json -H "Authorization: Bearer $ACCESS_TOKEN" -H 'Content-Type: application/json' -X POST https://monitoring.googleapis.com/v1/projects/${PROJECT_ID}/dashboards
gcloud
Pour créer un tableau de bord dans un projet, utilisez la commande gcloud monitoring dashboards create
.
gcloud monitoring dashboards create --config-from-file=my-dashboard.json
Par exemple, si vous souhaitez dupliquer un tableau de bord, procédez comme suit:
- Suivez la procédure de la section Obtenir un tableau de bord pour télécharger la définition du tableau de bord d'origine.
- Modifiez le code JSON renvoyé pour supprimer les champs
etag
etname
, et modifiez la valeur du champdisplayName
. - Exécutez la commande pour créer le tableau de bord.
Pour en savoir plus, consultez la référence gcloud monitoring dashboards
create
.
Terraform
Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base. Pour en savoir plus, consultez la documentation de référence du fournisseur Terraform.
Pour créer un tableau de bord à l'aide de Terraform, utilisez la ressource Terraform google_monitoring_dashboard
.
Dans la commande, définissez les champs suivants:
dashboard_json
: représentation JSON du tableau de bord, au formatDashboards
.Pour obtenir des exemples de ce format, vous pouvez lister vos tableaux de bord à l'aide de l'explorateur d'API, ou ouvrir un tableau de bord dans la console Google Cloud et afficher les représentations JSON.
parent
: nom complet de votre projet. Par exemple, vous pouvez définir ce champ sur"projects/PROJECT_ID"
, où PROJECT_ID correspond à l'ID de votre projet Google Cloud.
Les exemples présentés ici créent un tableau de bord à l'aide du fichier my-dashboard.json
.
Vous pouvez gérer votre tableau de bord via la console Google Cloud.
Pour voir d'autres configurations de tableau de bord, consultez la page Exemples de tableaux de bord et de dispositions.
Supprimer des tableaux de bord
Pour supprimer un tableau de bord personnalisé, appelez la méthode dashboards.delete
en spécifiant le tableau de bord à supprimer.
API
Pour supprimer un tableau de bord personnalisé, envoyez une requête DELETE
au point de terminaison Dashboard
incluant l'ID du tableau de bord à supprimer.
curl -H "Authorization: Bearer $ACCESS_TOKEN" -X DELETE https://monitoring.googleapis.com/v1/projects/${PROJECT_ID}/dashboards/${DASHBOARD_ID}
Si l'opération réussit, l'API renvoie une réponse vide. Sinon, l'appel renvoie une erreur.
gcloud
Pour supprimer un tableau de bord personnalisé, utilisez gcloud monitoring dashboards delete
et spécifiez l'ID complet du tableau de bord à supprimer:
gcloud monitoring dashboards delete projects/${PROJECT_ID}/dashboards/${DASHBOARD_ID}
Pour en savoir plus, consultez la référence gcloud monitoring dashboards
delete
.
Terraform
Vous pouvez supprimer des ressources à l'aide de Terraform. Pour en savoir plus sur la suppression de ressources, consultez la commande Terraform destroy.
Répertorier les tableaux de bord
Pour lister tous les tableaux de bord associés à un projet, appelez la méthode dashboards.list
en spécifiant l'ID du projet.
API
Pour répertorier tous les tableaux de bord personnalisés d'un projet, envoyez l'ID du projet au point de terminaison Dashboard
.
curl -H "Authorization: Bearer $ACCESS_TOKEN" https://monitoring.googleapis.com/v1/projects/${PROJECT_ID}/dashboards
gcloud
Pour répertorier tous les tableaux de bord personnalisés d'un projet, utilisez la commande gcloud monitoring dashboards list
:
gcloud monitoring dashboards list
Pour en savoir plus, consultez la documentation de référence sur gcloud monitoring dashboards list
.
Terraform
Vous ne pouvez pas utiliser Terraform pour envoyer une requête à votre projet, la réponse étant une liste de tableaux de bord. Toutefois, vous pouvez afficher ces tableaux de bord à l'aide de la console Google Cloud.
Les exemples renvoient les tableaux de bord personnalisés associés à votre projet.
Paginer la réponse de List
La méthode dashboards.list
permet la pagination, ce qui vous permet d'afficher les résultats page par page et non en un seul bloc.
API
Pour la première page de la liste de résultats, spécifiez le paramètre pageSize
(taille de page) dans la requête :
curl -H "Authorization: Bearer $ACCESS_TOKEN" https://monitoring.googleapis.com/v1/projects/${PROJECT_ID}/dashboards?page_size=1
La méthode renvoie la première page de la liste ainsi que le jeton nextPageToken
. Exemple :
{ "dashboards" : [ { "displayName" : "Grid Layout Example", "gridLayout" : { "widgets" : [ { ... }, { ... }, { ... }, ] } } ] }, "nextPageToken": "ChYqFDEyMzkzMzUwNzg0OTE1MDI4MjM3"
Pour chacune des pages restantes, vous devez inclure le jeton nextPageToken
correspondant dans la requête.
gcloud
Pour spécifier le nombre de ressources par page, transmettez l'option --page-size
à l'aide de la commande. Exemple :
gcloud monitoring dashboards list --page-size=1
Terraform
Vous ne pouvez pas utiliser Terraform pour envoyer une requête à votre projet, la réponse étant une liste paginée de tableaux de bord. Toutefois, vous pouvez afficher ces tableaux de bord à l'aide de la console Google Cloud.
Obtenir un tableau de bord
Pour obtenir un tableau de bord personnalisé spécifique pour un projet, appelez la méthode dashboards.get
en spécifiant l'ID du tableau de bord.
API
Pour récupérer un tableau de bord personnalisé spécifique, envoyez l'ID du tableau de bord au point de terminaison Dashboard
.
curl -H "Authorization: Bearer $ACCESS_TOKEN" https://monitoring.googleapis.com/v1/projects/${PROJECT_ID}/dashboards/${DASHBOARD_ID}
La méthode renvoie une réponse semblable à l'exemple ci-dessous :
{ "columnLayout": { "columns": [ { "widgets": [ { "text": { "content": "Text Widget 1", "format": "RAW" } }, { "text": { "content": "**Text Widget 2**", "format": "MARKDOWN" } }, { "text": { "content": "_Text Widget 3_", "format": "MARKDOWN" } } ] } ] }, "displayName": "Column-layout example", "etag": "cb3070baf15de7c79d78761baac3a386", "name": "projects/730041941835/dashboards/e4cd063e-5414-4e07-9e1e-450d6d3a531d" }
gcloud
Pour obtenir un tableau de bord personnalisé spécifique, utilisez la commande gcloud monitoring dashboards describe
et spécifiez l'ID du tableau de bord:
gcloud monitoring dashboards describe ${DASHBOARD_ID} --format=json
La commande renvoie le tableau de bord demandé :
{ "columnLayout": { "columns": [ { "widgets": [ { "text": { "content": "Text Widget 1", "format": "RAW" } }, { "text": { "content": "**Text Widget 2**", "format": "MARKDOWN" } }, { "text": { "content": "_Text Widget 3_", "format": "MARKDOWN" } } ] } ] }, "displayName": "Column-layout example", "etag": "cb3070baf15de7c79d78761baac3a386", "name": "projects/730041941835/dashboards/e4cd063e-5414-4e07-9e1e-450d6d3a531d" }
Pour en savoir plus, consultez la documentation de référence sur gcloud monitoring dashboards describe
.
Terraform
Vous ne pouvez pas utiliser Terraform pour envoyer une requête à votre projet, la réponse étant un tableau de bord individuel. Toutefois, vous pouvez afficher ces tableaux de bord à l'aide de la console Google Cloud.
Mettre à jour le tableau de bord
Pour mettre à jour un tableau de bord personnalisé existant, appelez la méthode dashboards.patch
. Pour obtenir la valeur etag
actuelle, vous pouvez appeler la méthode dashboards.get
: la valeur figure dans la réponse.
API
Pour mettre à jour un tableau de bord personnalisé, envoyez une requête PATCH
au point de terminaison Dashboard
et fournissez l'objet Dashboard
révisé et la valeur etag
de la dernière réponse dashboards.get
.
curl -d @my-updated-dashboard.json -H "Authorization: Bearer $ACCESS_TOKEN" -H 'Content-Type: application/json' -X PATCH https://monitoring.googleapis.com/v1/projects/${PROJECT_ID}/dashboards/${DASHBOARD_ID}
L'exemple précédent met à jour un tableau de bord personnalisé existant à l'aide du fichier my-updated-dashboard.json
. La réponse, qui inclut une nouvelle valeur etag
, est une copie de la liste de tableaux de bord mise à jour.
gcloud
Pour mettre à jour un tableau de bord personnalisé, utilisez gcloud monitoring dashboards update
, spécifiez l'ID du tableau de bord à mettre à jour et effectuez les modifications.
gcloud monitoring dashboards update ${DASHBOARD_ID} --config-from-file=my-updated-dashboard.json
Pour en savoir plus, consultez la documentation de référence sur gcloud monitoring dashboards update
.
L'exemple précédent met à jour un tableau de bord personnalisé existant à l'aide du fichier my-updated-dashboard.json
. La réponse, qui inclut une nouvelle valeur etag
, est une copie de la liste de tableaux de bord mise à jour.
Terraform
Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base. Pour en savoir plus, consultez la documentation de référence du fournisseur Terraform.
Pour mettre à jour un tableau de bord à l'aide de Terraform, utilisez la ressource Terraform google_monitoring_dashboard
.
Dans la commande, définissez les champs suivants:
dashboard_json
: représentation JSON du tableau de bord, au formatDashboards
.parent
: nom complet de votre projet. Par exemple, vous pouvez définir ce champ sur"projects/PROJECT_ID"
, où PROJECT_ID correspond à l'ID de votre projet Google Cloud.
Étape suivante
- Exemples de tableaux de bord et de dispositions
- Créer et gérer des tableaux de bord personnalisés avec la console Google Cloud