Paneles y diseños de ejemplo

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 el método 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. En este objeto, se describen los datos de series temporales para el gráfico, y los especificas mediante un filtro de supervisión, una consulta de MQL o una consulta de PromQL:

  • Para usar los filtros de Monitoring, propaga el campo 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

En esta sección, se incluye información sobre los diferentes diseños de paneles 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 de ejemplo con un diseño de cuadrícula

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 de ejemplo con un diseño de mosaico

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 de ejemplo con un diseño de fila

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:

Panel de ejemplo con un diseño de columnas

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 que muestre eventos, como un evento de actualización de Google Kubernetes Engine o un evento de falla de máquina virtual, si incluyes un campo annotations en el objeto Dashboard. El campo annotations contiene una instancia de un objeto DashboardAnnotations, que posee dos campos:

  • En el campo defaultResourceName, se enumeran los valores predeterminados a nivel del panel para que los proyectos de Google Cloud busquen eventos. Si no especificas este campo, se buscará el proyecto seleccionado.

  • Un array de objetos EventAnnotation. Cada objeto contiene lo siguiente:

    • Un campo displayName, que te permite definir la etiqueta del 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 muestra el nombre predeterminado del evento.
    • Un campo enabled, que controla el valor del botón de activación del evento Cuando es true, el botón de activación está en la posición on y los eventos se muestran en el panel. Cuando es false, el botón de activación está en la posición off.
    • Un campo eventType, que contiene un valor de la enumeración EventType.
    • Un campo filter, que te permite especificar una consulta para adjuntar a la consulta específica del evento. Cuando el valor de este campo es una cadena vacía, 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 es un array vacío, se busca el proyecto seleccionado.

En el siguiente ejemplo, se muestra un campo annotations que especifica un 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 como una cadena vacía, por lo que el nombre predeterminado para el tipo de evento se muestra en el botón de activación del evento. Por último, debido a que resourceNames se establece en un array vacío, se consultan las entradas de registro de tu proyecto actual de Google Cloud.

Agrega filtros para el panel

Puedes agregar filtros permanentes a un panel que controlen qué datos muestran los widgets en 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 llamada 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, en la que los campos key y value son cadenas. Cuando agregas una etiqueta a un panel, configura key como el nombre de la etiqueta y el campo value como 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 manera similar a la funcionalidad que se proporciona en la consola de Google Cloud, la API proporciona opciones para cambiar el PlotType del gráfico o configurar sus modos de vista.

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

Ejemplo de un XyChart.

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 el gráfico usa el eje Y izquierdo, el eje Y derecho 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`"
                  }
                }
              }
            ],
            "thresholds": [],
            "yAxis": {
              "label": "",
              "scale": "LINEAR"
            }
          }
        }
      }
    ]
  },
  "labels": {}
}

El gráfico del panel es similar al siguiente ejemplo:

XyChart de ejemplo con una consulta en SQL de Análisis de registros.

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:

XyChart de ejemplo que usa el eje Y izquierdo y tiene un umbral.

Puedes crear gráficos que muestren varios tipos de métricas y que usen los ejes izquierdo y derecho. En el ejemplo anterior, se ilustraba 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 uno 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:

XyChart de ejemplo con un trazado de área apilada

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:

XyChart de ejemplo con un trazado de barras apiladas

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 de ejemplo con un widget de cuadro de evaluación

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 de ejemplo con un widget de cuadro de evaluación con GaugeView

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 de ejemplo con un widget de cuadro de evaluación con GaugeView

Panel con un widget PieChart

Los paneles pueden mostrar datos mediante un gráfico circular. Cada serie temporal aporta una porción al gráfico. Los gráficos circulares no muestran datos a lo largo del tiempo, sino 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, configura este campo con el valor de PIE.

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

En el siguiente ejemplo, se configura un panel con dos gráficos circulares y uno 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 como un gráfico circular, y uno de ellos muestra la suma de los valores más recientes:

Ejemplo de widgets de **PieChart**.

Panel con un widget TimeSeriesTable

Los paneles pueden mostrar datos en un formato tabular, en el que hay una fila para cada serie temporal supervisada. Las tablas no muestran datos a lo largo del tiempo; en su lugar, solo muestran el valor más reciente.

El widget TimeSeriesTable especifica todas las tablas:

  • Para configurar la cantidad máxima de filas que se mostrarán, establece el campo pickTimeSeriesFilter. Por ejemplo, para mostrar solo las dos series temporales con el mayor valor promedio en los últimos 10 minutos, incluye lo siguiente:

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

    Si omites el campo pickTimeSeriesFilter, la tabla muestra un máximo de 300 filas.

  • Para configurar cómo se muestran los datos en la tabla, usa el campo metricVisualization:

    • Para mostrar solo un valor como "25%", omite este campo o establece el 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 en comparación 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 configurar qué columnas se muestran, usa el campo columnSettings. En el siguiente ejemplo, se genera una tabla con dos columnas, una titulada Latest Value, que es obligatoria, y la otra, titulada Name (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 de Table y un widget de Top List:

{
  "dashboardFilters": [],
  "displayName": "Example",
  "labels": {},
  "mosaicLayout": {
    "columns": 48,
    "tiles": [
      {
        "height": 16,
        "widget": {
          "timeSeriesTable": {
            "columnSettings": [
              {
                "column": "value",
                "visible": false
              }
            ],
            "dataSets": [
              {
                "minAlignmentPeriod": "60s",
                "timeSeriesQuery": {
                  "timeSeriesFilter": {
                    "aggregation": {
                      "alignmentPeriod": "60s",
                      "perSeriesAligner": "ALIGN_MEAN"
                    },
                    "filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\""
                  }
                }
              }
            ],
            "metricVisualization": "NUMBER"
          },
          "title": "Table"
        },
        "width": 24,
        "yPos": 16
      },
      {
        "height": 16,
        "widget": {
          "timeSeriesTable": {
            "columnSettings": [
              {
                "column": "value",
                "visible": false
              }
            ],
            "dataSets": [
              {
                "minAlignmentPeriod": "60s",
                "timeSeriesQuery": {
                  "timeSeriesFilter": {
                    "aggregation": {
                      "alignmentPeriod": "60s",
                      "perSeriesAligner": "ALIGN_MEAN"
                    },
                    "filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\""
                  }
                }
              }
            ],
            "metricVisualization": "BAR"
          },
          "title": "Top List"
        },
        "width": 24
      }
    ]
  }
}

Como se muestra en la siguiente captura de pantalla, ambos widgets muestran datos en forma de tabla, y ambos contienen una barra de filtros. Sin embargo, los dos widgets están preconfigurados para mostrar columnas diferentes y representar el valor numérico de otra manera:

Panel de ejemplo con un widget de tabla.

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:

Ejemplo de un widget de texto.

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:

Ejemplo de un gráfico para una política de alertas.

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 sea de al menos 16 unidades y su ancho en al menos 24 unidades. En el ejemplo anterior, el widget tiene una altura de 16 unidades y un ancho de 24 unidades.

En el panel de informes de errores, se muestran los grupos de errores del proyecto seleccionado. Este panel puede restringir los grupos de errores a un tipo de recurso, un servicio o una versión de un servicio específicos. En el siguiente ejemplo, se ilustra un panel de Error Reporting:

Ejemplo de un panel de configuración de un panel de informes de errores.

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 que muestre 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:

Ejemplo de un widget de incidente.

Panel con un widget LogsPanel

En este panel, se muestra un panel 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
      }
    ]
  }
}

Te recomendamos que configures la altura de un panel de registros para que sea de al menos 3 unidades y su ancho para que sea de al menos 4 unidades. 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 que se enumeran en el campo resourceNames. En el ejemplo anterior, se especifica solo un proyecto, pero puedes incluir varios proyectos en esta lista.

El panel de registros es similar al siguiente ejemplo:

Panel de ejemplo con un widget de panel de registros.

Si quieres 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 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
      }
    ]
  }
}

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. Los widgets de grupo contraíbles abarcan una fila completa de una tabla. Un widget se incluye en un grupo cuando las especificaciones de posición y altura del grupo (x,y) incluyen la posición (x,y) del widget. En el ejemplo anterior, el grupo se encuentra en la posición de (0,0) y su altura es 4. xyChart está 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 se cambia a (0,5), el gráfico se excluye del grupo. Por último, cuando la posición de un widget (x,y) hace que el widget se incluya en el grupo, la altura del widget de grupo contraíble podría expandirse.

Para incluir un widget de grupo en un panel, este debe tener un MosaicLayout.

El widget de grupo contraíble es similar al siguiente ejemplo:

Panel de ejemplo con un widget de grupo que se puede contraer.

Panel con un widget SingleViewGroup

Un widget SingleViewGroup muestra un miembro de un grupo a la vez. Debes especificar los gráficos y otros widgets que son miembros del grupo. Además, puedes controlar qué widget del grupo se muestra con 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 un objeto SingleViewGroup; sin embargo, ese objeto no especifica qué objetos contiene. En cambio, la membresía en el objeto SingleViewGroup está determinada por los valores de los campos width y yPos. Los objetos cuyos valores para los campos width y yPos coinciden con los valores del objeto SingleViewGroup están contenidos 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 una entrada en el índice del panel. Puedes personalizar la entrada en el índice y también incluir información adicional en el widget. También puedes configurar el widget para que agregue un divisor al índice después de la entrada del encabezado de la sección.

En este panel, se muestra un panel con un solo gráfico y un widget de 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, el valor del campo title se muestra en el widget y en el índice. Solo el widget muestra el valor del campo subtitle. Cuando el valor de dividerBelow es true, 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 como objetos XyChart. Estos objetos especifican todos los campos de agregación, umbrales y el valor del campo filter es un selector de series temporales. Para obtener más información sobre estos selectores, consulta Recupera datos de SLO.

El widget de SLO es similar al siguiente ejemplo:

Panel de ejemplo con un widget de SLO.

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:

Panel de ejemplo con un widget en blanco