En esta página, se ilustra cómo puedes crear paneles con la API de Cloud Monitoring. Para cada ejemplo, se muestra la definición del panel en JSON y el panel correspondiente.
Cloud Monitoring también proporciona un conjunto seleccionado de definiciones del panel en GitHub. Puedes instalar estas definiciones en tu proyecto de Google Cloud como paneles personalizados. Para obtener información sobre este repositorio y cómo instalar estos paneles, consulta Instalación de paneles de muestra.
Cuándo usar la API
La API de Cloud Monitoring te ofrece una forma de administrar muchos paneles a la vez. Si bien puedes usar La consola de Google Cloud para administrar tus paneles, es posible que te resulte más fácil usar la API para administrar tus paneles personalizados de forma masiva.
También debes usar la API cuando desees agregar el widget de marcador de posición en blanco a tu panel.
Usa MQL o PromQL con la API
Puedes crear paneles con dashboards.create
. Debes pasar al método de la API un objeto Dashboard
, que contiene
una entrada para cada widget que muestra el panel.
Cuando un widget muestra datos de series temporales, como un widget de gráfico,
su entrada en el objeto Dashboard
Contiene un objeto TimeSeriesQuery
.
Este objeto describe los datos de series temporales para
gráfico y especificas esos datos con una
Filtro de supervisión, un
Consulta de MQL o una consulta de PromQL:
Para usar los filtros de Monitoring, propaga el
timeSeriesField
. En los ejemplos de esta página, se usan filtros de Cloud Monitoring.Para usar una consulta de MQL, propaga el campo
timeSeriesQueryLanguage
. Para obtener más información, consulta Cómo compilar gráficos.Para usar una consulta de PromQL, propaga el campo
prometheusQuery
. Para obtener información general, consulta PromQL en Cloud Monitoring.
Diseños del panel
Esta sección contiene información sobre los diferentes diseños de paneles que están disponibles.
Panel en GridLayout
En este panel se muestra un GridLayout
con tres widgets.
{
"displayName": "Grid Layout Example",
"gridLayout": {
"columns": "2",
"widgets": [
{
"title": "Widget 1",
"xyChart": {
"dataSets": {
"timeSeriesQuery": {
"timeSeriesFilter": {
"filter": "metric.type=\"agent.googleapis.com/nginx/connections/accepted_count\"",
"aggregation": {
"perSeriesAligner": "ALIGN_RATE"
}
},
"unitOverride": "1"
},
"plotType": "LINE"
},
"timeshiftDuration": "0s",
"yAxis": {
"label": "y1Axis",
"scale": "LINEAR"
}
}
},
{
"text": {
"content": "Widget 2"
}
},
{
"title": "Widget 3",
"xyChart": {
"dataSets": {
"timeSeriesQuery": {
"timeSeriesFilter": {
"filter": "metric.type=\"agent.googleapis.com/nginx/connections/accepted_count\"",
"aggregation": {
"perSeriesAligner": "ALIGN_RATE"
}
},
"unitOverride": "1"
},
"plotType": "STACKED_BAR"
},
"timeshiftDuration": "0s",
"yAxis": {
"label": "y1Axis",
"scale": "LINEAR"
}
}
}
]
}
}
El panel es similar al siguiente ejemplo:
Panel en MosaicLayout
En este panel se muestra un MosaicLayout
con dos widgets.
{
"displayName": "Mosaic Layout Example",
"mosaicLayout": {
"columns": 12,
"tiles": [
{
"xPos": 2,
"yPos": 2,
"width": 7,
"height": 2,
"widget": {
"title": "CPU utilization in us-central1-a",
"scorecard": {
"timeSeriesQuery": {
"timeSeriesFilter": {
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\" resource.label.zone=\"us-central1-a\"",
"aggregation": {
"perSeriesAligner": "ALIGN_MEAN",
"crossSeriesReducer": "REDUCE_MAX"
}
},
"unitOverride": "1"
},
"gaugeView": {
"upperBound": 1.5
},
"thresholds": [
{
"value": 0.8,
"color": "YELLOW",
"direction": "ABOVE"
},
{
"value": 1,
"color": "RED",
"direction": "ABOVE"
}
]
}
}
},
{
"xPos": 1,
"yPos": 5,
"width": 4,
"height": 4,
"widget": {
"title": "My Chart",
"xyChart": {
"dataSets": [
{
"timeSeriesQuery": {
"timeSeriesFilter": {
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\"",
"aggregation": {
"perSeriesAligner": "ALIGN_MEAN",
"crossSeriesReducer": "REDUCE_MAX",
"groupByFields": [
"resource.label.zone"
]
}
},
"unitOverride": "'1'"
},
"plotType": "LINE",
"minAlignmentPeriod": "60s"
}
],
"yAxis": {
"label": "y1Axis",
"scale": "LINEAR"
}
}
}
}
]
}
}
El panel es similar al siguiente ejemplo:
Panel en RowLayout
En este panel, se muestra un RowLayout
con tres widgets.
{
"displayName": "Row Layout Example",
"rowLayout": {
"rows": [
{
"weight": "1",
"widgets": [
{
"text": {
"content": "Widget 1",
"format": "MARKDOWN"
}
},
{
"text": {
"content": "Widget 2",
"format": "MARKDOWN"
}
},
{
"text": {
"content": "Widget 3",
"format": "MARKDOWN"
}
}
]
}
]
}
}
El panel es similar al siguiente ejemplo:
Panel en ColumnLayout
En este panel, se muestra un ColumnLayout
con tres widgets.
{
"displayName": "Column Layout Example",
"columnLayout": {
"columns": [
{
"weight": "1",
"widgets": [
{
"text": {
"content": "Widget 1",
"format": "MARKDOWN"
}
},
{
"text": {
"content": "Widget 2",
"format": "MARKDOWN"
}
},
{
"text": {
"content": "Widget 3",
"format": "MARKDOWN"
}
}
]
}
]
}
}
El panel es similar al siguiente ejemplo:
Habilita eventos de panel y agrega filtros y etiquetas
En esta sección, se describe cómo agregar filtros y etiquetas a un panel, y cómo configurar un panel para que muestre eventos.
Habilita eventos en los paneles
Puedes configurar un panel para mostrar eventos,
como un evento de actualización
de Google Kubernetes Engine o uno de falla de máquina virtual,
incluyendo un campo annotations
en el Dashboard
. El campo annotations
contiene una instancia de una
Un objeto DashboardAnnotations
, que contiene dos campos:
El campo
defaultResourceName
enumera los valores predeterminados a nivel del panel para Proyectos de Google Cloud para buscar eventos. Si no especificas este campo, y, luego, se busca el proyecto seleccionado.Un array de objetos
EventAnnotation
. Cada contiene lo siguiente:- Un campo
displayName
, que te permite definir la etiqueta en la botón de activación específico del evento. Cuando no se especifica este campo o cuando el valor de este campo es una cadena vacía, se mostrará el nombre predeterminado del evento. - Un campo
enabled
, que controla el valor del botón de activación del evento Cuando seatrue
, el botón de activación estará en la posiciónon
y se mostrarán los eventos en el panel. Cuando esfalse
, el botón de activación está en la posiciónoff
. - Un campo
eventType
, que contiene un valor deEventType
enumeración. - Un campo
filter
, que te permite especificar una consulta para adjuntar al en una consulta específica del evento. Cuando el valor de este campo es una cadena vacía, y, luego, se usa la consulta específica del evento. - Un campo
resourceNames
, que te permite definir una lista de Proyectos de Google Cloud para buscar eventos. Cuando este campo si es un array vacío, se busca el proyecto seleccionado.
- Un campo
En el siguiente ejemplo, se muestra un campo annotations
que especifica la
Evento de 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": {}
}
En el ejemplo anterior, se usa el campo filter
para restringir la consulta.
al clúster my-name
. El campo displayName
se establece en
una cadena vacía, de modo que el nombre predeterminado para el tipo de evento se muestre en
el botón de activación del evento. Por último, debido a que resourceNames
se establece en
un array vacío, las entradas de registro en tu proyecto actual de Google Cloud
y cómo se consultan.
Agrega filtros para el panel
Puedes agregar filtros permanentes a un panel que controlen qué datos widgets en la pantalla de un panel. Para ver un ejemplo de un panel con un filtro permanente, consulta Filtros del panel.
Agregar etiquetas de panel
En este ejemplo, se muestra un objeto Dashboard
que
especifica la etiqueta denominada playbook
.
{
"displayName": "Example",
"mosaicLayout": {
"columns": 12,
"tiles": [
...
]
},
"dashboardFilters": [],
"labels": {
"playbook": ""
}
}
Como se muestra en el ejemplo anterior, el campo labels
se implementa como una
map
, donde los campos key
y value
son cadenas. Cuando agregas un elemento
a un panel, establece key
en el nombre de la etiqueta y
value
a una string vacía.
Agregar etiquetas a un panel es opcional.
Paneles con Widgets
En esta sección, se incluyen ejemplos de paneles que contienen diferentes tipos de widgets.
Panel con un XyChart
Aquí se muestra un panel con un XyChart
básico. Si
alguna vez usaste la consola de Google Cloud para crear gráficos en paneles, esos gráficos
son instancias del widget XyChart
.
De forma similar a la funcionalidad proporcionada en la consola de Google Cloud, la API
proporciona opciones para cambiar el PlotType
del gráfico o a
configurar los modos de vista del gráfico
{
"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
}
]
}
}
El gráfico del panel es similar al siguiente ejemplo:
En la siguiente sección, se ilustra cómo crear un widget de gráfico de Análisis de registros. cómo mostrar un umbral en un gráfico y cómo configurar si este usa el eje Y de la izquierda, el eje Y de la derecha o ambos.
Panel con un gráfico de Análisis de registros
En este panel, se muestra un panel con un gráfico del Análisis de registros. El JSON de muestra contiene una consulta en 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": {}
}
El gráfico del panel es similar al siguiente ejemplo:
Panel con un XyChart
y un umbral
Aquí se muestra un panel con un XyChart
básico, un umbral y el eje Y izquierdo configurado.
{
"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
}
]
}
}
En el ejemplo anterior, JSON especifica el uso del eje Y a la izquierda porque contiene una estructura y2Axis
. En el campo targetAxis
, usa "Y1" para el eje Y derecho y "Y2" para el eje Y izquierdo. Si omites el campo targetAxis
, se usa el eje Y a la derecha.
El gráfico en este panel es similar al siguiente ejemplo:
Puedes crear gráficos que muestren varios tipos de métricas y que usen
el eje izquierdo y el derecho. En el ejemplo anterior, se ilustró un gráfico con
un solo tipo de métrica, es decir, hay un elemento en el array dataSets
.
Cuando graficas dos tipos de métricas, el array dataSets
contiene dos elementos:
y cada elemento especifica su targetAxis
.
Panel con un XyChart
con un STACKED_AREA PlotType
En este panel se muestra 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
}
]
}
}
El gráfico del panel es similar al siguiente ejemplo:
Panel con un XyChart con un STACKED_BAR PlotType
En este panel se muestra un XyChart
con un 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
}
]
}
}
El panel es similar al siguiente ejemplo:
Panel con un Scorecard
básico
En este panel, se muestra un Scorecard
sin un indicador o minigráfico. En el ejemplo, se muestra el uso de CPU de Compute Engine y el cuadro de evaluación tiene dos límites. Un umbral usa el color amarillo para indicar que el uso de CPU supera el 70 %, el otro usa el rojo para indicar que el uso de CPU supera el 90 %.
Debido a que el uso actual de la CPU es inferior a los límites especificados, el color es 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
}
]
}
}
El panel es similar al siguiente ejemplo:
Panel con un Scorecard
con GaugeView
Este panel agrega un indicador al cuadro de evaluación básico del ejemplo anterior.
El objeto GaugeView
puede especificar un límite superior y un límite inferior para especificar el rango de valores que se mostrarán en el indicador. Dado que el cuadro de evaluación muestra valores de 0 a 1, esos límites superiores e inferiores son razonables. Si deseas agregar el indicador, agrega lo siguiente al JSON para el cuadro de evaluación básico:
"gaugeView": {
"lowerBound": 0,
"upperBound": 1,
},
A continuación, se muestra la especificación completa y modificada del panel: el valor actual está por debajo de los límites, que aparece con el color adecuado en el indicador.
{
"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
}
]
}
}
El gráfico en este panel es similar al siguiente ejemplo:
Panel con un Scorecard
con SparkChartView
Este panel reemplaza el indicador del ejemplo anterior por un minigráfico.
El objeto SparkChartView
puede crear gráficos de líneas o gráficos de barras en un cuadro de evaluación.
En este ejemplo, se usa una línea. Mientras el valor no infrinja un umbral, será verde. Para agregar la minilínea, reemplaza el objeto JSON gaugeView
del gráfico anterior por lo siguiente:
"sparkChartView": {
"sparkChartType": "SPARK_LINE"
},
El cuadro de evaluación es similar al siguiente ejemplo:
Panel con un widget PieChart
Los paneles pueden mostrar datos mediante un gráfico circular. Cada serie temporal contribuye una porción. Los gráficos circulares no muestran datos a lo largo del tiempo. en su lugar, muestran solo el valor más reciente.
Todos los gráficos circulares se especifican con el widget PieChart
.
Para configurar el gráfico de modo que muestre la suma de las mediciones más recientes,
establece el campo chartType
en DONUT
. De lo contrario, establece este campo
valor de PIE
.
"pieChart": {
"chartType": "DONUT",
},
En el siguiente ejemplo, se configura un panel con dos gráficos circulares, uno de ellos gráfico circular configurado como anillo:
{
"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
},
]
}
}
Como se muestra en la siguiente captura de pantalla, ambos widgets muestran datos en forma de gráfico circular, con un widget en el que se muestra la suma de los valores más recientes:
Panel con un widget TimeSeriesTable
Los paneles pueden mostrar datos en formato de tabla, en el que haya uno para cada serie temporal supervisada. Las tablas no muestran datos a lo largo del tiempo. en su lugar, muestran solo el valor más reciente.
El widget TimeSeriesTable
especifica todas las tablas:
Para configurar el número máximo de filas que se mostrarán, establece la
pickTimeSeriesFilter
. Por ejemplo, para mostrar solo las dos con el mayor valor promedio en los últimos 10 minutos incluyen lo siguiente:"pickTimeSeriesFilter": { "direction": "TOP", "numTimeSeries": 2, "rankingMethod": "METHOD_MEAN" },
Si omites el campo
pickTimeSeriesFilter
, la tabla mostrará un máximo de 300 filas.Para configurar cómo se muestran los datos en la tabla, haz lo siguiente: Usa el campo
metricVisualization
:- Para mostrar solo un valor como "25%", omite este campo o establece la
valor en
"NUMBER"
. Cuando usas esta configuración, La consola de Google Cloud muestra el widget como un widget de Tabla. - Para mostrar el valor y un indicador visual del valor comparado con el
rango de valores posibles, establece el valor de este campo en
"BAR"
. Cuando usas esta configuración, La consola de Google Cloud muestra el widget como un widget de Lista principal.
- Para mostrar solo un valor como "25%", omite este campo o establece la
valor en
Para configurar qué columnas se muestran, usa el campo
columnSettings
. El siguiente ejemplo da como resultado una tabla con dos columnas, una tituladaLatest Value
, que es una columna obligatoria; y la otra tituladaName (from instance_id)
"columnSettings": [ { "column": "Name (from instance_id)", "visible": true } ],
Si omites el campo
columnSettings
, la tabla mostrará una columna. para cada etiqueta.
En el siguiente ejemplo, se muestra un panel con un widget Table y una Widget de Lista principal:
{
"dashboardFilters": [],
"displayName": "Example",
"labels": {},
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"height": 16,
"widget": {
"timeSeriesTable": {
"columnSettings": [
{
"column": "value",
"visible": false
}
],
"dataSets": [
{
"minAlignmentPeriod": "60s",
"timeSeriesQuery": {
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"perSeriesAligner": "ALIGN_MEAN"
},
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\""
}
}
}
],
"metricVisualization": "NUMBER"
},
"title": "Table"
},
"width": 24,
"yPos": 16
},
{
"height": 16,
"widget": {
"timeSeriesTable": {
"columnSettings": [
{
"column": "value",
"visible": false
}
],
"dataSets": [
{
"minAlignmentPeriod": "60s",
"timeSeriesQuery": {
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"perSeriesAligner": "ALIGN_MEAN"
},
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\""
}
}
}
],
"metricVisualization": "BAR"
},
"title": "Top List"
},
"width": 24
}
]
}
}
Como se muestra en la siguiente captura de pantalla, ambos widgets muestran datos en una tabla y ambas contienen una barra de filtros. Sin embargo, los dos widgets son para mostrar diferentes columnas y representar el valor numérico de forma diferente:
Las columnas de la tabla corresponden a etiquetas. Cada fila corresponde a una serie temporal.
Panel con un widget Text
En este ejemplo, se muestra un panel sencillo 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
}
]
}
}
El widget de texto es similar al siguiente ejemplo:
Panel con un widget AlertChart
Aquí se muestra un panel con un widget AlertChart
:
{
"category": "CUSTOM",
"displayName": "Alerting policy chart example",
"mosaicLayout": {
"columns": 12,
"tiles": [
{
"height": 4,
"widget": {
"alertChart": {
"name": "projects/my-project/alertPolicies/14205854094151528373"
}
},
"width": 6,
}
]
}
}
A diferencia de otros widgets de panel, no especificas un título ni un filtro de métrica para estos widgets. En cambio, debes especificar el nombre del recurso para una política de alertas. La última entrada en el campo name
es el identificador de la política de alertas.
El gráfico del panel es similar al siguiente ejemplo:
En este ejemplo, la política de alertas supervisa el uso de CPU de dos máquinas virtuales diferentes. La línea discontinua muestra el umbral de la condición, que se establece en 50 %. El chip verde con la etiqueta No incidents
indica que no hay incidentes abiertos para la política de alertas. Si colocas el puntero sobre el chip de incidentes, se abrirá un cuadro de diálogo que vincula a la política de alertas subyacente.
Panel con un widget ErrorReportingPanel
Aquí se muestra un panel con un widget ErrorReportingPanel
:
{
"dashboardFilters": [],
"displayName": "Error reporting widget",
"labels": {},
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"height": 16,
"widget": {
"errorReportingPanel": {
"projectNames": [
"projects/my-project"
],
"services": [],
"versions": []
},
"title": "Error Reporting Panel"
},
"width": 24,
}
]
}
}
Te recomendamos que configures la altura de un panel de informes de errores para que esté en Debe ser de 16 unidades como mínimo y su ancho, de 24 unidades como mínimo. En el anterior ejemplo, el widget tiene una altura de 16 unidades y un ancho de 24 unidades.
En el panel Error Reporting, se muestran los grupos de errores de la selección que puede restringir los grupos de errores a un recurso específico el tipo, el servicio o la versión de un servicio. En el siguiente ejemplo, se ilustra un panel de Error Reporting:
Panel con un widget IncidentList
Aquí se muestra un panel con un widget IncidentList
:
{
"category": "CUSTOM",
"dashboardFilters": [],
"displayName": "Incident widget",
"labels": {},
"mosaicLayout": {
"columns": 12,
"tiles": [
{
"height": 5,
"widget": {
"incidentList": {
"monitoredResources": [],
"policyNames": []
},
"title": "Incidents"
},
"width": 8,
"xPos": 0,
"yPos": 0
}
]
}
}
En el ejemplo anterior, se establece el campo title
en Incidents
y se configura
el widget para mostrar todos los incidentes de los recursos de tipo gce_instance
.
Cuando configuras este widget, puedes seleccionar varias políticas de alertas o
varios tipos de recursos.
El widget de incidente en el panel es similar al siguiente ejemplo:
Panel con un widget LogsPanel
En este panel, se muestra un panel con una 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
}
]
}
}
Te recomendamos que configures la altura de un panel de registros para que esté en debe ser de 3 unidades como mínimo y de 4 unidades como mínimo. En el ejemplo anterior, el widget tiene una altura de 4 unidades y un ancho de 6 unidades.
En el panel de registros, se muestran los registros de los proyectos de Google Cloud enumerados
en el campo resourceNames
. En el ejemplo anterior, se especifica solo un proyecto.
Sin embargo, puedes incluir
varios proyectos en esta lista.
El panel de registros es similar al siguiente ejemplo:
Para obtener información sobre la solución de problemas, consulta La llamada a la API para crear un panel con un panel de registros falla.
Panel con un widget CollapsibleGroup
En este panel, se muestra un panel con una 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
}
]
}
}
En el ejemplo anterior, el widget de grupo contraíble contiene un solo gráfico
que muestra el uso de CPU de una instancia de VM. Widgets de grupo que se pueden contraer
abarcan una fila completa de una tabla. Un widget se incluye en un grupo cuando la
Las especificaciones de posición y altura de un grupo (x,y) incluyen las variables (x,y)
la posición del widget. En el ejemplo anterior, el grupo se encuentra en la posición
de (0,0) y su altura es 4. xyChart
se encuentra en la posición de (0,0), por lo que
se incluye en el grupo. Sin embargo, si la posición de ese gráfico es
cambia a (0,5) y el gráfico se excluye del grupo. Por último, cuando
la posición (x,y) de un widget, el resultado del widget se incluye en el grupo, el
la altura del widget del grupo que se puede contraer podría expandirse.
Para incluir un widget de grupo en un panel, el panel debe tener una
MosaicLayout
El widget de grupo contraíble es similar al siguiente ejemplo:
Panel con un widget SingleViewGroup
Un widget SingleViewGroup
muestra un miembro de un
grupo a la vez. Especificas los gráficos y otros widgets que son miembros
en el grupo. Además, puedes controlar qué widget del grupo se muestra
usando un menú en el widget de SingleViewGroup
.
En este panel, se muestra un panel 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
}
]
}
}
Como se muestra en el ejemplo anterior, el array tiles
contiene uno.
objeto SingleViewGroup
; Sin embargo, ese objeto no especifica qué objetos
contiene. En su lugar, se determina la membresía del objeto SingleViewGroup
.
por los valores de los campos width
y yPos
. Los objetos cuyos valores para el
Los campos width
y yPos
coinciden con
los valores del objeto SingleViewGroup
están en el
Objeto SingleViewGroup
. En el ejemplo anterior, el objeto SingleViewGroup
contiene dos gráficos.
Panel con un widget SectionHeader
Un widget SectionHeader
crea un divisor horizontal en
tu panel y crea una entrada en la tabla de
contenidos. Puedes personalizar la entrada en el índice e incluir
información adicional en el widget. También puedes configurar el widget
para agregar un divisor al índice después de la entrada del encabezado de la sección.
Este panel muestra un panel con un solo gráfico y
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
}
]
}
}
En el objeto SectionHeader
, se muestra el valor del campo title
.
tanto en el widget como en el índice. El valor del
Solo el widget muestra el campo subtitle
. Cuando el valor de
dividerBelow
es true
y, luego, se agrega un divisor al índice.
Panel con un widget de SLO
En este panel, se muestra un panel con un widget de 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
}
]
}
}
Como se muestra en JSON anterior, los gráficos de SLO se representan de la siguiente manera:
Objetos XyChart
Estos objetos especifican todas
los campos de agregación, los umbrales
del campo filter
es un selector de series temporales. Más información
sobre estos selectores, consulta Recupera datos de SLO.
El widget de SLO es similar al siguiente ejemplo:
Panel con un widget en blanco
En este ejemplo, se muestra un panel con un widget de marcador de posición vacío.
El valor del campo displayName
aparece en el widget.
{
"displayName": "Demo Dashboard",
"gridLayout": {
"widgets": [
{
"blank": {}
}
]
}
}
El panel es similar al siguiente ejemplo: