Auf dieser Seite wird gezeigt, wie Sie Dashboards mit der Cloud Monitoring API erstellen. Für jedes Beispiel wird die Dashboard-Definition in JSON und das entsprechende Dashboard angezeigt. Sie können JSON-Daten sowohl für die Google Cloud CLI als auch für Cloud Monitoring API-Endpunkte angeben.
Cloud Monitoring bietet auch eine ausgewählte Gruppe von Dashboard-Definitionen auf GitHub. Sie können diese Definitionen als benutzerdefinierte Dashboards in Ihrem Google Cloud-Projekt installieren. Informationen zu diesem Repository und zur Installation dieser Dashboards finden Sie unter Beispiel-Dashboards installieren.
Wann Sie die API oder die Google Cloud CLI verwenden sollten
Mit der Cloud Monitoring API und der Google Cloud CLI können Sie viele Dashboards gleichzeitig verwalten. Sie können zwar auch die Google Cloud Console zur Verwaltung Ihrer Dashboards verwenden, mit Scripts ist die Verwaltung mehrerer benutzerdefinierter Dashboards jedoch einfacher.
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 der API-Methode ein Dashboard
-Objekt, das einen Eintrag für jedes Widget enthält, das im Dashboard angezeigt wird.
Wenn ein Widget Zeitreihendaten enthält, 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
timeSeriesField
aus. In den Beispielen auf dieser Seite werden Cloud Monitoring-Filter verwendet.Wenn Sie eine MQL-Abfrage verwenden möchten, füllen Sie das Feld
timeSeriesQueryLanguage
aus. Weitere Informationen finden Sie unter Diagramme erstellen.Wenn Sie eine PromQL-Abfrage verwenden möchten, füllen Sie das Feld
prometheusQuery
aus. 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 es so konfigurieren, dass Ereignisse angezeigt werden.
Ereignisse in Dashboards aktivieren
Sie können ein Dashboard so konfigurieren, dass Ereignisse wie ein Google Kubernetes Engine-Update-Ereignis oder ein Fehlerereignis einer virtuellen Maschine angezeigt werden. Fügen Sie dazu ein annotations
-Feld in das Dashboard
-Objekt ein. Das Feld annotations
enthält eine Instanz eines DashboardAnnotations
-Objekts mit zwei Feldern:
Im Feld
defaultResourceName
sind die Standardeinstellungen auf Dashboardebene für die Google Cloud-Projekte aufgeführt, in denen nach Ereignissen gesucht werden soll. Wenn Sie dieses Feld nicht angeben, wird in Ihrem ausgewählten Projekt gesucht.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 eine leere Zeichenfolge ist, wird der Standardname für das Ereignis angezeigt. - Ein
enabled
-Feld, das den Wert der Ein/Aus-Schaltfläche des Ereignisses steuert. Beitrue
ist die Ein/Aus-Schaltfläche in der Positionon
und Ereignisse werden im Dashboard angezeigt. Wennfalse
, ist der Schalter in der Positionoff
. - Ein
eventType
-Feld, das einen Wert aus der AufzählungEventType
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 von Google Cloud-Projekten definieren können, in denen nach Ereignissen gesucht werden soll. Wenn dieses Feld ein leeres Array ist, wird das ausgewählte Projekt durchsucht.
- Ein
Im folgenden Beispiel ist ein annotations
-Feld zu sehen, in dem ein Google Kubernetes Engine-Ereignis angegeben ist:
{
"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-name
einzuschränken. Das Feld displayName
ist auf einen leeren String gesetzt. Daher wird der Standardname für den Ereignistyp auf der Ein/Aus-Schaltfläche des Ereignisses angezeigt. Da resourceNames
auf ein leeres Array festgelegt ist, werden die Logeinträge in Ihrem aktuellen Google Cloud-Projekt abgefragt.
Dashboard-Filter und ‑Variablen hinzufügen
Sie können Variablen und angepinnte Filter hinzufügen, um festzulegen, welche Daten in den Widgets eines Dashboards angezeigt werden. Weitere Informationen und ein Beispiel finden Sie unter Dashboardfilter.
Dashboard-Labels hinzufügen
In diesem Beispiel wird ein Dashboard
-Objekt mit dem Label playbook
gezeigt.
{
"displayName": "Example",
"mosaicLayout": {
"columns": 12,
"tiles": [
...
]
},
"dashboardFilters": [],
"labels": {
"playbook": ""
}
}
Wie das vorherige Beispiel zeigt, wird das Feld labels
als map
implementiert. Die Felder key
und value
sind Strings. Wenn Sie einem Dashboard ein Label hinzufügen, geben Sie für key
den Namen des Labels und für das Feld value
einen leeren String ein.
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 Dashboard sehen Sie ein einfaches XyChart
. Wenn Sie schon einmal 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
oder die Konfiguration der Anzeigemodi von Diagrammen.
{
"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 ungefähr so aus:
Im nächsten Abschnitt wird beschrieben, wie Sie ein Log Analytics-Diagramm-Widget erstellen, einen Grenzwert in einem Diagramm anzeigen und konfigurieren, ob im Diagramm die linke oder rechte Y-Achse oder beide verwendet werden sollen.
Dashboard mit einem Log Analytics-Diagramm
In diesem Dashboard sehen Sie ein Dashboard mit einem Log Analytics-Diagramm. Das Beispiel-JSON 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 `TABLE_NAME_OF_LOG_VIEW`"
}
}
}
],
"thresholds": [],
"yAxis": {
"label": "",
"scale": "LINEAR"
}
}
}
}
]
},
"labels": {}
}
Das Diagramm im Dashboard sieht ungefähr so aus:
Dashboard mit einem XyChart
und einem Grenzwert
In diesem Dashboard sehen Sie einen einfachen XyChart
mit einem Grenzwert und der 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, die mehrere Messwerttypen enthalten und die linke und rechte Achse verwenden. Im vorherigen Beispiel wurde ein Diagramm mit einem einzelnen Messwerttyp gezeigt, d. h., es gab ein Element im dataSets
-Array.
Wenn Sie zwei Messwerttypen in einem Diagramm darstellen, enthält das dataSets
-Array zwei Elemente. Für jedes Element wird eine targetAxis
angegeben.
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 ungefähr so aus:
Dashboard mit 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 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 Grenzwert verwendet eine Farbe gelb, um anzuzeigen, dass die CPU-Auslastung über 70 % liegt, der andere Grenzwert 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
}
]
}
}
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 GaugeView
-Objekt kann eine Ober- und eine Untergrenze angeben, um den Wertebereich anzugeben, der auf der Anzeige 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,
},
Im Folgenden sehen Sie die vollständige geänderte Dashboard-Spezifikation: Der aktuelle Wert liegt unter den Schwellenwerten, die auf der Anzeige entsprechend eingefärbt 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_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
}
]
}
}
Das Diagramm in diesem Dashboard sieht ungefähr so aus:
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 in einem Kreisdiagramm dargestellt werden. Jede Zeitachse trägt einen Tortenabschnitt bei. In Kreisdiagrammen werden keine Daten im Zeitverlauf angezeigt, sondern nur der jeweils aktuelle Wert.
Alle Kreisdiagramme werden über das Widget PieChart
angegeben.
Wenn Sie das Diagramm so konfigurieren möchten, dass die Summe der letzten Messungen angezeigt wird, legen Sie für das Feld chartType
den Wert DONUT
fest. 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 eines als Donut 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, zeigen beide Widgets Daten als Kreisdiagramm an. In einem Widget wird die Summe der letzten Werte angezeigt:
Dashboard mit einem TimeSeriesTable
-Widget
In Dashboards können Daten in Tabellenform dargestellt werden, wobei für jede Kombination eindeutiger Labelwerte eine Zeile vorhanden ist. In Tabellen werden keine Daten im Zeitverlauf angezeigt, sondern entweder der aktuelle Wert oder ein aggregierter Wert.
Alle Tabellen werden über 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 nach mehreren Messwerttypen fragen, versucht die Google Cloud Console, den jeweils neuesten Wert für jede Abfrage in derselben Tabellenzeile anzuzeigen. Weitere Informationen finden Sie unter Daten aus mehreren Messwerttypen in Tabellen zusammenführen.- Im Feld
TimeSeriesQuery
wird der Messwerttyp angegeben. - Wenn in der Tabelle der aggregierte Wert angezeigt werden soll, bei dem die Daten über den im Dashboard festgelegten Zeitraum aggregiert werden, legen Sie für das Feld
timeSeriesQuery.outputFullDuration
den Werttrue
fest.
- Im Feld
Legen Sie im Feld
pickTimeSeriesFilter
die maximale Anzahl der Zeilen fest, die angezeigt werden sollen. Wenn Sie beispielsweise nur die beiden Zeitreihen mit dem höchsten Durchschnittswert der letzten 10 Minuten anzeigen möchten, geben Sie Folgendes an:"pickTimeSeriesFilter": { "direction": "TOP", "numTimeSeries": 2, "rankingMethod": "METHOD_MEAN" },
Wenn Sie das Feld
pickTimeSeriesFilter
weglassen, werden in der Tabelle maximal 300 Zeilen angezeigt.Mit dem Feld
metricVisualization
können Sie konfigurieren, wie die Daten in der Tabelle angezeigt werden:- Wenn nur ein Wert wie „25 %“ angezeigt werden soll, lassen Sie dieses Feld einfach aus oder setzen Sie den Wert auf
"NUMBER"
. Bei dieser Konfiguration wird das Widget in der Google Cloud Console als Tabelle angezeigt. - Wenn Sie den Wert und eine visuelle Darstellung des Werts im Vergleich zum Bereich der möglichen Werte anzeigen lassen möchten, setzen Sie den Wert dieses Felds auf
"BAR"
. Bei dieser Konfiguration wird das Widget in der Google Cloud Console als Top-Liste angezeigt.
- Wenn nur ein Wert wie „25 %“ angezeigt werden soll, lassen Sie dieses Feld einfach aus oder setzen Sie den Wert auf
Mit dem
columnSettings
-Array können Sie konfigurieren, welche Spalten angezeigt werden und welche Eigenschaften sie haben. Wenn dieses Feld nicht angegeben ist, wird in der Tabelle für jedes Label eine Spalte angezeigt.Der Wert des Felds
"column"
muss auf „Labelschlüssel“ oder aufvalue
gesetzt sein, was dem letzten Wert der Zeitreihe entspricht. Sie können den Anzeigenamen für eine Spalte festlegen und die Ausrichtung der Daten in der Tabellenzelle konfigurieren:- Legen Sie das Feld
displayName
fest, um die Spaltenüberschrift anzupassen. - Wenn Sie die Zelle, in der der aktuelle Wert angezeigt wird, je nach Vergleich des Werts mit einem Grenzwert einfärben möchten, fügen Sie ein
thresholds
-Objekt hinzu. - Wenn Sie die Textausrichtung ändern möchten, fügen Sie ein
alignment
-Feld hinzu.
Im folgenden Beispiel sind zwei Spalten zu sehen:
"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 } ],
- Legen Sie das Feld
Im folgenden JSON-Code wird ein Dashboard mit zwei Tabellen beschrieben. Die erste Tabelle enthält zwei Messwerttypen: die Anzahl der aus Instanzen gelesenen Byte und die Anzahl der in Instanzen geschriebenen Byte. Ein aggregierter Wert wird zusammen mit einem Referenzbalken angezeigt. In der zweiten Tabelle ist der aktuelle Wert eines Messwerttyps zu sehen. Die Wertspalte ist so konfiguriert, dass die Zelle je nach Vergleich des Werts mit einem Schwellenwert eine bestimmte Farbe hat:
{
"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 in etwa so aus:
Dashboard mit einem AlertChart
-Widget
Dieses Dashboard zeigt 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 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 incidents
gibt an, dass es keine offenen Vorfälle für die Benachrichtigungsrichtlinie gibt. Wenn Sie den Zeiger auf dem Chip für Vorfälle platzieren, wird ein Dialogfeld geöffnet, das mit der zugrunde liegenden Benachrichtigungsrichtlinie verknüpft ist.
Dashboard mit einem ErrorReportingPanel
-Widget
Dieses Dashboard zeigt 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 Felds für Fehlerberichte auf mindestens 16 Einheiten und die Breite auf mindestens 24 Einheiten zu konfigurieren. Im vorherigen Beispiel hat das Widget eine Höhe von 16 Einheiten und eine Breite von 24 Einheiten.
Im Bereich „Fehlerberichte“ werden die Fehlergruppen aus dem ausgewählten Projekt angezeigt. Dort können Sie die Fehlergruppen auf einen bestimmten Ressourcentyp, Dienst oder eine bestimmte Dienstversion beschränken. Das folgende Beispiel zeigt einen Bereich für Fehlermeldungen:
Dashboard mit einem IncidentList
-Widget
Dieses Dashboard zeigt ein Dashboard mit einem IncidentList
-Widget:
{
"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
}
]
}
}
Im vorherigen Beispiel wird das Feld title
auf Incidents
festgelegt und das Widget so konfiguriert, dass alle Vorfälle für Ressourcen vom Typ gce_instance
angezeigt werden.
Wenn Sie dieses Widget konfigurieren, können Sie mehrere Benachrichtigungsrichtlinien oder mehrere Ressourcentypen auswählen.
Das Incident-Widget auf dem Dashboard sieht in etwa so aus:
Dashboard mit einem LogsPanel
-Widget
In diesem Dashboard sehen Sie ein 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 Bereich „Protokolle“ werden die Protokolle der im Feld resourceNames
aufgeführten Google Cloud-Projekte angezeigt. Im vorherigen Beispiel ist 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 Dashboard sehen Sie ein 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 dargestellt wird. Minimierbare Gruppen-Widgets umfassen eine ganze Zeile einer Tabelle. Ein Widget ist in einer Gruppe enthalten, wenn die (x,y)-Position und die Höhe der Gruppe die (x,y)-Position des Widgets enthalten. Im vorherigen Beispiel hat die Gruppe die Position (0,0) und eine Höhe von 4. Da sich das xyChart
an der Position (0,0) befindet, ist es in der Gruppe enthalten. Wenn die Position dieses Diagramms jedoch in (0,5) geändert wird, wird es aus der Gruppe ausgeschlossen. Wenn die (x, y)-Position eines Widgets dazu führt,dass es in die Gruppe aufgenommen wird, wird die Höhe des minimierbaren Gruppen-Widgets möglicherweise maximiert.
Wenn Sie ein Gruppenwidget in ein Dashboard aufnehmen möchten, muss das Dashboard eine MosaicLayout
enthalten.
Das minimierbare Gruppen-Widget sieht in etwa so aus:
Dashboard mit einem SingleViewGroup
-Widget
In einem SingleViewGroup
-Widget wird jeweils nur ein Mitglied einer Gruppe angezeigt. Sie geben die Diagramme und anderen Widgets an, die Mitglieder der Gruppe sind. Außerdem können Sie über ein Menü im SingleViewGroup
-Widget festlegen, welches Widget in der Gruppe angezeigt wird.
Dieses Dashboard zeigt ein Dashboard mit einem SingleViewGroup
-Widget:
{
"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
}
]
}
}
Wie im vorherigen Beispiel enthält das tiles
-Array ein SingleViewGroup
-Objekt. Dieses Objekt gibt jedoch nicht an, welche Objekte es enthält. Stattdessen wird die Zugehörigkeit zum SingleViewGroup
-Objekt anhand der 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 eine horizontale Trennlinie in Ihrem Dashboard erstellt und ein Eintrag im Inhaltsverzeichnis des Dashboards. 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 dem Inhaltsverzeichnis nach dem Abschnittsheader ein Trennstrich hinzugefügt wird.
Dieses Dashboard zeigt 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 SectionHeader
-Objekt wird der Wert des Felds title
sowohl im Widget als auch im Inhaltsverzeichnis angezeigt. Der Wert des Feldes subtitle
wird nur im Widget angezeigt. Wenn der Wert von dividerBelow
true
ist, wird dem Inhaltsverzeichnis eine Trennlinie hinzugefügt.
Dashboard mit einem SLO-Widget
Dieses Dashboard zeigt 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 das vorherige JSON-Beispiel zeigt, werden SLO-Diagramme als XyChart
-Objekte dargestellt. In diesen Objekten werden alle Aggregationsfelder und Grenzwerte angegeben. 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 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: