Cette page explique comment créer des tableaux de bord à l'aide de l'API Cloud Monitoring. Pour chaque exemple, la définition du tableau de bord au format JSON et le tableau de bord correspondant sont affichés.
Cloud Monitoring fournit également un ensemble organisé de définitions de tableau de bord sur GitHub. Vous pouvez installer ces définitions dans votre projet Google Cloud en tant que tableaux de bord personnalisés. Pour en savoir plus sur ce dépôt et sur l'installation de ces tableaux de bord, consultez la page Installer des exemples de tableaux de bord.
Quand utiliser l'API ?
L'API Cloud Monitoring vous permet de gérer plusieurs tableaux de bord à la fois. Même si vous pouvez utiliser la console Google Cloud pour gérer vos tableaux de bord, vous trouverez peut-être qu'il est plus facile d'utiliser l'API pour gérer vos des tableaux de bord personnalisés de façon groupée.
Vous devez également utiliser l'API lorsque vous souhaitez ajouter le widget à espace réservé vide à votre tableau de bord.
Utiliser MQL ou PromQL avec l'API
Vous créez des tableaux de bord à l'aide de la méthode dashboards.create
.
. Vous transmettez à la méthode API un objet Dashboard
, qui contient
une entrée pour chaque widget affiché dans le tableau de bord.
Lorsqu'un widget affiche des données de séries temporelles, comme un widget de graphique,
son entrée dans l'objet Dashboard
contient un objet TimeSeriesQuery
.
Cet objet décrit les données de séries temporelles
un graphique, et vous spécifiez ces données à l'aide d'un
Filtre Monitoring, un
Requête MQL ou requête PromQL:
Pour utiliser les filtres Monitoring, renseignez le champ
timeSeriesField
. Les exemples de cette page utilisent des filtres Cloud Monitoring.Pour utiliser une requête MQL, renseignez le champ
timeSeriesQueryLanguage
. Pour en savoir plus, consultez Créer des graphiques.Pour utiliser une requête PromQL, renseignez le champ
prometheusQuery
. Pour obtenir des informations générales, consultez la page PromQL dans Cloud Monitoring.
Dispositions de tableaux de bord
Cette section contient des informations sur les différentes dispositions des tableaux de bord disponibles.
Tableau de bord dans GridLayout
Ce tableau de bord affiche une ressource GridLayout
comportant trois widgets.
{
"displayName": "Grid Layout Example",
"gridLayout": {
"columns": "2",
"widgets": [
{
"title": "Widget 1",
"xyChart": {
"dataSets": {
"timeSeriesQuery": {
"timeSeriesFilter": {
"filter": "metric.type=\"agent.googleapis.com/nginx/connections/accepted_count\"",
"aggregation": {
"perSeriesAligner": "ALIGN_RATE"
}
},
"unitOverride": "1"
},
"plotType": "LINE"
},
"timeshiftDuration": "0s",
"yAxis": {
"label": "y1Axis",
"scale": "LINEAR"
}
}
},
{
"text": {
"content": "Widget 2"
}
},
{
"title": "Widget 3",
"xyChart": {
"dataSets": {
"timeSeriesQuery": {
"timeSeriesFilter": {
"filter": "metric.type=\"agent.googleapis.com/nginx/connections/accepted_count\"",
"aggregation": {
"perSeriesAligner": "ALIGN_RATE"
}
},
"unitOverride": "1"
},
"plotType": "STACKED_BAR"
},
"timeshiftDuration": "0s",
"yAxis": {
"label": "y1Axis",
"scale": "LINEAR"
}
}
}
]
}
}
Le tableau de bord ressemble à l'exemple suivant :
Tableau de bord dans MosaicLayout
Ce tableau de bord affiche une ressource MosaicLayout
comportant deux widgets.
{
"displayName": "Mosaic Layout Example",
"mosaicLayout": {
"columns": 12,
"tiles": [
{
"xPos": 2,
"yPos": 2,
"width": 7,
"height": 2,
"widget": {
"title": "CPU utilization in us-central1-a",
"scorecard": {
"timeSeriesQuery": {
"timeSeriesFilter": {
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\" resource.label.zone=\"us-central1-a\"",
"aggregation": {
"perSeriesAligner": "ALIGN_MEAN",
"crossSeriesReducer": "REDUCE_MAX"
}
},
"unitOverride": "1"
},
"gaugeView": {
"upperBound": 1.5
},
"thresholds": [
{
"value": 0.8,
"color": "YELLOW",
"direction": "ABOVE"
},
{
"value": 1,
"color": "RED",
"direction": "ABOVE"
}
]
}
}
},
{
"xPos": 1,
"yPos": 5,
"width": 4,
"height": 4,
"widget": {
"title": "My 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",
"minAlignmentPeriod": "60s"
}
],
"yAxis": {
"label": "y1Axis",
"scale": "LINEAR"
}
}
}
}
]
}
}
Le tableau de bord ressemble à l'exemple suivant :
Tableau de bord dans RowLayout
Ce tableau de bord affiche une ressource RowLayout
comportant trois widgets.
{
"displayName": "Row Layout Example",
"rowLayout": {
"rows": [
{
"weight": "1",
"widgets": [
{
"text": {
"content": "Widget 1",
"format": "MARKDOWN"
}
},
{
"text": {
"content": "Widget 2",
"format": "MARKDOWN"
}
},
{
"text": {
"content": "Widget 3",
"format": "MARKDOWN"
}
}
]
}
]
}
}
Le tableau de bord ressemble à l'exemple suivant :
Tableau de bord dans ColumnLayout
Ce tableau de bord affiche une ressource ColumnLayout
comportant trois widgets.
{
"displayName": "Column Layout Example",
"columnLayout": {
"columns": [
{
"weight": "1",
"widgets": [
{
"text": {
"content": "Widget 1",
"format": "MARKDOWN"
}
},
{
"text": {
"content": "Widget 2",
"format": "MARKDOWN"
}
},
{
"text": {
"content": "Widget 3",
"format": "MARKDOWN"
}
}
]
}
]
}
}
Le tableau de bord ressemble à l'exemple suivant :
Activer les événements du tableau de bord, et ajouter des filtres et des libellés
Cette section explique comment ajouter des filtres et des étiquettes à un tableau de bord, et comment configurer un tableau de bord pour afficher des événements.
Activer les événements sur les tableaux de bord
Vous pouvez configurer un tableau de bord pour afficher les événements,
comme un événement de mise à jour Google Kubernetes Engine ou de défaillance d'une machine virtuelle,
en incluant un champ annotations
dans le fichier Dashboard
.
. Le champ annotations
contient l'instance d'une
DashboardAnnotations
, qui contient deux champs:
Le champ
defaultResourceName
répertorie les valeurs par défaut au niveau du tableau de bord pour les des projets Google Cloud pour rechercher des événements. Si vous ne spécifiez pas ce champ, votre projet sélectionné est recherché.Tableau d'objets
EventAnnotation
. Chaque contient les éléments suivants:- Un champ
displayName
, qui vous permet de définir l'étiquette sur le d'activation/de désactivation spécifique à l'événement. Si ce champ n'est pas spécifié ou lorsque la valeur de ce champ est une chaîne vide, le nom par défaut de l'événement s'affiche. - Un champ
enabled
qui contrôle la valeur du bouton d'activation de l'événement. Lorsque la valeur esttrue
, le bouton est en positionon
et les événements sont affichés sur le tableau de bord. Lorsque la valeur estfalse
, le bouton est en positionoff
. - Un champ
eventType
, qui contient une valeur issue duEventType
énumération. - Un champ
filter
, qui vous permet de spécifier une requête à ajouter au spécifique à un événement. Lorsque la valeur de ce champ est une chaîne vide, alors c'est la requête spécifique à l'événement qui est utilisée. - Un champ
resourceNames
, qui vous permet de définir une liste de des projets Google Cloud pour rechercher des événements. Lorsque ce champ est un tableau vide, la recherche est effectuée sur le projet sélectionné.
- Un champ
L'exemple suivant montre un champ annotations
qui spécifie un
Événement Google Kubernetes Engine:
{
"displayName": "Annotation example",
"annotations": {
"defaultResourceNames": [],
"eventAnnotations": [
{
"displayName": "",
"enabled": true,
"eventType": "GKE_CLUSTER_UPDATE",
"filter": "resource.labels.cluster_name=my-cluster",
"resourceNames": []
}
]
},
"dashboardFilters": [],
"mosaicLayout": {
...
},
"labels": {}
}
Dans l'exemple précédent, le champ filter
permet de restreindre la requête
au cluster my-name
. Le champ displayName
est défini sur
une chaîne vide, de sorte que le nom par défaut du type d'événement s'affiche sur
le bouton d'activation de l'événement. Enfin, comme resourceNames
est défini sur
un tableau vide, les entrées de journal de votre projet Google Cloud actuel
sont interrogées.
Ajouter des filtres aux tableaux de bord
Vous pouvez ajouter à un tableau de bord des filtres permanents pour contrôler les données des widgets sur l'écran d'un tableau de bord. Pour obtenir un exemple de tableau de bord avec un filtre permanent, consultez Filtres de tableau de bord.
Ajouter des étiquettes de tableau de bord
Cet exemple 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
correspondent à des chaînes. Lorsque vous ajoutez un
à un tableau de bord, définissez key
sur le nom du libellé, puis définissez
value
en une chaîne vide.
L'ajout d'étiquettes à un tableau de bord est facultatif.
Tableaux de bord avec Widgets
Cette section inclut des exemples de tableaux de bord contenant différents types de widgets.
Tableau de bord avec un widget XyChart
Ce tableau de bord affiche un tableau de bord comportant un widget XyChart
de base. Si
vous avez déjà utilisé la console Google Cloud pour créer des graphiques sur des tableaux de bord,
sont des instances du widget XyChart
.
Tout comme les fonctionnalités fournies dans la console Google Cloud, l'API
permet de modifier l'PlotType
du graphique ou de
configurer les modes d'affichage du graphique.
{
"dashboardFilters": [],
"displayName": "Example line chart",
"labels": {},
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"height": 16,
"widget": {
"title": "VM Instance - CPU utilization [MEAN]",
"xyChart": {
"chartOptions": {
"mode": "COLOR"
},
"dataSets": [
{
"minAlignmentPeriod": "60s",
"plotType": "LINE",
"targetAxis": "Y1",
"timeSeriesQuery": {
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_MEAN",
"groupByFields": [
"resource.label.\"zone\""
],
"perSeriesAligner": "ALIGN_MEAN"
},
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\""
}
}
}
],
"thresholds": [],
"yAxis": {
"label": "",
"scale": "LINEAR"
}
}
},
"width": 24
}
]
}
}
Le graphique du tableau de bord ressemble à l'exemple suivant:
La section suivante montre comment créer un widget de graphique d'Analyse de journaux, afficher un seuil sur un graphique et configurer si le graphique utilise l'axe Y de gauche, l'axe Y de droite ou les deux.
Tableau de bord avec un graphique d'Analyse de journaux
Ce tableau de bord affiche un tableau de bord avec un graphique d'Analyse de journaux. La exemple de JSON contient une requête SQL.
{
"displayName": "Example",
"dashboardFilters": [],
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"width": 24,
"height": 16,
"widget": {
"title": "Sample analytics chart",
"xyChart": {
"chartOptions": {
"mode": "COLOR"
},
"dataSets": [
{
"breakdowns": [],
"dimensions": [
{
"column": "location",
"columnType": "STRING",
"maxBinCount": 5,
"sortColumn": "location",
"sortOrder": "SORT_ORDER_ASCENDING"
}
],
"measures": [
{
"aggregationFunction": {
"parameters": [],
"type": "count"
},
"column": ""
}
],
"plotType": "STACKED_BAR",
"targetAxis": "Y1",
"timeSeriesQuery": {
"opsAnalyticsQuery": {
"queryHandle": "",
"sql": "SELECT\n CAST(JSON_VALUE(resource.labels.location) AS STRING) AS location,\n severity,\nFROM\n `TABLE_NAME_OF_LOG_VIEW`"
}
}
}
],
"thresholds": [],
"yAxis": {
"label": "",
"scale": "LINEAR"
}
}
}
}
]
},
"labels": {}
}
Le graphique du tableau de bord ressemble à l'exemple suivant:
Tableau de bord avec un XyChart
et un seuil
Ce tableau de bord affiche un tableau de bord comportant un XyChart
de base, un seuil et l'axe y à gauche configuré.
{
"dashboardFilters": [],
"displayName": "Example line with threshold",
"labels": {},
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"height": 16,
"widget": {
"title": "VM Instance - CPU utilization [MEAN]",
"xyChart": {
"chartOptions": {
"mode": "COLOR"
},
"dataSets": [
{
"minAlignmentPeriod": "60s",
"plotType": "LINE",
"targetAxis": "Y1",
"timeSeriesQuery": {
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_MEAN",
"groupByFields": [
"resource.label.\"zone\""
],
"perSeriesAligner": "ALIGN_MEAN"
},
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\""
}
}
}
],
"thresholds": [
{
"label": "",
"targetAxis": "Y1",
"value": 0.2
}
],
"yAxis": {
"label": "",
"scale": "LINEAR"
}
}
},
"width": 24
}
]
}
}
Dans l'exemple précédent, le fichier JSON spécifie l'utilisation de l'axe Y à gauche, car il contient une structure y2Axis
. Dans le champ targetAxis
, utilisez "Y1" pour l'axe Y de droite et "Y2" pour l'axe Y de gauche. Si vous omettez le champ targetAxis
, l'axe Y de droite est utilisé.
Le graphique de ce tableau de bord ressemble à l'exemple suivant:
Vous pouvez créer des graphiques qui affichent plusieurs types de métriques et qui utilisent
les axes de gauche et de droite. L'exemple précédent
illustrait un graphique avec
Un type de métrique unique, c'est-à-dire que le tableau dataSets
comporte un élément.
Lorsque vous représentez deux types de métriques dans un graphique, le tableau dataSets
contient deux éléments :
et chaque élément spécifie sa valeur targetAxis
.
Tableau de bord avec un widget XyChart
comportant une ressource STACKED_AREA PlotType
Ce tableau de bord affiche un widget XyChart
comportant une ressource STACKED_AREA
PlotType
.
{
"dashboardFilters": [],
"displayName": "Example stacked area",
"labels": {},
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"height": 16,
"widget": {
"title": "VM Instance - CPU utilization [MEAN]",
"xyChart": {
"chartOptions": {
"mode": "COLOR"
},
"dataSets": [
{
"minAlignmentPeriod": "60s",
"plotType": "STACKED_AREA",
"targetAxis": "Y1",
"timeSeriesQuery": {
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_MEAN",
"groupByFields": [
"resource.label.\"zone\""
],
"perSeriesAligner": "ALIGN_MEAN"
},
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\""
}
}
}
],
"thresholds": [],
"yAxis": {
"label": "",
"scale": "LINEAR"
}
}
},
"width": 24
}
]
}
}
Le graphique du tableau de bord ressemble à l'exemple suivant:
Tableau de bord avec un widget XyChart comportant une ressource STACKED_BAR PlotType
Ce tableau de bord affiche un widget XyChart
comportant une ressource STACKED_BAR
PlotType
.
{
"dashboardFilters": [],
"displayName": "Example stacked bar",
"labels": {},
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"height": 16,
"widget": {
"title": "VM Instance - CPU utilization [MEAN]",
"xyChart": {
"chartOptions": {
"mode": "COLOR"
},
"dataSets": [
{
"minAlignmentPeriod": "60s",
"plotType": "STACKED_BAR",
"targetAxis": "Y1",
"timeSeriesQuery": {
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_MEAN",
"groupByFields": [
"resource.label.\"zone\""
],
"perSeriesAligner": "ALIGN_MEAN"
},
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\""
}
}
}
],
"thresholds": [],
"yAxis": {
"label": "",
"scale": "LINEAR"
}
}
},
"width": 24
}
]
}
}
Le tableau de bord ressemble à l'exemple suivant :
Tableau de bord avec un widget Scorecard
de base
Ce tableau de bord affiche un widget Scorecard
sans jauge ni graphique sparkline. L'exemple montre l'utilisation du processeur Compute Engine et le tableau de données comporte deux seuils. Un seuil utilise la couleur jaune pour indiquer que l'utilisation du processeur est supérieure à 70%, l'autre utilise le rouge pour indiquer qu'il est supérieur à 90%.
Étant donné que l'utilisation actuelle du processeur est inférieure aux seuils spécifiés, la couleur est verte.
{
"dashboardFilters": [],
"displayName": "Example-basic scorecard",
"labels": {},
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"height": 8,
"widget": {
"scorecard": {
"thresholds": [
{
"color": "YELLOW",
"direction": "ABOVE",
"label": "",
"value": 0.7
},
{
"color": "RED",
"direction": "ABOVE",
"label": "",
"value": 0.9
}
],
"timeSeriesQuery": {
"outputFullDuration": true,
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_MEAN",
"groupByFields": [],
"perSeriesAligner": "ALIGN_MEAN"
},
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\""
}
}
},
"title": "VM Instance - CPU utilization [MEAN]"
},
"width": 16
}
]
}
}
Le tableau de bord ressemble à l'exemple suivant :
Tableau de bord avec un widget Scorecard
comportant une ressource GaugeView
Ce tableau de bord ajoute une jauge au widget Scorecard de base de l'exemple précédent.
L'objet GaugeView
peut spécifier une limite supérieure et une limite inférieure, afin d'indiquer la plage de valeurs à afficher sur la jauge. Étant donné que le widget Scorecard affiche des valeurs comprises entre 0 et 1, ces limites supérieure et inférieure sont raisonnables. Pour ajouter la jauge, ajoutez ce qui suit au fichier JSON du widget Scorecard de base :
"gaugeView": {
"lowerBound": 0,
"upperBound": 1,
},
Vous trouverez ci-dessous la spécification complète du tableau de bord modifié. La valeur actuelle est inférieure aux seuils, qui sont colorés de manière appropriée sur la jauge.
{
"dashboardFilters": [],
"displayName": "Example-Gauge",
"labels": {},
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"height": 8,
"widget": {
"scorecard": {
"gaugeView": {
"lowerBound": 0,
"upperBound": 1
},
"thresholds": [
{
"color": "YELLOW",
"direction": "ABOVE",
"label": "",
"value": 0.7
},
{
"color": "RED",
"direction": "ABOVE",
"label": "",
"value": 0.9
}
],
"timeSeriesQuery": {
"outputFullDuration": true,
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_MEAN",
"groupByFields": [],
"perSeriesAligner": "ALIGN_MEAN"
},
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\""
}
}
},
"title": "VM Instance - CPU utilization [MEAN]"
},
"width": 16
}
]
}
}
Le graphique de ce tableau de bord ressemble à l'exemple suivant:
Tableau de bord avec un widget Scorecard
comportant une ressource SparkChartView
Ce tableau de bord remplace la jauge de l'exemple précédent par un graphique sparkline.
L'objet SparkChartView
peut créer des graphiques en courbes ou à barres dans un widget Scorecard.
Cet exemple utilise une courbe. Tant que la valeur n'enfreint pas un seuil, elle est verte. Pour ajouter le graphique sparkline, remplacez l'objet JSON gaugeView
dans le graphique précédent par ce qui suit :
"sparkChartView": {
"sparkChartType": "SPARK_LINE"
},
Le tableau de données ressemble à l'exemple suivant:
Tableau de bord avec un widget PieChart
Les tableaux de bord peuvent afficher des données à l'aide d'un graphique circulaire. Chaque série temporelle contribue un segment au camembert. Les graphiques à secteurs n'affichent pas les données au fil du temps. à la place, ils n'affichent que la valeur la plus récente.
Tous les graphiques à secteurs sont spécifiés par le widget PieChart
.
Pour configurer le graphique afin d'afficher la somme des mesures les plus récentes, procédez comme suit :
définissez le champ chartType
sur DONUT
. Sinon, définissez ce champ sur la
la valeur de PIE
.
"pieChart": {
"chartType": "DONUT",
},
L'exemple suivant configure un tableau de bord avec deux graphiques à secteurs, dont un Graphique à secteurs configuré en tant que beignet:
{
"dashboardFilters": [],
"displayName": "Example Pie Donut",
"labels": {},
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"height": 16,
"widget": {
"pieChart": {
"chartType": "DONUT",
"dataSets": [
{
"minAlignmentPeriod": "60s",
"timeSeriesQuery": {
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"perSeriesAligner": "ALIGN_RATE"
},
"filter": "metric.type=\"compute.googleapis.com/instance/disk/read_bytes_count\" resource.type=\"gce_instance\"",
"secondaryAggregation": {
"alignmentPeriod": "60s",
"perSeriesAligner": "ALIGN_MEAN"
}
}
}
}
]
},
"title": "VM Instance - Disk read bytes [MEAN]"
},
"width": 24
},
{
"height": 16,
"widget": {
"pieChart": {
"chartType": "PIE",
"dataSets": [
{
"minAlignmentPeriod": "60s",
"timeSeriesQuery": {
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"perSeriesAligner": "ALIGN_RATE"
},
"filter": "metric.type=\"compute.googleapis.com/instance/disk/read_bytes_count\" resource.type=\"gce_instance\"",
"secondaryAggregation": {
"alignmentPeriod": "60s",
"perSeriesAligner": "ALIGN_MEAN"
}
}
}
}
]
},
"title": "VM Instance - Disk read bytes [MEAN]"
},
"width": 24,
"xPos": 24
},
]
}
}
Comme le montre la capture d'écran suivante, les deux widgets affichent les données sous forme de graphique à secteurs, avec un widget affichant la somme des valeurs les plus récentes:
Tableau de bord avec un widget TimeSeriesTable
Les tableaux de bord peuvent afficher des données sous forme de tableau, lorsqu'il en existe une pour chaque série temporelle surveillée. Les tableaux n'affichent pas les données au fil du temps. à la place, ils n'affichent que la valeur la plus récente.
Toutes les tables sont spécifiées par le widget TimeSeriesTable
:
Pour configurer le nombre maximal de lignes à afficher, définissez le paramètre
pickTimeSeriesFilter
. Par exemple, pour n'afficher que les deux avec la valeur moyenne la plus élevée au cours des 10 dernières minutes, incluent les éléments suivants:"pickTimeSeriesFilter": { "direction": "TOP", "numTimeSeries": 2, "rankingMethod": "METHOD_MEAN" },
Si vous omettez le champ
pickTimeSeriesFilter
, la table affiche ne peut pas contenir plus de 300 lignes.Pour configurer l'affichage des données dans le tableau, utilisez le champ
metricVisualization
:- Pour n'afficher qu'une valeur de type "25 %", omettez ce champ ou définissez la
sur
"NUMBER"
. Lorsque vous utilisez cette configuration, La console Google Cloud affiche le widget sous la forme d'un widget Table. - Pour afficher la valeur et un indicateur visuel de la valeur comparée à la
plage de valeurs possibles, définissez la valeur de ce champ sur
"BAR"
. Lorsque vous utilisez cette configuration, La console Google Cloud affiche le widget en tant que widget Top List.
- Pour n'afficher qu'une valeur de type "25 %", omettez ce champ ou définissez la
sur
Pour configurer les colonnes à afficher, utilisez le champ
columnSettings
. L'exemple suivant donne un tableau avec deux colonnes, l'une intituléeLatest Value
, qui est une colonne obligatoire, et l'autre colonne intituléeName (from instance_id)
:"columnSettings": [ { "column": "Name (from instance_id)", "visible": true } ],
Si vous omettez le champ
columnSettings
, la table affiche une colonne pour chaque étiquette.
L'exemple suivant montre un tableau de bord avec un widget Table et une Widget Top List:
{
"dashboardFilters": [],
"displayName": "Example",
"labels": {},
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"height": 16,
"widget": {
"timeSeriesTable": {
"columnSettings": [
{
"column": "value",
"visible": false
}
],
"dataSets": [
{
"minAlignmentPeriod": "60s",
"timeSeriesQuery": {
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"perSeriesAligner": "ALIGN_MEAN"
},
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\""
}
}
}
],
"metricVisualization": "NUMBER"
},
"title": "Table"
},
"width": 24,
"yPos": 16
},
{
"height": 16,
"widget": {
"timeSeriesTable": {
"columnSettings": [
{
"column": "value",
"visible": false
}
],
"dataSets": [
{
"minAlignmentPeriod": "60s",
"timeSeriesQuery": {
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"perSeriesAligner": "ALIGN_MEAN"
},
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\""
}
}
}
],
"metricVisualization": "BAR"
},
"title": "Top List"
},
"width": 24
}
]
}
}
Comme le montre la capture d'écran suivante, les deux widgets affichent des données sous forme de tableau et ils contiennent tous deux une barre de filtre. Cependant, les deux widgets préconfigurées pour afficher différentes colonnes et représenter la valeur numérique différemment:
Les colonnes de la table correspondent aux étiquettes. Chaque ligne correspond à une série temporelle.
Tableau de bord avec un widget Text
Cet exemple montre un tableau de bord avec un widget Text
.
{
"dashboardFilters": [],
"displayName": "DB2+TE",
"labels": {},
"mosaicLayout": {
"columns": 48,
"tiles": [
...
{
"height": 16,
"widget": {
"text": {
"content": "# Support information\n\n\nContact information: my-support-team@example.com\nOnline help: [Playbooks](https://example.com)\n\n",
"format": "MARKDOWN",
"style": {
"backgroundColor": "",
"fontSize": "FS_LARGE",
"horizontalAlignment": "H_LEFT",
"padding": "P_EXTRA_SMALL",
"textColor": "",
"verticalAlignment": "V_TOP"
}
}
},
"width": 24,
"yPos": 14
}
]
}
}
Le widget de texte ressemble à l'exemple suivant:
Tableau de bord avec un widget AlertChart
Ce tableau de bord affiche un tableau de bord comportant un widget AlertChart
:
{
"category": "CUSTOM",
"displayName": "Alerting policy chart example",
"mosaicLayout": {
"columns": 12,
"tiles": [
{
"height": 4,
"widget": {
"alertChart": {
"name": "projects/my-project/alertPolicies/14205854094151528373"
}
},
"width": 6,
}
]
}
}
Contrairement aux autres widgets de tableau de bord, vous ne spécifiez pas de titre ni de filtre de métriques pour ces widgets. À la place, vous devez spécifier le nom de ressource pour une règle d'alerte. La dernière entrée du champ name
correspond à l'identifiant de la règle d'alerte.
Le graphique du tableau de bord ressemble à l'exemple suivant:
Dans cet exemple, la règle d'alerte surveille l'utilisation du processeur de deux machines virtuelles différentes. La ligne en pointillé affiche le seuil de condition, qui est défini sur 50%. L'icône verte portant le libellé No incidents
indique qu'aucun incident n'est ouvert pour la règle d'alerte. Si vous placez votre pointeur sur l'icône d'incident, une boîte de dialogue s'ouvre et renvoie vers la règle d'alerte sous-jacente.
Tableau de bord avec un widget ErrorReportingPanel
Ce tableau de bord affiche un tableau de bord comportant un widget ErrorReportingPanel
:
{
"dashboardFilters": [],
"displayName": "Error reporting widget",
"labels": {},
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"height": 16,
"widget": {
"errorReportingPanel": {
"projectNames": [
"projects/my-project"
],
"services": [],
"versions": []
},
"title": "Error Reporting Panel"
},
"width": 24,
}
]
}
}
Nous vous recommandons de configurer la hauteur d'un panneau de création de rapports d'erreurs de sorte qu'elle soit égale à au moins 16 unités et sa largeur doit être d'au moins 24 unités. Lors de Par exemple, le widget a une hauteur de 16 unités et une largeur de 24 unités.
Le panneau de création de rapports d'erreurs affiche les groupes d'erreurs des projet. Ce panneau peut limiter les groupes d'erreurs à une ressource spécifique le type, le service ou la version d'un service. L'exemple suivant illustre un panneau de création de rapports d'erreurs:
Tableau de bord avec un widget IncidentList
Ce tableau de bord affiche un tableau de bord comportant un widget IncidentList
:
{
"category": "CUSTOM",
"dashboardFilters": [],
"displayName": "Incident widget",
"labels": {},
"mosaicLayout": {
"columns": 12,
"tiles": [
{
"height": 5,
"widget": {
"incidentList": {
"monitoredResources": [],
"policyNames": []
},
"title": "Incidents"
},
"width": 8,
"xPos": 0,
"yPos": 0
}
]
}
}
L'exemple précédent définit le champ title
sur Incidents
et configure
le widget permettant d'afficher tous les incidents pour les ressources de type gce_instance
.
Lorsque vous configurez ce widget, vous pouvez sélectionner plusieurs règles d'alerte ou
pour plusieurs types de ressources.
Le widget d'incident du tableau de bord ressemble à l'exemple suivant:
Tableau de bord avec un widget LogsPanel
Ce tableau de bord montre un tableau de bord avec un widget LogsPanel
:
{
"category": "CUSTOM",
"displayName": "Logs Panel",
"mosaicLayout": {
"columns": 12,
"tiles": [
{
"height": 4,
"widget": {
"logsPanel": {
"filter": "",
"resourceNames": [
"projects/012012012012"
]
},
"title": "Logs Panel"
},
"width": 6,
"xPos": 0,
"yPos": 0
}
]
}
}
Nous vous recommandons de configurer un panneau de journaux avec une hauteur d'au moins trois unités et une largeur d'au moins quatre unités. Dans l'exemple précédent, le widget a une hauteur de quatre unités et une largeur de six unités.
Le panneau des journaux affiche les journaux des projets Google Cloud répertoriés
dans le champ resourceNames
. L'exemple précédent ne spécifie qu'un seul projet. Cependant, vous pouvez inclure plusieurs projets dans cette liste.
Le panneau des journaux ressemble à l'exemple suivant :
Pour obtenir des informations de dépannage, consultez la section Échec de l'appel d'API pour créer un tableau de bord avec un panneau de journaux.
Tableau de bord avec un widget CollapsibleGroup
Ce tableau de bord montre un tableau de bord avec un widget CollapsibleGroup
:
{
"category": "CUSTOM",
"displayName": "Group testing",
"mosaicLayout": {
"columns": 12,
"tiles": [
{
"height": 4,
"widget": {
"collapsibleGroup": {
"collapsed": false
},
"title": "My group"
},
"width": 12,
"xPos": 0,
"yPos": 0
},
{
"height": 4,
"widget": {
"title": "VM Instance - CPU utilization [MEAN]",
"xyChart": {
"chartOptions": {
"mode": "COLOR"
},
"dataSets": [
{
"minAlignmentPeriod": "60s",
"plotType": "LINE",
"targetAxis": "Y1",
"timeSeriesQuery": {
"apiSource": "DEFAULT_CLOUD",
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_NONE",
"perSeriesAligner": "ALIGN_MEAN"
},
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\"",
"secondaryAggregation": {
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_NONE",
"perSeriesAligner": "ALIGN_NONE"
}
}
}
}
],
"thresholds": [],
"timeshiftDuration": "0s",
"yAxis": {
"label": "y1Axis",
"scale": "LINEAR"
}
}
},
"width": 6,
"xPos": 0,
"yPos": 0
}
]
}
}
Dans l'exemple précédent, le widget de groupe réductible contient un seul graphique.
qui affiche l'utilisation du processeur
d'une instance de VM. Widgets de groupe réductibles
s'étendent sur une ligne
entière d'un tableau. Un widget est inclus dans un groupe lorsque la
les spécifications de position et de hauteur (x,y) du groupe incluent les (x,y)
la position du widget. Dans l'exemple précédent, le groupe est à la position
de (0,0) et que sa hauteur est de 4. xyChart
est à la position (0,0), donc
il est inclus dans le groupe. Cependant, si la position de ce graphique est
a été modifiée en (0,5), le graphique est exclu du groupe. Enfin, lorsque
la position (x,y) d'un widget entraîne son inclusion dans le groupe,
la hauteur du widget de groupe réductible peut être agrandie.
Pour inclure un widget de groupe dans un tableau de bord, celui-ci doit disposer d'un
MosaicLayout
Le widget de groupe réductible ressemble à l'exemple suivant:
Tableau de bord avec un widget SingleViewGroup
Un widget SingleViewGroup
affiche un membre d'une
groupe à la fois. Vous spécifiez les graphiques et les autres widgets
dans le groupe. Vous pouvez également contrôler quel widget du groupe s'affiche.
à l'aide d'un menu dans le widget SingleViewGroup
.
Ce tableau de bord affiche un tableau de bord avec un widget SingleViewGroup
:
{
"dashboardFilters": [],
"displayName": "Example",
"labels": {},
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"height": 16,
"widget": {
"singleViewGroup": {},
"title": "Untitled group"
},
"width": 24,
"yPos": 16
},
{
"height": 16,
"widget": {
"title": "VM Instance - Disk read bytes [RATE]",
"xyChart": {
"chartOptions": {
"mode": "COLOR"
},
"dataSets": [
{
"minAlignmentPeriod": "60s",
"plotType": "LINE",
"targetAxis": "Y1",
"timeSeriesQuery": {
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"perSeriesAligner": "ALIGN_RATE"
},
"filter": "metric.type=\"compute.googleapis.com/instance/disk/read_bytes_count\" resource.type=\"gce_instance\""
}
}
}
],
"thresholds": [],
"yAxis": {
"label": "",
"scale": "LINEAR"
}
}
},
"width": 24,
"yPos": 16
},
{
"height": 16,
"widget": {
"title": "VM Instance - Disk write bytes [RATE]",
"xyChart": {
"chartOptions": {
"mode": "COLOR"
},
"dataSets": [
{
"minAlignmentPeriod": "60s",
"plotType": "LINE",
"targetAxis": "Y1",
"timeSeriesQuery": {
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"perSeriesAligner": "ALIGN_RATE"
},
"filter": "metric.type=\"compute.googleapis.com/instance/disk/write_bytes_count\" resource.type=\"gce_instance\""
}
}
}
],
"thresholds": [],
"yAxis": {
"label": "",
"scale": "LINEAR"
}
}
},
"width": 24,
"yPos": 16
}
]
}
}
Comme le montre l'exemple précédent, le tableau tiles
contient un
Objet SingleViewGroup
Toutefois, il ne spécifie pas quels objets
qu'il contient. À la place, l'appartenance à l'objet SingleViewGroup
est déterminée
par les valeurs des champs width
et yPos
. Les objets dont les valeurs
Les champs width
et yPos
correspondent aux
de l'objet SingleViewGroup
sont contenues dans
SingleViewGroup
. Dans l'exemple précédent, l'objet SingleViewGroup
contient deux graphiques.
Tableau de bord avec un widget SectionHeader
Un widget SectionHeader
crée un séparateur horizontal dans
à votre tableau de bord, ce qui crée une entrée dans la table du tableau de bord
contenus. Vous pouvez personnaliser l'entrée dans la table des matières et inclure
des informations supplémentaires dans le widget. Vous pouvez également configurer le widget
pour ajouter un séparateur à la table des matières après l’entrée de l’en-tête de section.
Ce tableau de bord affiche un tableau de bord avec un seul graphique et
Un widget SectionHeader
:
{
"dashboardFilters": [],
"displayName": "Example",
"labels": {},
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"height": 16,
"widget": {
"title": "VM Instance - Disk write bytes [RATE]",
"xyChart": {
"chartOptions": {
"mode": "COLOR"
},
"dataSets": [
{
"minAlignmentPeriod": "60s",
"plotType": "LINE",
"targetAxis": "Y1",
"timeSeriesQuery": {
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"perSeriesAligner": "ALIGN_RATE"
},
"filter": "metric.type=\"compute.googleapis.com/instance/disk/write_bytes_count\" resource.type=\"gce_instance\""
}
}
}
],
"thresholds": [],
"yAxis": {
"label": "",
"scale": "LINEAR"
}
}
},
"width": 24,
"yPos": 4
},
{
"height": 4,
"widget": {
"sectionHeader": {
"dividerBelow": true,
"subtitle": "Instance metrics"
},
"title": "Metrics"
},
"width": 48
}
]
}
}
Dans l'objet SectionHeader
, la valeur du champ title
s'affiche.
à la fois dans le widget et dans la table des matières. La valeur du paramètre
Le champ subtitle
n'est affiché que par le widget. Lorsque la valeur de
dividerBelow
est définie sur true
, puis un séparateur est ajouté à la table des matières.
Tableau de bord avec un widget SLO
Ce tableau de bord présente un tableau de bord avec un widget SLO:
{
"dashboardFilters": [],
"displayName": "Example",
"labels": {},
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"height": 16,
"widget": {
"title": "SLO Error Budget: 99.5% - Distribution Cut - Calendar month",
"xyChart": {
"chartOptions": {
"mode": "COLOR"
},
"dataSets": [
{
"breakdowns": [],
"dimensions": [],
"legendTemplate": "Remaining error requests before SLO is burned",
"measures": [],
"plotType": "LINE",
"targetAxis": "Y1",
"timeSeriesQuery": {
"timeSeriesFilter": {
"aggregation": {
"perSeriesAligner": "ALIGN_NEXT_OLDER"
},
"filter": "select_slo_budget(\"projects/Project_Number/services/SERVICE_ID/serviceLevelObjectives/SLO_ID\")",
},
"unitOverride": "1"
}
}
],
"thresholds": []
}
},
"width": 24
}
]
}
}
Comme le montre le code JSON précédent, les graphiques de SLO sont représentés
Objets XyChart
. Ces objets spécifient tous
les champs d'agrégation, les seuils
la valeur du champ filter
est un sélecteur de série temporelle. Pour en savoir plus,
sur ces sélecteurs, consultez la section Récupérer les données de SLO.
Le widget SLO ressemble à l'exemple suivant:
Tableau de bord avec un widget vide
Cet exemple montre un tableau de bord avec un widget d'espace réservé vide.
La valeur du champ displayName
apparaît dans le widget.
{
"displayName": "Demo Dashboard",
"gridLayout": {
"widgets": [
{
"blank": {}
}
]
}
}
Le tableau de bord ressemble à l'exemple suivant :