Neste documento, descrevemos como criar e gerenciar
painéis personalizados e widgets neles usando
o recurso Dashboard
na API Cloud Monitoring.
Os exemplos aqui ilustram como gerenciar seus painéis usando curl
para invocar a API e mostram como usar a Google Cloud CLI.
Também é possível gerenciar seus painéis personalizados usando o
Console do Google Cloud, mas a API oferece uma
maneira programática de gerenciar vários painéis ao mesmo tempo.
O endpoint é compatível com os métodos de gerenciamento e configuração de painéis a seguir:
dashboards.create
: cria um painel.dashboards.delete
: exclui um painel especificado.dashboards.list
: recupera uma lista de todos os painéis em um determinado projeto.dashboards.get
: recupera um painel especificado.dashboards.patch
: atualiza a estrutura de um painel especificado.
É possível invocar a API diretamente usando o utilitário curl
ou a
Google Cloud CLI.
Não é possível recuperar, editar ou excluir painéis predefinidos.
Antes de começar
Ao criar um painel, você precisa especificar quais componentes ou widgets serão exibidos e qual será o layout desses widgets. Também é possível adicionar filtros permanentes ao painel.
Layouts de painel
Os layouts definem como os componentes de um painel são ordenados. A API fornece os seguintes layouts:
GridLayout
: divide o espaço disponível em colunas verticais com larguras iguais e organiza um conjunto de widgets usando uma estratégia de linha primeiro.MosaicLayout
: divide o espaço disponível em uma grade. Cada widget pode ocupar um ou mais blocos de grade.RowLayout
: divide o espaço disponível em linhas e organiza um conjunto de widgets na horizontal em cada uma delas.ColumnLayout
: divide o espaço disponível em colunas verticais e organiza um conjunto de widgets na vertical em cada uma delas.
Por exemplo, veja a seguir a representação JSON de um painel em RowLayout
com três widgets Text
:
{
"displayName": "Row-layout example",
"rowLayout": {
"rows": [
{
"widgets": [
{
"text": {
"content": "Text Widget 1",
"format": "RAW"
}
},
{
"text": {
"content": "**Text Widget 2**",
"format": "MARKDOWN"
}
},
{
"text": {
"content": "_Text Widget 3_",
"format": "MARKDOWN"
}
}
]
}
]
}
}
Widgets do painel
Um widget inclui um único componente de painel, além da configuração de como ele será apresentado nesse painel. Um painel pode ter mais de um widget. Há vários tipos de objetos Widget
:
XyChart
: exibe dados usando os eixos X e Y. Os gráficos de linhas, de barras, de área empilhada e de mapa de calor criados por meio do console do Google Cloud são instâncias desse widget. Se você criar um gráfico de linhas, de barras empilhadas ou de área empilhado, é possível especificar que uma métrica se refira ao eixo Y à esquerda ou à direita. Quando várias métricas são representadas no gráfico, é possível usar os dois eixos Y.Os gráficos de SLO também são instâncias do widget
XyChart
, mas não é possível criar gráficos de SLO usando a API.AlertChart
: exibe um resumo de uma política de alertas de condição única. Esse widget exibe dados como um gráfico de linhas, mostra o limite e lista o número de incidentes abertos.CollapsibleGroup
: exibe uma coleção de widgets. Você pode recolher a visualização de um grupo. Para incluir esses widgets, o painel precisa ter umMosaicLayout
.IncidentList
: exibe uma lista de incidentes. É possível configurar o widget para mostrar incidentes de políticas de alertas específicas ou de tipos de recursos específicos.LogsPanel
: exibe entradas de registro no escopo do projeto que estão armazenadas no projeto atual do Google Cloud. É possível configurar o widget para mostrar as entradas de registro armazenadas em projetos do Cloud acessíveis por meio do escopo de métricas atual.Scorecard
: exibe o valor mais recente de uma métrica e como ele está relacionado a um ou mais limites.TimeSeriesTable
: exibe o valor mais recente de uma métrica. É possível classificar a tabela com base em colunas, filtrá-la e adicionar ou remover colunas da exibição.Text
: exibe o conteúdo textual como texto bruto ou string do Markdown.
Além desses objetos, é possível adicionar um marcador vazio a um painel.
O exemplo a seguir mostra a representação JSON de um
widget XyChart
com o eixo Y direito configurado:
{
"displayName": "Demo dashboard",
"gridLayout": {
"widgets": [
{
"title": "Sample line 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"
}
],
"timeshiftDuration": "0s",
"yAxis": {
"label": "y1Axis",
"scale": "LINEAR"
},
"chartOptions": {
"mode": "COLOR"
}
}
}
]
}
}
Filtros do painel
Ao projetar um painel, você pode identificar várias maneiras de visualizar os dados exibidos pelo painel. Por exemplo, quando um painel exibe métricas de instâncias de máquina virtual (VM), talvez você queira ver métricas para todas as VMs e uma zona específica. Nesse caso, recomendamos criar um filtro permanente e definir o valor padrão dele como a vista mais usada. Os filtros permanentes podem ser aplicados a alguns ou a todos os widgets do painel. Ao visualizar o painel com o console do Google Cloud, a barra de ferramentas do painel exibe seus filtros permanentes e um menu que pode ser usado para alterar temporariamente o valor do filtro.
Há vários tipos de filtros de painel permanentes:
Os filtros de todo o painel se aplicam a todos os widgets de um painel compatíveis com o rótulo e não especificam um valor para esse rótulo.
Por exemplo, quando um gráfico inclui o filtro
zone = us-central1-a
, ele ignora um filtro do painel com base no rótulozone
. Da mesma forma, gráficos sem um rótulozone
ignoram os filtros do painel com esse rótulo.As variáveis de modelo são variáveis nomeadas que se aplicam a widgets específicos. Cada variável representa um rótulo e um valor específicos. Você determina a quais widgets uma variável de modelo se aplica.
Todos os tipos de filtro são representados com a mesma estrutura de dados.
Para ver mais informações, consulte DashboardFilter
.
O exemplo a seguir mostra a representação JSON parcial de um painel que define uma variável de modelo e um filtro em todo o painel:
{ "category": "CUSTOM", "dashboardFilters": [ { "filterType": "RESOURCE_LABEL", "labelKey": "zone", "stringValue": "us-central1-b", "templateVariable": "my_zone_temp_var" }, { "filterType": "RESOURCE_LABEL", "labelKey": "project_id", "stringValue": "my-project-id", "templateVariable": "" } ], "displayName": "Illustrate Template Variables", ...
No JSON exibido, a primeira entrada na estrutura dashboardFilters
é para uma variável de modelo com o nome my_zone_temp_var
.
A segunda entrada é para um filtro em todo o painel. Para esses filtros, que
se aplicam a todos os widgets de painel, o valor do campo templateVariable
é definido como uma string de comprimento zero, ""
.
A estrutura de dados de uma variável de modelo não lista os widgets a que ela se aplica. Em vez disso, quando você associa um widget a uma variável de modelo, a consulta do widget é modificada para incluir uma referência à variável. Ao usar a linguagem de consulta do Monitoring (MQL, na sigla em inglês) para configurar um gráfico, anexe um pipeline e a variável à string de consulta:
"timeSeriesQueryLanguage": "fetch gce_instance::compute.googleapis.com/instance/cpu/utilization\n| every 1m\n| ${my_zone_temp_var}\n"
Ao definir um gráfico usando o PromQL, anexe à string de consulta a variável encapsulada por chaves:
"prometheusQuery" : "compute_googleapis_com:instance_cpu_utilization {project_id=\"my-project\", ${my_zone_temp_var}}\n"
O exemplo anterior ilustra como filtrar um widget definido pelo PromQL para exibir apenas a série temporal que está no projeto do Google Cloud my-project
e que correspondem a uma variável de modelo.
Ao definir um gráfico usando filtros de série temporal, anexe a variável à string de filtro:
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\" ${my_zone_temp_var}"
As ilustrações a seguir de JSON mostram as strings de consulta no contexto da definição completa do gráfico:
{ ... "displayName": "Illustrate Template Variables", "mosaicLayout": { "columns": 12, "tiles": [ { "height": 4, "widget": { "title": "MQL", "xyChart": { "chartOptions": { "mode": "COLOR" }, "dataSets": [ { "plotType": "LINE", "targetAxis": "Y1", "timeSeriesQuery": { "timeSeriesQueryLanguage": "fetch gce_instance::compute.googleapis.com/instance/cpu/utilization\n| every 1m\n| ${my_zone_temp_var} \n" } } ], "timeshiftDuration": "0s", "yAxis": { "label": "y1Axis", "scale": "LINEAR" } } }, "width": 6, "xPos": 0, "yPos": 0 }, { "height": 4, "widget": { "title": "LTS", "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\" ${my_zone_temp_var}" } } } ], "timeshiftDuration": "0s", "yAxis": { "label": "y1Axis", "scale": "LINEAR" } } }, "width": 6, "xPos": 6, "yPos": 0 } ] } }
Especificar os dados que serão exibidos
Qualquer widget que exiba dados recuperados de uma série temporal tem um
objeto TimeSeriesQuery
incorporado a ele. Este objeto especifica os dados de série temporal
a serem usados no widget.
Você pode especificar os dados de série temporal a serem exibidos da seguinte maneira:
Usando os filtros do Monitoring. Os filtros são usados em consultas
TimeSeriesFilter
eTimeSeriesFilterRatio
. Para mais informações sobre como recuperar dados de métricas dessa maneira, consulte Como ler dados de métricas.Usando MQL. Essa abordagem usa uma consulta MQL em um objeto
TimeSeriesQuery
. A string de consulta é transmitida como o valor do campotimeSeriesQueryLanguage
.- Para informações gerais sobre MQL, consulte Como usar a Linguagem de consulta do Monitoring.
- Para informações sobre como fornecer consultas MQL para gráficos, consulte Como usar o MQL da API Monitoring: gráficos.
Se você criou seus widgets de painel por meio do console do Google Cloud, já está familiarizado com as métricas e séries temporais.
Para informações sobre métricas e séries temporais, consulte Métricas, séries temporais e recursos.
Os seguintes guias também podem ser úteis:
- Criar e gerenciar widgets do painel
- Selecionar métricas para gráficos em painéis
- Definir opções de visualização
Esses guias são criados para criar painéis usando o Console do Google Cloud, mas os conceitos também se aplicam à criação de widgets usando a API Cloud Monitoring.
Configurar para ver exemplos
Nesta seção, descrevemos as convenções e as configurações usadas para invocar a
API Cloud Monitoring usando a ferramenta curl
. Os exemplos neste documento acessam a API usando a ferramenta curl
para enviar solicitações HTTP a endpoints REST.
Para definir as variáveis usadas nas invocações de exemplo, use as
informações a seguir.
Authentication
Crie uma variável de ambiente para manter o ID do projeto do Google Cloud. Nestes exemplos,
PROJECT_ID
é utilizado:PROJECT_ID=a-gcp-project-12345
Autentique-se na Google Cloud CLI:
gcloud auth login
Como alternativa, é possível evitar a necessidade de especificar o ID do projeto com cada comando definindo-o como padrão usando a CLI gcloud:
gcloud config set project ${PROJECT_ID}
Crie um token de autorização e colete-o em uma variável de ambiente. Nestes exemplos, a variável
ACCESS_TOKEN
é chamada:ACCESS_TOKEN=`gcloud auth print-access-token`
É necessário atualizar o token de acesso periodicamente. Se os comandos que funcionaram informarem de repente que você não está autenticado, reenvie este comando.
Para verificar se você recebeu um token de acesso, faça o echo da variável
ACCESS_TOKEN
:echo ${ACCESS_TOKEN} ya29.ImW8Bz56I04cN4qj6LF....
Crie uma variável de ambiente para armazenar o ID do seu painel. Nestes exemplos, usamos a variável
DASHBOARD_ID
.
Invocar curl
Cada invocação curl
inclui um conjunto de argumentos, seguido pelo URL de um recurso. Os argumentos comuns incluem valores especificados pelas
variáveis de ambiente PROJECT_ID
, DASHBOARD_ID
e ACCESS_TOKEN
.
Talvez também seja necessário especificar outros argumentos, por exemplo, para especificar o tipo
a solicitação HTTP (por exemplo, -X DELETE
).
Cada invocação do curl
tem esta estrutura geral:
curl -H "Authorization: Bearer $ACCESS_TOKEN" <other_args> https://monitoring.googleapis.com/v1/projects/${PROJECT_ID}/<request>
Por exemplo, para listar todos os painéis personalizados no seu projeto, emita a seguinte solicitação:
curl -H "Authorization: Bearer $ACCESS_TOKEN" https://monitoring.googleapis.com/v1/projects/${PROJECT_ID}/dashboards
Veja a seguir a resposta desse comando para um projeto do Cloud:
{ "dashboards": [ { "name": "projects/123456789000/dashboards/c2ab1f1c-b8b9-1234-9c48-c7745802b659", "displayName": "Grid-layout example", "etag": "76a95cc500a7c7d6b3799709c13afe91", "gridLayout": { "widgets": [ { "text": { "content": "Text Widget 1", "format": "RAW" } }, { "text": { "content": "**Text Widget 2**", "format": "MARKDOWN" } }, { "text": { "content": "_Text Widget 3_", "format": "MARKDOWN" } } ] } }, { "name": "projects/123456789000/dashboards/cae85db7-6920-4e67-a45c-97a94c0e2679", "displayName": "Row-layout example", "etag": "a600be01afe0b37762cd7a9b92fc3e7e", "rowLayout": { "rows": [ { "widgets": [ { "text": { "content": "Text Widget 1", "format": "RAW" } }, { "text": { "content": "**Text Widget 2**", "format": "MARKDOWN" } }, { "text": { "content": "_Text Widget 3_", "format": "MARKDOWN" } } ] } ] } } ] }
Crie um painel
Para criar um novo painel personalizado, invoque o método dashboards.create
e inclua nele o layout e os widgets a serem exibidos no painel.
Quando você cria um painel, a API gera o dashboard_id
automaticamente. Se você quiser especificar um dashboard_id
personalizado, defina o campo name
de um objeto Dashboard
. O formato do campo de nome é assim:
"name": "projects/${PROJECT_ID}/dashboards/${DASHBOARD_ID}"
Protocolo
Para criar um novo painel, envie uma solicitação POST
para o endpoint Dashboard
.
curl -d @my-dashboard.json -H "Authorization: Bearer $ACCESS_TOKEN" -H 'Content-Type: application/json' -X POST https://monitoring.googleapis.com/v1/projects/${PROJECT_ID}/dashboards
gcloud
Para criar um painel em um projeto, use o comando gcloud monitoring dashboards
create
.
gcloud monitoring dashboards create --config-from-file=my-dashboard.json
Por exemplo, se você quiser duplicar um painel, faça o seguinte:
- Conclua as etapas em Instalar o painel para fazer o download da definição do painel original.
- Edite o JSON retornado para remover os campos
etag
ename
e altere o valor do campodisplayName
. - Execute o comando para criar o painel.
Para mais informações, consulte a referência de gcloud monitoring dashboards
create
.
Os exemplos criam um painel de amostra usando o arquivo my-dashboard.json
.
Agora é possível gerenciar seu painel pelo
console do Google Cloud.
Para outras configurações do painel, consulte Amostra de painéis e layouts.
Excluir painéis
Para excluir um painel personalizado, invoque o método dashboards.delete
e especifique o painel que você quer excluir.
Protocolo
Para excluir um painel personalizado, envie uma solicitação DELETE
para o endpoint Dashboard
, qualificado com o código do painel a ser excluído.
curl -H "Authorization: Bearer $ACCESS_TOKEN" -X DELETE https://monitoring.googleapis.com/v1/projects/${PROJECT_ID}/dashboards/${DASHBOARD_ID}
Se for bem-sucedido, o método retornará uma resposta vazia. Caso contrário, um erro será exibido.
gcloud
Para excluir um painel personalizado, use gcloud monitoring dashboards delete
e especifique o código totalmente qualificado do painel a ser excluído:
gcloud monitoring dashboards delete projects/${PROJECT_ID}/dashboards/${DASHBOARD_ID}
Para mais informações, consulte a referência de gcloud monitoring dashboards
delete
.
Listar painéis
Para listar todos os painéis que pertencem a um projeto, invoque o
método dashboards.list
e especifique o ID do projeto.
Protocolo
Para listar todos os painéis personalizados de um projeto, envie o código do projeto para o endpoint Dashboard
.
curl -H "Authorization: Bearer $ACCESS_TOKEN" https://monitoring.googleapis.com/v1/projects/${PROJECT_ID}/dashboards
gcloud
Para listar todos os painéis personalizados de um projeto, use o comando gcloud monitoring
dashboards list
:
gcloud monitoring dashboards list
Para mais informações, consulte a referência de gcloud monitoring dashboards
list
.
Os exemplos retornam os painéis personalizados associados ao seu projeto.
Paginar a resposta da lista
O método dashboards.list
suporta paginação. Com ela,
em vez de ver todos os resultados ao mesmo tempo, você os visualiza em uma página de cada vez.
Protocolo
Na página inicial da lista de resultados, especifique o parâmetro de consulta pageSize
com a solicitação:
curl -H "Authorization: Bearer $ACCESS_TOKEN" https://monitoring.googleapis.com/v1/projects/${PROJECT_ID}/dashboards?page_size=1
O método retorna a primeira página da lista e o nextPageToken
. Por
exemplo:
{ "dashboards" : [ { "displayName" : "Grid Layout Example", "gridLayout" : { "widgets" : [ { ... }, { ... }, { ... }, ] } } ] }, "nextPageToken": "ChYqFDEyMzkzMzUwNzg0OTE1MDI4MjM3"
Em cada página restante, você precisa incluir o nextPageToken
correspondente
na solicitação.
gcloud
Para especificar o número de recursos por página, passe a sinalização --page-size
com o comando. Exemplo:
gcloud monitoring dashboards list --page-size=1
Acessar painel
Para receber um painel personalizado específico para um projeto, invoque o método dashboards.get
, qualificado com o código do painel.
Protocolo
Para receber um painel personalizado específico, envie o código dele para o endpoint Dashboard
.
curl -H "Authorization: Bearer $ACCESS_TOKEN" https://monitoring.googleapis.com/v1/projects/${PROJECT_ID}/dashboards/${DASHBOARD_ID}
O método retorna uma resposta semelhante ao exemplo a seguir:
{ "columnLayout": { "columns": [ { "widgets": [ { "text": { "content": "Text Widget 1", "format": "RAW" } }, { "text": { "content": "**Text Widget 2**", "format": "MARKDOWN" } }, { "text": { "content": "_Text Widget 3_", "format": "MARKDOWN" } } ] } ] }, "displayName": "Column-layout example", "etag": "cb3070baf15de7c79d78761baac3a386", "name": "projects/730041941835/dashboards/e4cd063e-5414-4e07-9e1e-450d6d3a531d" }
gcloud
Para receber um painel personalizado específico, use o comando gcloud monitoring dashboards
describe
e especifique o código do painel:
gcloud monitoring dashboards describe ${DASHBOARD_ID} --format=json
O comando retorna o painel solicitado:
{ "columnLayout": { "columns": [ { "widgets": [ { "text": { "content": "Text Widget 1", "format": "RAW" } }, { "text": { "content": "**Text Widget 2**", "format": "MARKDOWN" } }, { "text": { "content": "_Text Widget 3_", "format": "MARKDOWN" } } ] } ] }, "displayName": "Column-layout example", "etag": "cb3070baf15de7c79d78761baac3a386", "name": "projects/730041941835/dashboards/e4cd063e-5414-4e07-9e1e-450d6d3a531d" }
Para mais informações, consulte a referência de gcloud monitoring dashboards
describe
.
Atualizar painel
Para atualizar um painel personalizado existente, invoque o método dashboards.patch
. Para receber o valor etag
atual, invoque o método dashboards.get
, e ele estará incluído na resposta.
Protocolo
Para atualizar um painel personalizado, envie uma solicitação PATCH
para o endpoint Dashboard
e forneça o objeto Dashboard
revisado e o valor etag
da resposta dashboards.get
mais recente.
curl -d @my-updated-dashboard.json -H "Authorization: Bearer $ACCESS_TOKEN" -H 'Content-Type: application/json' -X PATCH https://monitoring.googleapis.com/v1/projects/${PROJECT_ID}/dashboards/${DASHBOARD_ID}
gcloud
Para atualizar um painel personalizado, use gcloud monitoring dashboards update
, especifique o código do painel a ser atualizado e forneça as alterações no painel.
gcloud monitoring dashboards update ${DASHBOARD_ID} --config-from-file=my-updated-dashboard.json
Para mais informações, consulte a referência de gcloud monitoring dashboards
update
.
Os exemplos atualizam um painel personalizado existente usando o arquivo my-updated-dashboard.json
e retornam uma cópia da listagem do painel atualizada. Os dados retornados incluem um novo valor de etag
.