Mit JSON-Dashboard-Definitionen können Sie benutzerdefinierte Dashboard-Layouts, Filter, Ereignisanmerkungen und Widgets programmatisch über die Cloud Monitoring API oder die Google Cloud CLI konfigurieren. Dieses Dokument enthält JSON-Beispielkonfigurationen und zeigt, wie die einzelnen Definitionen in einem benutzerdefinierten Dashboard gerendert werden.
Informationen zum Installieren vordefinierter JSON-Dashboard-Definitionen für Google Cloud -Dienste von GitHub finden Sie unter Dashboard-Vorlage installieren.
Wann die API oder die Google Cloud CLI verwendet werden sollte
Mit der Cloud Monitoring API und der Google Cloud CLI können Sie viele Dashboards gleichzeitig verwalten. Sie können zwar die Google Cloud Console zum Verwalten Ihrer Dashboards verwenden, aber es ist möglicherweise einfacher, Skripts zu verwenden, mit denen Sie Ihre benutzerdefinierten Dashboards im Bulk verwalten können.
Sie müssen die API auch verwenden, wenn Sie das leere Platzhalter-Widget zu Ihrem Dashboard hinzufügen möchten.
MQL oder PromQL mit der API verwenden
Dashboards werden mit der Methode dashboards.create erstellt. Sie übergeben ein Dashboard-Objekt an die API-Methode, das einen Eintrag für jedes Widget enthält, das im Dashboard angezeigt wird.
Wenn ein Widget Zeitreihendaten anzeigt, z. B. ein Diagramm-Widget, enthält sein Eintrag im Dashboard-Objekt ein TimeSeriesQuery-Objekt.
Dieses Objekt beschreibt die Zeitreihendaten, die im Diagramm dargestellt werden sollen. Sie geben diese Daten mit einem Monitoring-Filter, einer MQL-Abfrage oder einer PromQL-Abfrage an:
Wenn Sie Monitoring-Filter verwenden möchten, füllen Sie das Feld
timeSeriesFilteraus. In den Beispielen auf dieser Seite werden Cloud Monitoring-Filter verwendet.Wenn Sie eine MQL-Abfrage verwenden möchten, füllen Sie das Feld
timeSeriesQueryLanguageaus. Weitere Informationen finden Sie unter Diagramme erstellen.Wenn Sie eine PromQL-Abfrage verwenden möchten, füllen Sie das Feld
prometheusQueryaus. Allgemeine Informationen finden Sie unter PromQL in Cloud Monitoring.
Dashboard-Layouts
Dieser Abschnitt enthält Informationen zu den verschiedenen verfügbaren Dashboard-Layouts.
Dashboard im GridLayout
In diesem Dashboard wird ein GridLayout mit drei Widgets angezeigt.
{
"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"
}
}
}
]
}
}
Das Dashboard sieht ungefähr so aus:
Dashboard im MosaicLayout
In diesem Dashboard wird ein MosaicLayout mit zwei Widgets angezeigt.
{
"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"
}
}
}
}
]
}
}
Das Dashboard sieht ungefähr so aus:
Dashboard im RowLayout
In diesem Dashboard wird ein RowLayout mit drei Widgets angezeigt.
{
"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"
}
}
]
}
]
}
}
Das Dashboard sieht ungefähr so aus:
Dashboard im ColumnLayout
In diesem Dashboard wird ein ColumnLayout mit drei Widgets angezeigt.
{
"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"
}
}
]
}
]
}
}
Das Dashboard sieht ungefähr so aus:
Dashboard-Ereignisse aktivieren und Filter und Labels hinzufügen
In diesem Abschnitt wird beschrieben, wie Sie einem Dashboard Filter und Labels hinzufügen und wie Sie ein Dashboard so konfigurieren, dass Ereignisse angezeigt werden.
Ereignisse in Dashboards aktivieren
Sie können ein Dashboard so konfigurieren, dass Ereignisse angezeigt werden, z. B. ein Google Kubernetes Engine-Updateereignis oder ein VM-Fehlerereignis. Fügen Sie dazu ein annotations-Feld in das Dashboard-Objekt ein. Das Feld annotations enthält eine Instanz eines DashboardAnnotations-Objekts, das zwei Felder enthält:
Im Feld
defaultResourceNameswerden die Standardeinstellungen auf Dashboard-Ebene für dieGoogle Cloud -Projekte aufgeführt, in denen nach Ereignissen gesucht werden soll. Wenn Sie dieses Feld nicht angeben, wird das ausgewählte Projekt durchsucht.Ein Array von
EventAnnotation-Objekten. Jedes Objekt enthält Folgendes:- Ein
displayName-Feld, mit dem Sie das Label für die ereignisspezifische Ein/Aus-Schaltfläche definieren können. Wenn dieses Feld nicht angegeben ist oder der Wert dieses Felds ein leerer String ist, wird der Standardname für das Ereignis angezeigt. - Ein
enabled-Feld, das den Wert des Ereignis-Umschalters steuert. Wenntrue, befindet sich der Schalter in der Positiononund Ereignisse werden im Dashboard angezeigt. Wennfalse, befindet sich der Schalter in der Positionoff. - Ein
eventType-Feld, das einen Wert aus derEventType-Aufzählung enthält. - Ein
filter-Feld, mit dem Sie eine Abfrage angeben können, die an die ereignisspezifische Abfrage angehängt werden soll. Wenn der Wert dieses Felds ein leerer String ist, wird die ereignisspezifische Abfrage verwendet. - Ein
resourceNames-Feld, mit dem Sie eine Liste vonGoogle Cloud -Projekten definieren können, in denen nach Ereignissen gesucht werden soll. Wenn dieses Feld ein leeres Array ist, wird Ihr ausgewähltes Projekt durchsucht.
- Ein
Das folgende Beispiel zeigt ein annotations-Feld, das ein Google Kubernetes Engine-Ereignis angibt:
{
"displayName": "Annotation example",
"annotations": {
"defaultResourceNames": [],
"eventAnnotations": [
{
"displayName": "",
"enabled": true,
"eventType": "GKE_CLUSTER_UPDATE",
"filter": "resource.labels.cluster_name=my-cluster",
"resourceNames": []
}
]
},
"dashboardFilters": [],
"mosaicLayout": {
...
},
"labels": {}
}
Im vorherigen Beispiel wird das Feld filter verwendet, um die Abfrage auf den Cluster my-cluster zu beschränken. Das Feld displayName ist auf einen leeren String festgelegt, sodass der Standardname für den Ereignistyp auf dem Schalter des Ereignisses angezeigt wird. Da das Feld resourceNames auf ein leeres Array gesetzt ist, werden die Logeinträge in Ihrem aktuellen Google Cloud -Projekt abgefragt.
Dashboardfilter und ‑variablen hinzufügen
Wenn Sie festlegen möchten, welche Daten in den Widgets auf einem Dashboard angezeigt werden, können Sie Variablen und angepinnte Filter hinzufügen. Variablen unterscheiden sich von angepinnten Filtern dadurch, dass sie auf bestimmte Widgets angewendet werden.
Wenn Sie einen angepinnten Filter oder eine angepinnte Variable erstellen, wird die Symbolleiste Ihres benutzerdefinierten Dashboards in Monitoring aktualisiert, um einen Filter anzuzeigen.
Bei angepinnten Filtern ist der Name des Filters in der Symbolleiste der Name des angepinnten Filters. Bei Variablen ist der Name des Symbolleistenfilters ein Dollarzeichen $, gefolgt vom Namen der Variable. Jeder Symbolleistenfilter enthält ein Menü, über das Sie den Wert des zugehörigen angepinnten Filters oder der zugehörigen angepinnten Variable ändern können.
Bei Variablen können Sie den Filter in der Symbolleiste durch ein Dashboard-Widget ersetzen. Weitere Informationen finden Sie unter Dashboard mit einem FilterControl-Widget.
Weitere Informationen zu Variablen und angepinnten Filtern sowie zum Anwenden einer Variable auf ein Widget finden Sie unter Dashboard-Filter.
Dashboard-Labels hinzufügen
In diesem Beispiel wird ein Dashboard-Objekt gezeigt, das das Label playbook angibt.
{
"displayName": "Example",
"mosaicLayout": {
"columns": 12,
"tiles": [
...
]
},
"dashboardFilters": [],
"labels": {
"playbook": ""
}
}
Wie im vorherigen Beispiel gezeigt, wird das Feld labels als map implementiert, wobei die Felder key und value Strings sind. Wenn Sie einem Dashboard ein Label hinzufügen, setzen Sie key auf den Namen des Labels und das Feld value auf einen leeren String.
Das Hinzufügen von Labels zu einem Dashboard ist optional.
Dashboards mit Widgets
Dieser Abschnitt enthält Beispiele für Dashboards mit verschiedenen Arten von Widgets.
Dashboard mit einem XyChart
In diesem Beispiel sehen Sie ein Dashboard mit einem einfachen XyChart. Wenn Sie jemals die Google Cloud Console zum Erstellen von Diagrammen in Dashboards verwendet haben, sind diese Diagramme Instanzen des XyChart-Widgets.
Ähnlich wie die Funktionen in der Google Cloud Console bietet die API Optionen zum Ändern des PlotType des Diagramms oder zum Konfigurieren der Ansichtsmodi des Diagramms.
{
"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
}
]
}
}
Das Diagramm im Dashboard sieht in etwa so aus:
Im nächsten Abschnitt wird gezeigt, wie Sie ein Diagramm-Widget für Observability Analytics erstellen, einen Grenzwert in einem Diagramm anzeigen und konfigurieren, ob im Diagramm die linke Y-Achse, die rechte Y-Achse oder beide verwendet werden.
Dashboard mit einem Observability Analytics-Diagramm
In diesem Beispiel ist ein Dashboard mit einem Observability Analytics-Diagramm zu sehen. Die JSON-Beispieldatei enthält eine SQL-Abfrage.
{
"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 `VIEW`"
}
}
}
],
"thresholds": [],
"yAxis": {
"label": "",
"scale": "LINEAR"
}
}
}
}
]
},
"labels": {}
}
Das Diagramm im Dashboard sieht dann ungefähr so aus:

Dashboard mit einem XyChart und einem Grenzwert
In diesem Beispiel sehen Sie ein Dashboard mit einem einfachen XyChart, einem Schwellenwert und der konfigurierten linken Y-Achse.
{
"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
}
]
}
}
Im vorherigen Beispiel gibt der JSON-Code die Verwendung der linken Y-Achse an, da er eine y2Axis-Struktur enthält. Verwenden Sie im Feld targetAxis "Y1" für die rechte Y-Achse und "Y2" für die linke Y-Achse. Wenn Sie das Feld targetAxis weglassen, wird die rechte Y-Achse verwendet.
Das Diagramm in diesem Dashboard sieht ungefähr so aus:
Sie können Diagramme erstellen, in denen mehrere Messwerttypen angezeigt werden und die die linke und rechte Achse verwenden. Im vorherigen Beispiel wurde ein Diagramm mit einem einzelnen Messwerttyp dargestellt, d. h. das Array dataSets enthält ein Element.
Wenn Sie zwei Messwerttypen in einem Diagramm darstellen, enthält das dataSets-Array zwei Elemente, wobei jedes Element seine targetAxis angibt.
Dashboard mit einem XyChart und STACKED_AREA PlotType
Dieses Dashboard enthält ein XyChart mit 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
}
]
}
}
Das Diagramm im Dashboard sieht dann ungefähr so aus:
Dashboard mit einem XyChart und STACKED_BAR PlotType
Dieses Dashboard enthält ein XyChart mit 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
}
]
}
}
Das Dashboard sieht ungefähr so aus:
Dashboard mit einem XyChart, das als Histogramm konfiguriert ist
Wenn Sie die neuesten Daten als Histogramm ansehen möchten, konfigurieren Sie das DataSet.dimensions-Array, ein Feld in einem XyChart.
Ein Histogramm liefert Informationen zur relativen Häufigkeit des letzten Werts mehrerer Zeitreihen. Das bedeutet, dass die x-Achse nach Klassen indexiert ist, die jeweils einem Wertebereich entsprechen.
Die y-Achse gibt eine Anzahl an, d. h. die Anzahl der Stichproben, deren Werte im Bereich des Containers liegen.
So konfigurieren Sie ein Histogramm in der XyChart-Struktur:
- Setzen Sie das Feld
DataSet.plotTypeauf"STACKED_BAR". - Setzen Sie das Feld
DataSet.dimension.columnauf"metric_value".
Wenn Sie das Bin-Modell selbst steuern möchten, anstatt Cloud Monitoring die Bins anhand Ihrer Daten bestimmen zu lassen, fügen Sie der Struktur DataSet.dimension die folgenden Felder hinzu:
xMinundxMax: Legen Sie die Mindest- und Höchstwerte für den Messwerttyp fest.maxBinCountodernumericBinSize: Legen Sie entweder die Anzahl der Klassen oder die Klassengröße fest. Wenn Sie die Anzahl der Klassen festlegen, empfehlen wir einen Wert von mindestens 5, aber nicht mehr als 50. Die maximale Anzahl von Klassen beträgt 1.000.
Im folgenden JSON-Code wird ein Dashboard beschrieben, in dem Daten mit der Histogrammvisualisierung angezeigt werden:
{
"displayName": "Histogram example",
"dashboardFilters": [],
"description": "",
"labels": {},
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"height": 16,
"width": 24,
"widget": {
"title": "VM Instance - CPU utilization [MEAN]",
"xyChart": {
"chartOptions": {
"displayHorizontal": false,
"mode": "COLOR"
},
"dataSets": [
{
"dimensions": [
{
"column": "metric_value"
}
],
"minAlignmentPeriod": "60s",
"plotType": "STACKED_BAR",
"targetAxis": "Y1",
"timeSeriesQuery": {
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"groupByFields": [],
"perSeriesAligner": "ALIGN_MEAN"
},
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\""
}
}
}
],
"thresholds": [],
"yAxis": {
"scale": "LINEAR"
}
}
}
}
]
}
}
Das Feld dataSets.dimensions bewirkt, dass die XyChart als Histogramm gerendert wird.
Das Histogramm im Beispieldashboard verwendet Standardeinstellungen, sodass das Feld dimension ein Unterfeld "column": "metric_value" enthält.
Der folgende Screenshot zeigt ein XyChart, das als Histogramm konfiguriert ist:
Dashboard mit einem XyChart-Widget, das eine Überschreibung des Zeitraums festlegt
Standardmäßig werden in Dashboard-Widgets Daten für einen Zeitraum angezeigt, der auf Dashboard-Ebene definiert ist. XyChart-Widgets bieten jedoch die Möglichkeit, den Zeitraum zu überschreiben. Verwenden Sie diese Funktion, wenn Sie in einem Diagramm Daten über einen längeren oder kürzeren Zeitraum anzeigen möchten, als es für andere Dashboard-Widgets angemessen ist. Hier einige Beispiele für Anwendungsfälle:
In einem Dashboard werden ein Kontingentmesswert mit einer Stichprobe pro Tag und Messwertdaten angezeigt, die alle 60 Sekunden abgerufen werden. Das Kontingentmesswertdiagramm benötigt einen Zeitraum von mindestens einem Tag, möglicherweise bis zu einer Woche. Dieser Zeitraum ist jedoch zu lang, um Spitzen oder Einbrüche bei den Messwerten zu sehen, die alle 60 Sekunden abgerufen werden.
Sie möchten für einen Messwert sowohl Trends als auch die aktuellen Messwerte sehen. Daher fügen Sie dem Dashboard zwei Diagramme hinzu. Für ein Diagramm legen Sie die Überschreibung des Zeitraums auf acht Tage fest, also etwas länger als eine Woche. Das andere Diagramm zeigt Daten für eine Stunde an, was der Zeitraum-Einstellung des Dashboards entspricht.
Wenn Sie eine Überschreibung des Zeitraums konfigurieren möchten, legen Sie das Feld widget.timeRange fest. Im folgenden Beispiel ist dieses Feld auf "relativeDuration": "21600s" festgelegt. Das bedeutet, dass im Diagramm die Daten der letzten 6 Stunden angezeigt werden:
{
"displayName": "Test Dashboard",
"dashboardFilters": [],
"description": "",
"labels": {},
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"xPos": 24,
"height": 16,
"width": 24,
"widget": {
"title": "VM Instance - CPU utilization [MEAN]",
"timeRange": {
"relativeDuration": "21600s"
},
"xyChart": {
"chartOptions": {
"displayHorizontal": false,
"mode": "COLOR"
},
"dataSets": [
{
"minAlignmentPeriod": "60s",
"plotType": "LINE",
"targetAxis": "Y1",
"timeSeriesQuery": {
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"groupByFields": [],
"perSeriesAligner": "ALIGN_MEAN"
},
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\""
}
}
}
],
"thresholds": [],
"yAxis": {
"scale": "LINEAR"
}
}
}
}
]
}
}
Dashboard mit einem einfachen Scorecard
Dieses Dashboard zeigt ein Scorecard ohne Messgerät oder Sparkline. Das Beispiel zeigt die Compute Engine-CPU-Auslastung und die Kurzübersicht (Scorecard) hat zwei Grenzwerte. Ein Schwellenwert verwendet die Farbe Gelb, um anzugeben, dass die CPU-Auslastung über 70 % liegt. Der andere Schwellenwert verwendet Rot, um anzugeben, dass die CPU-Auslastung über 90 % liegt.
Da die aktuelle CPU-Auslastung unter den angegebenen Grenzwerten liegt, ist die Farbe grün.
{
"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
}
]
}
}
In diesen Widgets können mehrere Kurzübersichten angezeigt werden. Wenn die Aggregationseinstellungen beispielsweise zu drei Zeitreihen führen, werden in diesem Widget drei Kurzübersichten angezeigt, eine für jede Zeitreihe.
Das Dashboard sieht ungefähr so aus:
Dashboard mit Scorecard und GaugeView
Dieses Dashboard fügt der einfachen Übersicht im vorherigen Beispiel eine Anzeige hinzu.
Das Objekt GaugeView kann eine Ober- und eine Untergrenze angeben, um den Wertebereich zu definieren, der auf der Messanzeige angezeigt werden soll. Da die Kurzübersicht Werte von 0 bis 1 enthält, sind diese Ober- und Untergrenzen angemessen. Fügen Sie der JSON-Datei für die einfache Übersicht Folgendes hinzu:
"gaugeView": {
"lowerBound": 0,
"upperBound": 1,
},
In der folgenden geänderten Dashboard-Spezifikation liegt der aktuelle Wert unter den Schwellenwerten, die auf der Anzeige entsprechend farblich gekennzeichnet sind:
{
"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_SUM",
"groupByFields": [
"resource.labels.\"zone\""
],
"perSeriesAligner": "ALIGN_MEAN"
},
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\""
}
}
},
"title": "VM Instance - CPU utilization [MEAN]"
},
"width": 16
}
]
}
}
Diese Widgets können mehrere Anzeigen darstellen. Der folgende Screenshot zeigt beispielsweise ein Scorecard-Widget, das mit einem GaugeView konfiguriert ist. Dieses Widget zeigt drei Anzeigen:
Die Anzahl der vom Widget angezeigten Anzeigen hängt von Ihren Aggregationseinstellungen ab. Im Beispiel führen die Aggregationseinstellungen zu drei Zeitreihen, sodass drei Messgeräte angezeigt werden. Sie definieren die Schwellenwerte auf Widget-Ebene, sodass sie für jede Zeitreihe gelten. In diesem Beispiel ist eine Anzeige rot, eine gelb und die dritte grün.
Dashboard mit Scorecard und SparkChartView
Dieses Dashboard ersetzt die Anzeige im vorherigen Beispiel durch eine Sparkline.
Das SparkChartView-Objekt kann Liniendiagramme oder Balkendiagramme in einer Kurzübersicht erstellen.
In diesem Beispiel wird eine Linie verwendet. Solange der Wert nicht gegen einen Grenzwert verstößt, ist er grün. Um die Sparkline hinzuzufügen, ersetzen Sie das JSON-Objekt gaugeView im vorherigen Diagramm durch Folgendes:
"sparkChartView": {
"sparkChartType": "SPARK_LINE"
},
Die Kurzübersicht sieht in etwa so aus:
Dashboard mit einem PieChart-Widget
In Dashboards können Daten mithilfe eines Kreisdiagramms angezeigt werden. Jede Zeitreihe trägt ein Segment zum Kreisdiagramm bei. In Kreisdiagrammen werden keine Daten im Zeitverlauf angezeigt, sondern nur der letzte Wert.
Alle Kreisdiagramme werden durch das Widget PieChart angegeben.
Wenn Sie das Diagramm so konfigurieren möchten, dass die Summe der neuesten Messwerte angezeigt wird, setzen Sie das Feld chartType auf DONUT. Andernfalls legen Sie für dieses Feld den Wert PIE fest.
"pieChart": {
"chartType": "DONUT",
},
Im folgenden Beispiel wird ein Dashboard mit zwei Kreisdiagrammen konfiguriert, wobei ein Kreisdiagramm als Ringdiagramm konfiguriert ist:
{
"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
},
]
}
}
Wie im folgenden Screenshot zu sehen ist, werden in beiden Widgets Daten als Kreisdiagramm angezeigt. In einem Widget wird die Summe der neuesten Werte angezeigt:
Dashboard mit einem Treemap-Widget
Fügen Sie eine Strukturkarte hinzu, um die neuesten Daten als verschachtelte Rechtecke darzustellen, wobei jedes Rechteck einem eindeutigen Satz von Labelwerten entspricht.
Angenommen, Sie haben die Daten, die Sie in einem Diagramm darstellen möchten, anhand des Labels zone aggregiert.
Wenn Sie den Widget-Typ auf „Strukturkarte“ festlegen, entspricht jedes Rechteck auf der Strukturkarte einer Zone. Die Farbsättigung eines Rechtecks ist proportional zum Wert, den es darstellt.
Wenn Sie eine Strukturkarte untersuchen, können Sie den Mauszeiger verwenden, um den Kurzinfo für das Rechteck zu aktivieren.
Mit dem folgenden JSON-Code wird ein Treemap-Widget konfiguriert, das die Zeitreihen nach Zone und Speichertyp aggregiert:
{
"displayName": "Example Treemap",
"dashboardFilters": [],
"labels": {},
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"xPos": 24,
"height": 16,
"width": 24,
"widget": {
"title": "VM Instance - Write read bytes [SUM]",
"id": "",
"treemap": {
"dataSets": [
{
"breakdowns": [],
"measures": [],
"timeSeriesQuery": {
"outputFullDuration": true,
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"crossSeriesReducer": "REDUCE_SUM",
"groupByFields": [
"resource.label.\"zone\"",
"metric.label.\"storage_type\""
],
"perSeriesAligner": "ALIGN_RATE"
},
"filter": "metric.type=\"compute.googleapis.com/instance/disk/write_bytes_count\" resource.type=\"gce_instance\""
},
"unitOverride": ""
}
}
],
"treemapHierarchy": [
"resource.label.\"zone\"",
"metric.label.\"storage_type\""
]
}
}
}
]
}
}
Der folgende Screenshot zeigt das Strukturkarten-Widget mit der vorherigen Konfiguration:
Im Screenshot ist die Kurzinfo für ein Rechteck zu sehen.
Dashboard mit einem TimeSeriesTable-Widget
In Dashboards können Daten in einem Tabellenformat angezeigt werden, wobei für jede Kombination eindeutiger Labelwerte eine Zeile vorhanden ist. In Tabellen werden keine Daten im Zeitverlauf angezeigt, sondern entweder der letzte Wert oder ein aggregierter Wert.
Alle Tabellen werden durch das Widget TimeSeriesTable angegeben:
Verwenden Sie das Feld
dataSets, um die anzuzeigende Zeitreihe zu konfigurieren. Jedes Objekt imdataSets-Array entspricht einem einzelnen Messwerttyp. Wenn Sie mehrere Messwerttypen abfragen, versucht die Google Cloud Console, den neuesten Wert für jede Abfrage in derselben Tabellenzeile anzuzeigen. Weitere Informationen finden Sie unter Wie Daten für mehrere Messwerttypen in Tabellen zusammengeführt werden.- Im Feld
TimeSeriesQuerywird der Messwerttyp angegeben. - Wenn in der Tabelle der aggregierte Wert angezeigt werden soll, bei dem die Daten über den von Ihrem Dashboard festgelegten Zeitraumwert aggregiert werden, setzen Sie das Feld
timeSeriesQuery.outputFullDurationauftrue.
- Im Feld
Wenn Sie die maximale Anzahl der anzuzeigenden Zeilen konfigurieren möchten, legen Sie das Feld
pickTimeSeriesFilterfest. Wenn Sie beispielsweise nur die beiden Zeitreihen mit dem größten Durchschnittswert der letzten 10 Minuten anzeigen möchten, fügen Sie Folgendes ein:"pickTimeSeriesFilter": { "direction": "TOP", "numTimeSeries": 2, "rankingMethod": "METHOD_MEAN" },Wenn Sie das Feld
pickTimeSeriesFilterweglassen, werden in der Tabelle maximal 300 Zeilen angezeigt.Mit dem Feld
metricVisualizationkönnen Sie konfigurieren, wie die Daten in der Tabelle angezeigt werden:- Wenn Sie nur einen Wert wie „25 %“ anzeigen lassen möchten, lassen Sie dieses Feld entweder weg oder legen Sie den Wert auf
"NUMBER"fest. Wenn Sie diese Konfiguration verwenden, wird das Widget in derGoogle Cloud Console als Tabellen-Widget angezeigt. - Wenn Sie den Wert und eine visuelle Darstellung des Werts im Vergleich zum Bereich der möglichen Werte anzeigen möchten, setzen Sie den Wert dieses Felds auf
"BAR". Wenn Sie diese Konfiguration verwenden, wird das Widget in derGoogle Cloud Console als Top-Liste-Widget angezeigt.
- Wenn Sie nur einen Wert wie „25 %“ anzeigen lassen möchten, lassen Sie dieses Feld entweder weg oder legen Sie den Wert auf
Mit dem Array
columnSettingskönnen Sie konfigurieren, welche Spalten angezeigt werden, und die Eigenschaften der Spalte festlegen. Wenn dieses Feld nicht angegeben ist, wird in der Tabelle eine Spalte für jedes Label angezeigt.Der Wert des Felds
"column"muss auf einen Labelschlüssel oder aufvaluefestgelegt werden, was sich auf den neuesten Wert der Zeitreihe bezieht. Sie können den Anzeigenamen für eine Spalte festlegen und die Ausrichtung der Daten in der Tabellenzelle konfigurieren:- Wenn Sie die Spaltenüberschrift anpassen möchten, legen Sie das Feld
displayNamefest. - Wenn Sie die Zelle, in der der letzte Wert angezeigt wird, basierend darauf, wie hoch der Wert im Vergleich zu einem Grenzwert ist, farblich kennzeichnen möchten, fügen Sie ein
thresholds-Objekt hinzu. - Wenn Sie die Textausrichtung ändern möchten, fügen Sie ein
alignment-Feld hinzu.
Das folgende Beispiel zeigt zwei Spalten:
"columnSettings": [ { "column": "device_name", "displayName": "Device", "visible": true }, { "alignment": "CENTER", "column": "value", "displayName": "Disk Write Bytes", "thresholds": [ { "color": "YELLOW", "direction": "ABOVE", "value": 4000 }, { "color": "RED", "direction": "ABOVE", "value": 5000 } ], "visible": true } ],- Wenn Sie die Spaltenüberschrift anpassen möchten, legen Sie das Feld
Im folgenden JSON-Code wird ein Dashboard mit zwei Tabellen beschrieben. In der ersten Tabelle werden zwei Messwerttypen angezeigt: die Anzahl der Bytes, die aus Instanzen gelesen wurden, sowie die Anzahl der Bytes, die in Instanzen geschrieben wurden. Ein aggregierter Wert wird zusammen mit einem Referenzbalken angezeigt. In der zweiten Tabelle wird der letzte Wert eines Messwerttyps angezeigt. Die Wertspalte wurde so konfiguriert, dass die Zelle basierend darauf, wie hoch der Wert im Vergleich zu einem Grenzwert ist, farblich gekennzeichnet wird:
{
"displayName": "Example",
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"width": 44,
"height": 17,
"widget": {
"title": "VM Instance - Disk read bytes [RATE], Disk write bytes [RATE]",
"timeSeriesTable": {
"dataSets": [
{
"timeSeriesQuery": {
"timeSeriesFilter": {
"filter": "metric.type=\"compute.googleapis.com/instance/disk/read_bytes_count\" resource.type=\"gce_instance\"",
"aggregation": {
"alignmentPeriod": "60s",
"perSeriesAligner": "ALIGN_RATE",
"groupByFields": []
},
"pickTimeSeriesFilter": {
"rankingMethod": "METHOD_MEAN",
"numTimeSeries": 30,
"direction": "TOP"
}
},
"unitOverride": "",
"outputFullDuration": true
},
"tableTemplate": "",
"minAlignmentPeriod": "60s"
},
{
"timeSeriesQuery": {
"timeSeriesFilter": {
"filter": "metric.type=\"compute.googleapis.com/instance/disk/write_bytes_count\" resource.type=\"gce_instance\"",
"aggregation": {
"alignmentPeriod": "60s",
"perSeriesAligner": "ALIGN_RATE",
"groupByFields": []
},
"pickTimeSeriesFilter": {
"rankingMethod": "METHOD_MEAN",
"numTimeSeries": 30,
"direction": "TOP"
}
},
"unitOverride": "",
"outputFullDuration": true
},
"tableTemplate": "",
"minAlignmentPeriod": "60s"
}
],
"metricVisualization": "BAR",
"columnSettings": [
{
"column": "Name (from instance_id)",
"visible": true
},
{
"column": "zone",
"visible": true
},
{
"column": "device_name",
"visible": true
},
{
"column": "storage_type",
"visible": true
},
{
"column": "device_type",
"visible": true
},
{
"column": "value",
"visible": true,
"displayName": "Read bytes"
},
{
"column": "value-1",
"visible": true,
"displayName": "Written bytes"
}
],
"opsAnalyticsSettings": {
"maxRows": "0",
"showFilterBar": false,
"pageSize": "0"
},
"displayColumnType": false
},
"id": ""
}
},
{
"yPos": 17,
"width": 44,
"height": 16,
"widget": {
"title": "VM Instance - Disk write bytes [RATE]",
"timeSeriesTable": {
"columnSettings": [
{
"column": "device_name",
"displayName": "Device",
"visible": true
},
{
"alignment": "LEFT",
"column": "instance_name",
"displayName": "Instance name",
"visible": true
},
{
"column": "storage_type",
"displayName": "Storage type",
"visible": true
},
{
"column": "device_type",
"displayName": "Device Type",
"visible": true
},
{
"alignment": "CENTER",
"column": "value",
"displayName": "Disk Write Bytes",
"thresholds": [
{
"color": "YELLOW",
"direction": "ABOVE",
"label": "",
"value": 4000
},
{
"color": "RED",
"direction": "ABOVE",
"label": "",
"value": 5000
}
],
"visible": true
},
{
"alignment": "LEFT",
"column": "Name (from instance_id)",
"displayName": "ID",
"visible": true
}
],
"dataSets": [
{
"minAlignmentPeriod": "60s",
"timeSeriesQuery": {
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"perSeriesAligner": "ALIGN_RATE"
},
"filter": "metric.type=\"compute.googleapis.com/instance/disk/write_bytes_count\" resource.type=\"gce_instance\""
}
}
}
],
"displayColumnType": false,
"metricVisualization": "NUMBER",
"opsAnalyticsSettings": {
"maxRows": "0",
"pageSize": "0",
"showFilterBar": false
}
}
}
}
]
},
"dashboardFilters": [],
"labels": {}
}
Der folgende Screenshot zeigt die zuvor definierte Tabelle:
Dashboard mit einem Text-Widget
Dieses Beispiel zeigt ein einfaches Dashboard mit einem Text-Widget.
{
"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
}
]
}
}
Das Text-Widget sieht dann ungefähr so aus:
Dashboard mit einem AlertChart-Widget
In diesem Beispiel sehen Sie ein Dashboard mit einem AlertChart-Widget:
{
"category": "CUSTOM",
"displayName": "Alerting policy chart example",
"mosaicLayout": {
"columns": 12,
"tiles": [
{
"height": 4,
"widget": {
"alertChart": {
"name": "projects/my-project/alertPolicies/14205854094151528373"
}
},
"width": 6,
}
]
}
}
Im Gegensatz zu anderen Dashboard-Widgets geben Sie keinen Titel oder Messwertmesswert für diese Widgets an. Stattdessen geben Sie den Ressourcennamen für eine Benachrichtigungsrichtlinie an. Der letzte Eintrag im Feld name ist die Kennung der Benachrichtigungsrichtlinie.
Das Diagramm im Dashboard sieht dann ungefähr so aus:
In diesem Beispiel überwacht die Benachrichtigungsrichtlinie die CPU-Nutzung von zwei verschiedenen virtuellen Maschinen. Die gestrichelte Linie zeigt den Bedingungsgrenzwert an, der auf 50 % festgelegt ist. Der grüne Chip mit dem Label No alerts gibt an, dass für die Benachrichtigungsrichtlinie keine offenen Benachrichtigungen vorliegen. Wenn Sie den Mauszeiger auf den Benachrichtigungs-Chip setzen, wird ein Dialogfeld geöffnet, das mit der zugrunde liegenden Benachrichtigungsrichtlinie verknüpft ist.
Dashboard mit einem ErrorReportingPanel-Widget
In diesem Beispiel sehen Sie ein Dashboard mit einem ErrorReportingPanel-Widget:
{
"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,
}
]
}
}
Wir empfehlen, die Höhe eines Error Reporting-Bereichs auf mindestens 16 Einheiten und die Breite auf mindestens 24 Einheiten festzulegen. Im vorherigen Beispiel hat das Widget eine Höhe von 16 Einheiten und eine Breite von 24 Einheiten.
Im Bereich „Error Reporting“ werden die Fehlergruppen aus dem ausgewählten Projekt angezeigt. In diesem Bereich können die Fehlergruppen auf einen bestimmten Ressourcentyp, Dienst oder eine bestimmte Version eines Dienstes beschränkt werden. Das folgende Beispiel zeigt einen Bereich für Error Reporting:
Dashboard mit einem FilterControl-Widget
Wenn Sie eine Variable erstellen, wird die Symbolleiste Ihres benutzerdefinierten Dashboards in Monitoring aktualisiert, um einen Filter für die Variable anzuzeigen. Der Name des Filters ist ein Dollarzeichen $ gefolgt vom Namen der Variablen.
Beispiel: $my-variable. Jeder Filter enthält ein Menü, über das Sie den Wert der Variable ändern können.
Das Verwalten des Werts einer Variablen mithilfe eines Filters in der Symbolleiste ist möglicherweise nicht optimal. Angenommen, Sie haben ein Dashboard mit vielen Diagrammen und eine Variable, die nur für zwei Diagramme gilt. In diesem Szenario können Sie Folgendes tun:
- Fügen Sie Ihrem Dashboard ein
CollapsibleGroup-Widget hinzu und platzieren Sie die beiden Diagramme in der Gruppe. Fügen Sie Ihrem Dashboard ein
FilterControl-Widget hinzu. Sie konfigurieren dieses Widget für die Variable und fügen es auch der Gruppe hinzu.Das Gruppen-Widget enthält das Widget
FilterControl, mit dem Sie den Wert der Variablen ändern können, und die Widgets, für die die Variable gilt. Außerdem wird in der Dashboard-Symbolleiste kein Filter mehr für die Variable angezeigt.
Das folgende Dashboard enthält ein FilterControl-Widget:
{
"displayName": "Dashboard with filter control widget",
"dashboardFilters": [
{
"filterType": "RESOURCE_LABEL",
"labelKey": "project_id",
"stringValue": "my-project",
"templateVariable": "proj",
"valueType": "STRING"
}
],
"description": "",
"labels": {},
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"yPos": 70,
"height": 5,
"width": 16,
"widget": {
"title": "Project control",
"filterControl": {
"templateVariable": "proj"
}
}
}
]
}
}
Im vorherigen Beispiel wird eine Variable (proj) definiert und ein FilterControl-Widget hinzugefügt. Bei dieser Konfiguration wird das Menü für die Variable aus der Dashboard-Symbolleiste in das Widget mit dem Titel Project control verschoben.
Dieses Widget enthält ein Menü, über das Sie das Projekt auswählen können.
Dashboard mit einem IncidentList-Widget zum Auflisten von Benachrichtigungen
In diesem Beispiel sehen Sie ein Dashboard mit einem IncidentList-Widget zum Auflisten von Benachrichtigungen:
{
"category": "CUSTOM",
"dashboardFilters": [],
"displayName": "Incident widget",
"labels": {},
"mosaicLayout": {
"columns": 12,
"tiles": [
{
"height": 5,
"widget": {
"incidentList": {
"monitoredResources": [],
"policyNames": []
},
"title": "Alerts"
},
"width": 8,
"xPos": 0,
"yPos": 0
}
]
}
}
Im vorherigen Beispiel wird das Feld title auf Alerts gesetzt und das Widget so konfiguriert, dass alle Benachrichtigungen für Ressourcen vom Typ gce_instance angezeigt werden.
Wenn Sie dieses Widget konfigurieren, können Sie mehrere Benachrichtigungsrichtlinien oder mehrere Ressourcentypen auswählen.
In der Google Cloud Console wird das Widget als Benachrichtigungen-Widget bezeichnet. Das Widget sieht dann ungefähr so aus:
Dashboard mit einem LogsPanel-Widget
In diesem Beispiel sehen Sie ein Dashboard mit einem LogsPanel-Widget:
{
"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
}
]
}
}
Wir empfehlen, die Höhe eines Log-Felds auf mindestens drei Einheiten und die Breite auf mindestens vier Einheiten zu konfigurieren. Im vorherigen Beispiel hat das Widget eine Höhe von vier Einheiten und eine Breite von sechs Einheiten.
Im Logbereich werden die Logs der Google Cloud Projekte angezeigt, die im Feld resourceNames aufgeführt sind. Im vorherigen Beispiel wird nur ein Projekt angegeben. Sie können jedoch mehrere Projekte in diese Liste aufnehmen.
Das Log-Feld sieht etwa so aus:
Informationen zur Fehlerbehebung finden Sie unter Fehler beim API-Aufruf zum Erstellen eines Dashboards mit einem Log-Feld.
Dashboard mit einem CollapsibleGroup-Widget
In diesem Beispiel sehen Sie ein Dashboard mit einem CollapsibleGroup-Widget:
{
"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
}
]
}
}
Im vorherigen Beispiel enthält das minimierbare Gruppen-Widget ein einzelnes Diagramm, in dem die CPU-Auslastung einer VM-Instanz angezeigt wird. Minimierbare Gruppen-Widgets erstrecken sich über eine ganze Zeile einer Tabelle. Ein Widget ist in einer Gruppe enthalten, wenn die (x,y)-Position und die Höhenangaben der Gruppe die (x,y)-Position des Widgets enthalten. Im vorherigen Beispiel befindet sich die Gruppe an der Position (0,0) und hat eine Höhe von 4. xyChart befindet sich an der Position (0,0) und ist daher in der Gruppe enthalten. Wenn die Position dieses Diagramms jedoch in (0,5) geändert wird, wird das Diagramm aus der Gruppe ausgeschlossen. Wenn die (x, y)-Position eines Widgets dazu führt,dass das Widget in die Gruppe aufgenommen wird, kann die Höhe des minimierbaren Gruppen-Widgets erweitert werden.
Damit ein Gruppen-Widget in ein Dashboard aufgenommen werden kann, muss das Dashboard eine MosaicLayout haben.
Das minimierbare Gruppen-Widget sieht in etwa so aus:
Dashboard mit einem SingleViewGroup-Widget
In einem SingleViewGroup-Widget wird jeweils ein Mitglied einer Gruppe angezeigt. Sie geben die Diagramme und anderen Widgets an, die zur Gruppe gehören. Außerdem können Sie über ein Menü im Widget SingleViewGroup festlegen, welches Widget in der Gruppe angezeigt wird.
Das Widget SingleViewGroup unterstützt zwei Darstellungsstile: DROPDOWN und TAB. Der Unterschied zwischen diesen beiden Stilen besteht darin, wie Sie auswählen, welches Mitglied der Gruppe angezeigt werden soll. Widgets mit dem Stil DROPDOWN bieten ein Menü. Widgets mit dem Stil TAB bieten Tabs in der Symbolleiste des Widgets:
{
"dashboardFilters": [],
"displayName": "Example",
"labels": {},
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"height": 16,
"widget": {
"singleViewGroup": {
"displayType": "DROPDOWN"
},
"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
}
]
}
}
Wie im vorherigen Beispiel gezeigt, enthält das tiles-Array ein SingleViewGroup-Objekt. In diesem Objekt wird jedoch nicht angegeben, welche Objekte es enthält. Stattdessen wird die Mitgliedschaft im SingleViewGroup-Objekt durch die Werte der Felder width und yPos bestimmt. Objekte, deren Werte für die Felder width und yPos mit den Werten des SingleViewGroup-Objekts übereinstimmen, sind im SingleViewGroup-Objekt enthalten. Im vorherigen Beispiel enthält das SingleViewGroup-Objekt zwei Diagramme.
Dashboard mit einem SectionHeader-Widget
Mit einem SectionHeader-Widget wird ein horizontaler Trenner in Ihrem Dashboard und ein Eintrag im Inhaltsverzeichnis des Dashboards erstellt. Sie können den Eintrag im Inhaltsverzeichnis anpassen und zusätzliche Informationen in das Widget aufnehmen. Sie können das Widget auch so konfigurieren, dass nach dem Abschnittsüberschrifteneintrag eine Trennlinie in das Inhaltsverzeichnis eingefügt wird.
In diesem Beispiel sehen Sie ein Dashboard mit einem einzelnen Diagramm und einem SectionHeader-Widget:
{
"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
}
]
}
}
Im Objekt SectionHeader wird der Wert des Felds title sowohl im Widget als auch im Inhaltsverzeichnis angezeigt. Der Wert des Felds subtitle wird nur vom Widget angezeigt. Wenn der Wert von dividerBelow true ist, wird dem Inhaltsverzeichnis eine Trennlinie hinzugefügt.
Dashboard mit einem SLO-Widget
In diesem Beispiel sehen Sie ein Dashboard mit einem SLO-Widget:
{
"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
}
]
}
}
Wie im vorherigen JSON-Beispiel zu sehen ist, werden SLO-Diagramme als XyChart-Objekte dargestellt. Diese Objekte geben alle Aggregationsfelder und Schwellenwerte an. Der Wert des Felds filter ist ein Zeitachsenselektor. Weitere Informationen zu diesen Selektoren finden Sie unter SLO-Daten abrufen.
Das SLO-Widget sieht in etwa so aus:
Dashboard mit Trace-Daten
Wenn Sie Trace-Daten in einem Dashboard anzeigen möchten, verwenden Sie entweder eine XyChart- oder eine TimeSeriesTable-Struktur.
Wenn Sie eine Heatmap oder ein Liniendiagramm erstellen möchten, verwenden Sie die Struktur XyChart. Wenn Sie eine tabellarische Darstellung wünschen, verwenden Sie die Struktur TimeSeriesTable.
In diesem Dashboard werden Trace-Daten als Heatmap und in zwei Tabellen angezeigt:
{
"displayName": "Example trace chart",
"dashboardFilters": [],
"description": "",
"labels": {},
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"height": 22,
"width": 48,
"widget": {
"title": "Visualizer",
"xyChart": {
"chartOptions": {
"displayHorizontal": false,
"mode": "COLOR"
},
"dataSets": [
{
"plotType": "HEATMAP",
"timeSeriesQuery": {
"traceQuery": {
"resourceContainer": "projects/my-project",
"spanDataValue": "SPAN_DURATION",
"spanFilters": {
"apphubServices": [],
"apphubWorkloads": [],
"applicationIds": [],
"attributes": [],
"displayNames": [
"/taskqueue.QueryAndOwnTasks"
],
"isRootSpan": false,
"kinds": [],
"services": [],
"status": []
}
}
}
}
],
"thresholds": [],
"yAxis": {
"scale": "LINEAR"
}
}
}
},
{
"yPos": 22,
"height": 16,
"width": 24,
"widget": {
"title": "Grouped span table",
"timeSeriesTable": {
"columnSettings": [],
"dataSets": [
{
"breakdowns": [
{
"aggregationFunction": {
"type": "none"
},
"column": "serviceOrWorkload",
"limit": 0,
"sortOrder": "SORT_ORDER_NONE"
}
],
"timeSeriesQuery": {
"traceQuery": {
"resourceContainer": "projects/my-project",
"spanDataValue": "SPAN_DURATION",
"spanFilters": {
"apphubServices": [],
"apphubWorkloads": [],
"applicationIds": [],
"attributes": [],
"displayNames": [],
"isRootSpan": false,
"kinds": [],
"services": [],
"status": []
}
}
}
}
],
"metricVisualization": "NUMBER"
}
}
},
{
"yPos": 22,
"xPos": 24,
"height": 16,
"width": 24,
"widget": {
"title": "Span table",
"timeSeriesTable": {
"columnSettings": [],
"dataSets": [
{
"timeSeriesQuery": {
"traceQuery": {
"resourceContainer": "projects/my-project",
"spanDataValue": "SPAN_DURATION",
"spanFilters": {
"apphubServices": [],
"apphubWorkloads": [],
"applicationIds": [],
"attributes": [],
"displayNames": [],
"isRootSpan": false,
"kinds": [],
"services": [],
"status": []
}
}
}
}
],
"metricVisualization": "NUMBER"
}
}
}
]
}
}
Wie im vorherigen JSON-Beispiel gezeigt, können Sie Filter konfigurieren und auf einzelne Objekte anwenden.
Das Dashboard sieht dann ungefähr so aus:
Dashboard mit einem leeren Widget
Dieses Beispiel zeigt ein Dashboard mit einem leeren Platzhalter-Widget.
Der Wert des Feldes displayName wird im Widget angezeigt.
{
"displayName": "Demo Dashboard",
"gridLayout": {
"widgets": [
{
"blank": {}
}
]
}
}
Das Dashboard sieht ungefähr so aus:
Dashboard mit konfigurierter Widget-Sichtbarkeit
Dieses Dashboard enthält ein Text-Widget und eine Variable. Der Wert der Variable bestimmt, ob das Text-Widget angezeigt oder ausgeblendet wird:
Die Variable mit dem Namen
showhat den Standardwerta. Die Werte der Variablen sind alsa,bundcdefiniert. Da das FeldvalueTypeden WertSTRING_ARRAYhat, kann die Variable auch auf Werte wiea or bgesetzt werden.Im Text-Widget definiert der Eintrag mit dem Label
visibilityConditiondie Sichtbarkeit des Widgets. Wenn der Wert der Variableshowden Wertbenthält, wird das Text-Widget angezeigt. Andernfalls wird das Text-Widget nicht angezeigt.
{
"displayName": "Conditional Widget Example",
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"yPos": 16,
"width": 24,
"height": 16,
"widget": {
"title": "A text widget",
"text": {
"content": "Example showing how to use a custom variable to control visibility.",
"format": "MARKDOWN",
"style": {
"backgroundColor": "#FFFFFF",
"fontSize": "FS_LARGE",
"horizontalAlignment": "H_LEFT",
"padding": "P_EXTRA_SMALL",
"pointerLocation": "POINTER_LOCATION_UNSPECIFIED",
"textColor": "#212121",
"verticalAlignment": "V_TOP"
}
},
"visibilityCondition": {
"templateVariableCondition": {
"templateVariable": "show",
"templateVariableValue": "b",
"comparator": "REGEX_FULL_MATCH"
}
}
}
}
]
},
"dashboardFilters": [
{
"labelKey": "",
"templateVariable": "show",
"stringArrayValue": {
"values": [
"a"
]
},
"filterType": "VALUE_ONLY",
"valueType": "STRING_ARRAY",
"stringArray": {
"values": [
"a",
"b",
"c"
]
}
}
],
"labels": {}
}
Informationen zu Einschränkungen bei der Konfiguration der Sichtbarkeit eines Widgets finden Sie unter Sichtbarkeit eines Widgets festlegen.