Esempi di dashboard e layout

Questa pagina illustra come creare dashboard utilizzando l'API Cloud Monitoring. Per ogni esempio, la definizione della dashboard vengono visualizzate in JSON e la dashboard corrispondente. Puoi fornire JSON agli endpoint di Google Cloud CLI e dell'API Cloud Monitoring.

Cloud Monitoring fornisce inoltre un insieme selezionato di definizioni di dashboard su GitHub. Puoi installare queste definizioni nel tuo progetto Google Cloud come e dashboard personalizzate. Per informazioni su questo repository e come installare queste dashboard, consulta Installa dashboard di esempio.

Quando utilizzare l'API o Google Cloud CLI

L'API Cloud Monitoring e la CLI Google Cloud ti consentono di gestire molte dashboard contemporaneamente. Sebbene tu possa utilizzare la console Google Cloud per gestire le dashboard, potrebbe essere più facile utilizzare script che gestiscono le tue dashboard personalizzate collettivamente.

Devi utilizzare l'API anche quando vuoi aggiungere il widget segnaposto vuoto alla tua dashboard.

Utilizzo di MQL o PromQL con l'API

Puoi creare le dashboard utilizzando dashboards.create . Passi al metodo API un oggetto Dashboard, che contiene una voce per ogni widget visualizzato nella dashboard.

Quando un widget mostra dati di serie temporali, ad esempio un widget grafico, la sua voce nell'oggetto Dashboard contiene un oggetto TimeSeriesQuery. Questo oggetto descrive i dati delle serie temporali da rappresentare in un grafico e puoi specificarli utilizzando un filtro di monitoraggio, una query MQL o una query PromQL:

  • Per utilizzare i filtri di Monitoring, compila il timeSeriesField . Gli esempi in questa pagina utilizzano i filtri di Cloud Monitoring.

  • Per utilizzare una query MQL, compila il campo timeSeriesQueryLanguage. Per ulteriori informazioni, consulta la sezione Creare grafici.

  • Per usare una query PromQL, compila il campo prometheusQuery. Per informazioni generali, vedi PromQL in Cloud Monitoring.

Layout della dashboard

Questa sezione contiene informazioni sui diversi layout delle dashboard. disponibili.

Dashboard in GridLayout

Questa dashboard mostra una GridLayout con tre widget.

{
  "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"
          }
        }
      }
    ]
  }
}

La dashboard ha un aspetto simile al seguente esempio:

Dashboard di esempio con un layout a griglia.

Dashboard in MosaicLayout

Questa dashboard mostra una MosaicLayout con due widget.

{
  "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"
            }
          }
        }
      }
    ]
  }
}

La dashboard è simile all'esempio seguente:

Dashboard di esempio con layout a mosaico.

Dashboard in RowLayout

Questa dashboard mostra una RowLayout con tre widget.

{
  "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"
            }
          }
        ]
      }
    ]
  }
}

La dashboard è simile all'esempio seguente:

Dashboard di esempio con layout a righe.

Dashboard in ColumnLayout

Questa dashboard mostra una ColumnLayout con tre widget.

{
  "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"
            }
          }
        ]
      }
    ]
  }
}

La dashboard è simile all'esempio seguente:

Esempio di dashboard con layout a colonne

Attivare gli eventi della dashboard e aggiungere filtri ed etichette

Questa sezione descrive come aggiungere filtri ed etichette a una dashboard, e come configurare una dashboard per mostrare gli eventi.

Abilita gli eventi nelle dashboard

Puoi configurare una dashboard per mostrare eventi, come un evento di aggiornamento di Google Kubernetes Engine o un evento di errore di una macchina virtuale, includendo un campo annotations in Dashboard . Il campo annotations contiene un'istanza di un Oggetto DashboardAnnotations, che contiene due campi:

  • Il campo defaultResourceName elenca i valori predefiniti a livello di dashboard per i progetti Google Cloud in cui cercare gli eventi. Se non specifichi questo campo, viene eseguita la ricerca del progetto selezionato.

  • Un array di oggetti EventAnnotation. Ciascuna contiene quanto segue:

    • Un campo displayName, che consente di definire l'etichetta nel specifico per ogni evento. Quando questo campo non è specificato o quando il valore di questo campo è una stringa vuota, viene visualizzato il nome predefinito dell'evento.
    • Un campo enabled, che controlla il valore del pulsante di attivazione/disattivazione dell'evento. Quando true, il pulsante di attivazione/disattivazione è in posizione on e gli eventi vengono visualizzati nella dashboard. Quando false, il pulsante di attivazione/disattivazione è nella posizione off.
    • Un campo eventType, che contiene un valore della classe EventType l'enumerazione.
    • Un campo filter che consente di specificare una query da accodare alla query specifica per evento. Se il valore di questo campo è una stringa vuota, viene utilizzata la query specifica per l'evento.
    • Un campo resourceNames che ti consente di definire un elenco di progetti Google Cloud in cui cercare gli eventi. Quando questo campo è un array vuoto, viene eseguita la ricerca nel progetto selezionato.

L'esempio seguente mostra un campo annotations che specifica un Evento Google Kubernetes Engine:

{
  "displayName": "Annotation example",
  "annotations": {
    "defaultResourceNames": [],
    "eventAnnotations": [
      {
        "displayName": "",
        "enabled": true,
        "eventType": "GKE_CLUSTER_UPDATE",
        "filter": "resource.labels.cluster_name=my-cluster",
        "resourceNames": []
      }
    ]
  },
  "dashboardFilters": [],
  "mosaicLayout": {
  ...
  },
  "labels": {}
}

Nell'esempio precedente, il campo filter viene utilizzato per limitare la query nel cluster my-name. Il campo displayName è impostato su stringa vuota, in modo che il nome predefinito per il tipo di evento venga visualizzato il pulsante di attivazione/disattivazione dell'evento. Infine, poiché resourceNames è impostato su un array vuoto, le voci di log del tuo progetto Google Cloud attuale vengono eseguite query.

Aggiungere filtri alla dashboard

Puoi aggiungere filtri permanenti a una dashboard per controllare quali dati widget sul display di una dashboard. Per un esempio di dashboard con un filtro permanente, consulta Filtri della dashboard.

Aggiungi etichette della dashboard

Questo esempio mostra un oggetto Dashboard che specifica l'etichetta denominata playbook.

{
  "displayName": "Example",
  "mosaicLayout": {
    "columns": 12,
    "tiles": [
      ...
    ]
  },
  "dashboardFilters": [],
  "labels": {
    "playbook": ""
  }
}

Come illustrato nell'esempio precedente, il campo labels è implementato come map, dove i campi key e value sono entrambi stringhe. Quando aggiungi un su una dashboard, imposta key sul nome dell'etichetta e value su una stringa vuota.

L'aggiunta di etichette a una dashboard è facoltativa.

Dashboard con Widgets

Questa sezione include esempi di dashboard che contengono diversi tipi di widget.

Dashboard con XyChart

Questa dashboard mostra una dashboard con un XyChart di base. Se hai utilizzato la console Google Cloud per creare grafici nelle dashboard, questi grafici sono istanze del widget XyChart.

Analogamente alla funzionalità fornita nella console Google Cloud, l'API offre opzioni per modificare PlotType del grafico o in configurare le modalità di visualizzazione del grafico.

{
  "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
      }
    ]
  }
}

Il grafico nella dashboard è simile al seguente esempio:

Esempio di grafico XyChart.

La sezione successiva illustra come creare un widget del grafico di Analisi dei log. come visualizzare una soglia su un grafico e come configurare se il grafico utilizza l'asse Y sinistro, l'asse Y destro o entrambi.

Dashboard con un grafico di Analisi dei log

Questa dashboard mostra una dashboard con un grafico di Analisi dei log. La il file JSON di esempio contiene una query SQL.

{
  "displayName": "Example",
  "dashboardFilters": [],
  "mosaicLayout": {
    "columns": 48,
    "tiles": [
      {
        "width": 24,
        "height": 16,
        "widget": {
          "title": "Sample analytics chart",
          "xyChart": {
            "chartOptions": {
              "mode": "COLOR"
            },
            "dataSets": [
              {
                "breakdowns": [],
                "dimensions": [
                  {
                    "column": "location",
                    "columnType": "STRING",
                    "maxBinCount": 5,
                    "sortColumn": "location",
                    "sortOrder": "SORT_ORDER_ASCENDING"
                  }
                ],
                "measures": [
                  {
                    "aggregationFunction": {
                      "parameters": [],
                      "type": "count"
                    },
                    "column": ""
                  }
                ],
                "plotType": "STACKED_BAR",
                "targetAxis": "Y1",
                "timeSeriesQuery": {
                  "opsAnalyticsQuery": {
                    "queryHandle": "",
                    "sql": "SELECT\n  CAST(JSON_VALUE(resource.labels.location) AS STRING) AS location,\n  severity,\nFROM\n  `TABLE_NAME_OF_LOG_VIEW`"
                  }
                }
              }
            ],
            "thresholds": [],
            "yAxis": {
              "label": "",
              "scale": "LINEAR"
            }
          }
        }
      }
    ]
  },
  "labels": {}
}

Il grafico nella dashboard è simile all'esempio seguente:

Esempio di grafico XyChart con una query SQL di Analisi dei log.

Dashboard con XyChart e una soglia

Questa dashboard mostra una dashboard con una XyChart di base, una soglia e configurato l'asse Y sinistro.

{
  "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
      }
    ]
  }
}

Nell'esempio precedente, il JSON specifica l'utilizzo dell'asse Y sinistro perché contiene una struttura y2Axis. Nel campo targetAxis, usa "Y1". per asse Y destro e "Y2" per l'asse Y sinistro. Se ometti targetAxis viene utilizzato l'asse Y destro.

Il grafico in questa dashboard è simile al seguente esempio:

Esempio di grafico XyChart che utilizza l'asse Y sinistro e ha una soglia.

Puoi costruire grafici che visualizzano più tipi di metriche e che utilizzano gli assi sinistro e destro. L'esempio precedente illustrava un grafico con un singolo tipo di metrica, ovvero c'è un elemento nell'array dataSets. Quando crei un grafico di due tipi di metriche, l'array dataSets contiene due elementi: e ogni elemento specifica il proprio targetAxis.

Dashboard con XyChart con STACKED_AREA PlotType

Questa dashboard mostra un XyChart con un 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
      }
    ]
  }
}

Il grafico nella dashboard è simile all'esempio seguente:

Esempio di grafico Xy con un grafico ad area in pila.

Dashboard con un grafico XY con un STACKED_BAR PlotType

Questa dashboard mostra una XyChart con 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
      }
    ]
  }
}

La dashboard è simile all'esempio seguente:

Esempio di grafico XyChart con un grafico a barre in pila.

Dashboard con Scorecard di base

Questa dashboard mostra un Scorecard senza un indicatore o un grafico sparkline. L'esempio mostra l'utilizzo della CPU di Compute Engine e il prospetto ha due soglie. Una soglia utilizza il colore giallo per indicare che l'utilizzo della CPU è superiore al 70%, l'altra soglia utilizza il colore rosso per indicare che l'utilizzo della CPU è superiore al 90%.

Poiché l'utilizzo attuale della CPU è inferiore alle soglie specificate, il parametro il colore è verde.

{
  "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
      }
    ]
  }
}

La dashboard è simile all'esempio seguente:

Dashboard di esempio con un widget prospetto.

Dashboard con Scorecard e GaugeView

Questa dashboard aggiunge un indicatore al prospetto di base nell'esempio precedente. L'oggetto GaugeView può specificare un limite superiore e uno inferiore, per specificare l'intervallo di valori da mostrare sull'indicatore. Poiché il prospetto mostra i valori da 0 a 1, i limiti superiore e inferiore sono ragionevoli. Per aggiungere il misuratore, aggiungi seguente al codice JSON per il prospetto di base:

  "gaugeView": {
    "lowerBound": 0,
    "upperBound": 1,
  },

Di seguito è riportata la specifica completa della dashboard modificata: Il valore corrente è inferiore alle soglie, di colore appropriato sull'indicatore.

{
  "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
      }
    ]
  }
}

Il grafico in questa dashboard è simile al seguente esempio:

Dashboard di esempio con un widget prospetto con GaugeView.

Dashboard con Scorecard e SparkChartView

Questa dashboard sostituisce l'indicatore dell'esempio precedente con uno sparkline. L'oggetto SparkChartView può creare grafici a linee o a barre in un prospetto. Questo esempio utilizza una riga. Se il valore non viola una soglia, è verde. Per aggiungere il grafico sparkline, sostituisci l'oggetto JSON gaugeView nella grafico precedente con quanto segue:

  "sparkChartView": {
    "sparkChartType": "SPARK_LINE"
  },

Il prospetto è simile al seguente esempio:

Dashboard di esempio con un widget Scorecard con SparkChartView.

Dashboard con un widget PieChart

Le dashboard possono visualizzare i dati utilizzando un grafico a torta. Ogni serie temporale contribuisce una fetta alla torta. I grafici a torta non mostrano dati nel tempo; invece, mostrano solo il valore più recente.

Tutti i grafici a torta sono specificati dal widget PieChart. Per configurare il grafico in modo che mostri la somma delle misurazioni più recenti, imposta il campo chartType su DONUT. In caso contrario, imposta questo campo sul pari a PIE.

"pieChart": {
  "chartType": "DONUT",
},

L'esempio seguente configura una dashboard con due grafici a torta, con uno grafico a torta configurato come un'anello:

{
  "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
      },
    ]
  }
}

Come mostrato nello screenshot seguente, entrambi i widget visualizzano i dati in un grafico a torta. con un widget che mostra la somma dei valori più recenti:

Esempio di widget **PieChart**.

Dashboard con un widget TimeSeriesTable

Le dashboard possono visualizzare i dati in formato tabulare, dove è possibile riga per ogni combinazione di valori di etichette univoci. Le tabelle non mostrano dati per volta; mostrano invece il valore più recente o un valore aggregato.

Tutte le tabelle sono specificate dal widget TimeSeriesTable:

  • Per configurare le serie temporali da visualizzare, utilizza il campo dataSets. Ciascuna nell'array dataSets corrisponde a un singolo tipo di metrica. Se esegui query per più tipi di metriche, la console Google Cloud tenta di visualizzare il valore più recente per ogni query nello stesso riga della tabella. Per ulteriori informazioni, vedi In che modo le tabelle uniscono i dati di più tipi di metriche.

    • Il campo TimeSeriesQuery consente di specificare il tipo di metrica.
    • Se vuoi che la tabella mostri il valore aggregato, dove i dati aggregati nel valore dell'intervallo di tempo impostato dalla tua dashboard, imposta timeSeriesQuery.outputFullDuration su true.
  • Per configurare il numero massimo di righe da visualizzare, imposta il valore Campo pickTimeSeriesFilter. Ad esempio, per visualizzare solo le due serie temporali con il valore medio più elevato negli ultimi 10 minuti, includi quanto segue:

    "pickTimeSeriesFilter": {
        "direction": "TOP",
        "numTimeSeries": 2,
        "rankingMethod": "METHOD_MEAN"
    },
    

    Se ometti il campo pickTimeSeriesFilter, la tabella viene visualizzata. per un massimo di 300 righe.

  • Per configurare la modalità di visualizzazione dei dati nella tabella: utilizza il campo metricVisualization:

    • Per visualizzare solo un valore come "25%", ometti questo campo o imposta il metodo su "NUMBER". Quando utilizzi questa configurazione, La console Google Cloud mostra il widget come widget Tabella.
    • Per visualizzare il valore e un indicatore visivo del valore rispetto all'intervallo di valori possibili, imposta il valore di questo campo su "BAR". Quando utilizzi questa configurazione, La console Google Cloud mostra il widget come Elenco principale.
  • Per configurare quali colonne visualizzare e le relative proprietà: utilizza l'array columnSettings. Se questo campo non viene specificato, la tabella mostra una colonna per ogni etichetta.

    Il valore del campo "column" deve essere impostato su chiave dell'etichetta o su value, che si riferisce all'ultimo valore della serie temporale. Puoi impostare nome visualizzato di una colonna e puoi configurare l'allineamento dati nella cella della tabella:

    • Per personalizzare l'intestazione della colonna, imposta il campo displayName.
    • Per colorare la cella che visualizza il valore più recente in base a come a una soglia, aggiungi un oggetto thresholds.
    • Per modificare l'allineamento del testo, aggiungi un campo alignment.

    L'esempio seguente illustra due colonne:

    "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
      }
    ],
    

Il seguente JSON descrive una dashboard con due tabelle. La prima tabella mostra due tipi di metriche: il numero di byte letti dalle istanze e il di byte scritti nelle istanze. Viene mostrato un valore aggregato una barra di riferimento. La seconda tabella mostra il valore più recente di un tipo di metrica, e la colonna dei valori è stata configurata per assegnare un colore alla cella in base il valore rispetto a una soglia:

{
  "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": {}
}

Il seguente screenshot illustra la tabella definita in precedenza:

Dashboard di esempio con un widget tabella.

Dashboard con un widget Text

Questo esempio mostra una dashboard con un widget Text.

{
  "dashboardFilters": [],
  "displayName": "DB2+TE",
  "labels": {},
  "mosaicLayout": {
    "columns": 48,
    "tiles": [
    ...
      {
        "height": 16,
        "widget": {
          "text": {
            "content": "# Support information\n\n\nContact information: my-support-team@example.com\nOnline help: [Playbooks](https://example.com)\n\n",
            "format": "MARKDOWN",
            "style": {
              "backgroundColor": "",
              "fontSize": "FS_LARGE",
              "horizontalAlignment": "H_LEFT",
              "padding": "P_EXTRA_SMALL",
              "textColor": "",
              "verticalAlignment": "V_TOP"
            }
          }
        },
        "width": 24,
        "yPos": 14
      }
    ]
  }
}

Il widget del testo è simile al seguente esempio:

Esempio di un widget di testo.

Dashboard con un widget AlertChart

Questa dashboard mostra una dashboard con un elemento 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,
      }
    ]
  }
}

A differenza degli altri widget della dashboard, non specifichi un titolo o un filtro delle metriche per questi widget. Devi invece specificare il nome della risorsa per un avviso . L'ultima voce nel campo name è l'identificatore del criterio di avviso.

Il grafico nella dashboard è simile al seguente esempio:

Esempio di grafico per un criterio di avviso.

In questo esempio, il criterio di avviso monitora l'utilizzo della CPU da parte di in macchine virtuali diverse. La linea tratteggiata mostra la soglia della condizione, che è impostato al 50%. Il chip verde con l'etichetta No incidents indica che non ci sono incidenti aperti per il criterio di avviso. Se posizioni il puntatore sul chip degli incidenti, si apre una finestra di dialogo e i link al criterio di avviso sottostante.

Dashboard con un widget ErrorReportingPanel

Questa dashboard mostra una dashboard con un elemento 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,
      }
    ]
  }
}

Ti consigliamo di configurare l'altezza del riquadro per la segnalazione degli errori in modo che sia pari a almeno 16 unità e la sua larghezza di almeno 24 unità. Nella precedente Ad esempio, il widget ha un'altezza di 16 unità e una larghezza di 24 unità.

Il riquadro dei report degli errori mostra i gruppi di errori dell'elemento selezionato progetto, e questo riquadro può limitare i gruppi di errori a una risorsa specifica tipo, servizio o versione di un servizio. L'esempio seguente illustra un riquadro di segnalazione degli errori:

Esempio di un riquadro di configurazione del riquadro dei report degli errori.

Dashboard con un widget IncidentList

Questa dashboard mostra una dashboard con un elemento 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
      }
    ]
  }
}

Nell'esempio precedente, il campo title viene impostato su Incidents e viene configurato il widget per visualizzare tutti gli incidenti per le risorse di tipo gce_instance. Quando configuri questo widget, puoi selezionare più criteri di avviso o più tipi di risorse.

Il widget degli incidenti sulla dashboard è simile al seguente esempio:

Esempio di widget degli incidenti.

Dashboard con un widget LogsPanel

Questa dashboard mostra una dashboard con un widget LogsPanel:

{
  "category": "CUSTOM",
  "displayName": "Logs Panel",
  "mosaicLayout": {
    "columns": 12,
    "tiles": [
      {
        "height": 4,
        "widget": {
          "logsPanel": {
            "filter": "",
            "resourceNames": [
              "projects/012012012012"
            ]
          },
          "title": "Logs Panel"
        },
        "width": 6,
        "xPos": 0,
        "yPos": 0
      }
    ]
  }
}

Ti consigliamo di configurare l'altezza del riquadro dei log in modo che sia pari a almeno 3 unità e la sua larghezza di almeno 4 unità. Nell'esempio precedente, il widget ha un'altezza di 4 unità e una larghezza di 6 unità.

Il riquadro dei log mostra i log dei progetti Google Cloud elencati nel campo resourceNames. L'esempio precedente specifica un solo progetto, ma puoi includere più progetti in questo elenco.

Il riquadro dei log è simile al seguente esempio:

Dashboard di esempio con un widget del riquadro dei log.

Per informazioni sulla risoluzione dei problemi, vedi La chiamata API per la creazione di una dashboard con un riquadro dei log non va a buon fine.

Dashboard con un widget CollapsibleGroup

Questa dashboard mostra una dashboard con un widget CollapsibleGroup:

{
  "category": "CUSTOM",
  "displayName": "Group testing",
  "mosaicLayout": {
    "columns": 12,
    "tiles": [
      {
        "height": 4,
        "widget": {
          "collapsibleGroup": {
            "collapsed": false
          },
          "title": "My group"
        },
        "width": 12,
        "xPos": 0,
        "yPos": 0
      },
      {
        "height": 4,
        "widget": {
          "title": "VM Instance - CPU utilization [MEAN]",
          "xyChart": {
            "chartOptions": {
              "mode": "COLOR"
            },
            "dataSets": [
              {
                "minAlignmentPeriod": "60s",
                "plotType": "LINE",
                "targetAxis": "Y1",
                "timeSeriesQuery": {
                  "apiSource": "DEFAULT_CLOUD",
                  "timeSeriesFilter": {
                    "aggregation": {
                      "alignmentPeriod": "60s",
                      "crossSeriesReducer": "REDUCE_NONE",
                      "perSeriesAligner": "ALIGN_MEAN"
                    },
                    "filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\"",
                    "secondaryAggregation": {
                      "alignmentPeriod": "60s",
                      "crossSeriesReducer": "REDUCE_NONE",
                      "perSeriesAligner": "ALIGN_NONE"
                    }
                  }
                }
              }
            ],
            "thresholds": [],
            "timeshiftDuration": "0s",
            "yAxis": {
              "label": "y1Axis",
              "scale": "LINEAR"
            }
          }
        },
        "width": 6,
        "xPos": 0,
        "yPos": 0
      }
    ]
  }
}

Nell'esempio precedente, il widget dei gruppi comprimibili contiene un singolo grafico che mostra l'utilizzo della CPU da parte di un'istanza VM. Widget di gruppo comprimibili coprono un'intera riga di una tabella. Un widget è incluso in un gruppo quando le specifiche di posizione e altezza del gruppo (x,y) includono (x,y) del widget. Nell'esempio precedente, il gruppo si trova nella posizione (0,0) e la sua altezza è 4. xyChart è nella posizione (0,0), quindi viene incluso nel gruppo. Tuttavia, se la posizione del grafico è impostato su (0,5), il grafico viene escluso dal gruppo. Infine, quando la posizione (x, y) di un widget fa sì che il widget venga incluso nel gruppo, l'altezza del widget del gruppo comprimibile potrebbe essere espansa.

Per includere un widget di gruppo in una dashboard, questa deve avere un MosaicLayout.

Il widget Gruppo comprimibile è simile al seguente esempio:

Dashboard di esempio con un widget del gruppo comprimibile.

Dashboard con un widget SingleViewGroup

Un widget SingleViewGroup mostra un membro di un un gruppo alla volta. Puoi specificare i grafici e gli altri widget che sono membri nel gruppo. Puoi anche controllare quale widget del gruppo viene visualizzato usando un menu nel widget SingleViewGroup.

Questa dashboard mostra una dashboard con un widget SingleViewGroup:

{
  "dashboardFilters": [],
  "displayName": "Example",
  "labels": {},
  "mosaicLayout": {
    "columns": 48,
    "tiles": [
      {
        "height": 16,
        "widget": {
          "singleViewGroup": {},
          "title": "Untitled group"
        },
        "width": 24,
        "yPos": 16
      },
      {
        "height": 16,
        "widget": {
          "title": "VM Instance - Disk read bytes [RATE]",
          "xyChart": {
            "chartOptions": {
              "mode": "COLOR"
            },
            "dataSets": [
              {
                "minAlignmentPeriod": "60s",
                "plotType": "LINE",
                "targetAxis": "Y1",
                "timeSeriesQuery": {
                  "timeSeriesFilter": {
                    "aggregation": {
                      "alignmentPeriod": "60s",
                      "perSeriesAligner": "ALIGN_RATE"
                    },
                    "filter": "metric.type=\"compute.googleapis.com/instance/disk/read_bytes_count\" resource.type=\"gce_instance\""
                  }
                }
              }
            ],
            "thresholds": [],
            "yAxis": {
              "label": "",
              "scale": "LINEAR"
            }
          }
        },
        "width": 24,
        "yPos": 16
      },
      {
        "height": 16,
        "widget": {
          "title": "VM Instance - Disk write bytes [RATE]",
          "xyChart": {
            "chartOptions": {
              "mode": "COLOR"
            },
            "dataSets": [
              {
                "minAlignmentPeriod": "60s",
                "plotType": "LINE",
                "targetAxis": "Y1",
                "timeSeriesQuery": {
                  "timeSeriesFilter": {
                    "aggregation": {
                      "alignmentPeriod": "60s",
                      "perSeriesAligner": "ALIGN_RATE"
                    },
                    "filter": "metric.type=\"compute.googleapis.com/instance/disk/write_bytes_count\" resource.type=\"gce_instance\""
                  }
                }
              }
            ],
            "thresholds": [],
            "yAxis": {
              "label": "",
              "scale": "LINEAR"
            }
          }
        },
        "width": 24,
        "yPos": 16
      }
    ]
  }
}

Come mostrato nell'esempio precedente, l'array tiles contiene uno oggetto SingleViewGroup; ma l'oggetto non specifica quali oggetti che contiene. Viene invece determinata l'appartenenza all'oggetto SingleViewGroup in base ai valori dei campi width e yPos. Gli oggetti i cui valori per l'attributo I campi width e yPos corrispondono dell'oggetto SingleViewGroup sono contenuti SingleViewGroup oggetto. Nell'esempio precedente, l'oggetto SingleViewGroup contiene due grafici.

Dashboard con un widget SectionHeader

Un widget SectionHeader crea un divisore orizzontale in della dashboard, viene creata una voce nella tabella contenuti. Puoi personalizzare la voce nel sommario e includere nel widget. Puoi anche configurare il widget per aggiungere un divisore all'indice dopo la voce dell'intestazione della sezione.

Questa dashboard mostra una dashboard con un singolo grafico un widget SectionHeader:

{
  "dashboardFilters": [],
  "displayName": "Example",
  "labels": {},
  "mosaicLayout": {
    "columns": 48,
    "tiles": [
      {
        "height": 16,
        "widget": {
          "title": "VM Instance - Disk write bytes [RATE]",
          "xyChart": {
            "chartOptions": {
              "mode": "COLOR"
            },
            "dataSets": [
              {
                "minAlignmentPeriod": "60s",
                "plotType": "LINE",
                "targetAxis": "Y1",
                "timeSeriesQuery": {
                  "timeSeriesFilter": {
                    "aggregation": {
                      "alignmentPeriod": "60s",
                      "perSeriesAligner": "ALIGN_RATE"
                    },
                    "filter": "metric.type=\"compute.googleapis.com/instance/disk/write_bytes_count\" resource.type=\"gce_instance\""
                  }
                }
              }
            ],
            "thresholds": [],
            "yAxis": {
              "label": "",
              "scale": "LINEAR"
            }
          }
        },
        "width": 24,
        "yPos": 4
      },
      {
        "height": 4,
        "widget": {
          "sectionHeader": {
            "dividerBelow": true,
            "subtitle": "Instance metrics"
          },
          "title": "Metrics"
        },
        "width": 48
      }
    ]
  }
}

Nell'oggetto SectionHeader viene visualizzato il valore del campo title sia nel widget che nel sommario. Il valore del parametro Il campo subtitle viene visualizzato solo dal widget. Quando il valore dividerBelow corrisponde a true, quindi viene aggiunto un divisore al sommario.

Dashboard con un widget SLO

Questa dashboard mostra una dashboard con un widget SLO:

{
  "dashboardFilters": [],
  "displayName": "Example",
  "labels": {},
  "mosaicLayout": {
    "columns": 48,
    "tiles": [
      {
        "height": 16,
        "widget": {
          "title": "SLO Error Budget: 99.5% - Distribution Cut - Calendar month",
          "xyChart": {
            "chartOptions": {
              "mode": "COLOR"
            },
            "dataSets": [
              {
                "breakdowns": [],
                "dimensions": [],
                "legendTemplate": "Remaining error requests before SLO is burned",
                "measures": [],
                "plotType": "LINE",
                "targetAxis": "Y1",
                "timeSeriesQuery": {
                  "timeSeriesFilter": {
                    "aggregation": {
                      "perSeriesAligner": "ALIGN_NEXT_OLDER"
                    },
                    "filter": "select_slo_budget(\"projects/Project_Number/services/SERVICE_ID/serviceLevelObjectives/SLO_ID\")",
                  },
                  "unitOverride": "1"
                }
              }
            ],
            "thresholds": []
          }
        },
        "width": 24
      }
    ]
  }
}

Come mostra il file JSON precedente, i grafici SLO sono rappresentati come XyChart oggetti. Questi oggetti specificano tutte campi di aggregazione, soglie e del campo filter è un selettore di serie temporali. Per ulteriori informazioni su questi selettori, consulta Recupero dei dati SLO.

Il widget SLO è simile al seguente esempio:

Dashboard di esempio con un widget SLO.

Dashboard con un widget vuoto

Questo esempio mostra una dashboard con un widget segnaposto vuoto. Il valore del campo displayName viene visualizzato nel widget.

{
  "displayName": "Demo Dashboard",
  "gridLayout": {
    "widgets": [
      {
        "blank": {}
      }
    ]
  }
}

La dashboard è simile all'esempio seguente:

Dashboard di esempio con un widget vuoto.