Neste documento, descrevemos como criar e gerenciar painéis personalizados e os widgets nesses painéis 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.
Embora você também possa gerenciar seus painéis personalizados por meio do console do Google Cloud, a API oferece uma maneira programática de gerenciar muitos 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. Você também pode adicionar filtros permanentes ao seu 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
:
Widgets de gráfico e tabela:
XyChart
: exibe dados usando os eixos X e Y. Os gráficos a seguir são instâncias do widgetXyChart
:Gráficos de linhas
Gráficos de barras
Gráficos de área empilhadas
Mapas de Calor
Gráficos da Análise de dados de registros
Os widgets de SLO, mas não é possível criar gráficos de SLO usando a API.
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 nos gráficos, é possível usar ambos os eixos Y.
PieChart
: exibe o valor mais recente de uma métrica, em que cada série temporal contribui com uma fatia.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.
Gráficos de alertas e widgets de incidentes:
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.IncidentList
: mostra uma lista de incidentes. É possível configurá-lo para mostrar incidentes de políticas de alertas ou tipos de recursos específicos.
Widgets de registro e erro:
ErrorReportingPanel
: exibe grupos de erros armazenados no projeto selecionado do Google Cloud.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 entradas de registro armazenadas em projetos do Google Cloud acessíveis por meio do escopo de métricas atual.
Widgets de texto e organização:
Para incluir esses widgets em um painel, ele precisa ter um
MosaicLayout
.CollapsibleGroup
: exibe uma coleção de widgets. Você pode fechar a visualização de um grupo.SingleViewGroup
: mostra um widget em uma coleção de widgets. É possível selecionar o widget a ser exibido.SectionHeader
: cria um divisor horizontal no seu painel e uma entrada no índice.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, é possível identificar várias maneiras de visualizar os dados exibidos nele. Por exemplo, quando um painel exibe métricas de instâncias de máquina virtual (VM), é possível visualizar métricas de todas as VMs e de uma zona específica. Nesse tipo de situação, recomendamos que você crie um filtro permanente e defina o valor padrão dele como a visualização 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 do painel se aplicam a todos os widgets em um painel que oferecem suporte ao rótulo de filtro e que 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, os 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 é para 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 mais informações, consulte DashboardFilter
.
Por exemplo, o exemplo a seguir mostra a representação JSON parcial de um painel que define uma variável de modelo e um filtro de todo o painel:
{ "dashboardFilters": [ { "filterType": "RESOURCE_LABEL", "labelKey": "instance_id", "stringValue": "3133577226154888113", "templateVariable": "iid" }, { "filterType": "RESOURCE_LABEL", "labelKey": "zone" } ], "displayName": "Illustrate Template Variables", ...
No JSON exibido, a primeira entrada na estrutura dashboardFilters
é para uma variável de modelo com o nome iid
e um filtro em todo o painel com a chave de rótulo zone
. A variável de modelo é
um alias do rótulo instance_id
.
A estrutura de dados de uma variável de modelo não lista os widgets aos quais ela se aplica. Em vez disso, associe um widget a uma variável de modelo modificando a consulta do widget para incluir uma referência à variável. Quando o widget é exibido no painel, o valor da variável de modelo é resolvido.
Consulte as seções abaixo para saber como fazer anotações em painéis e gráficos de registros:
- Painel de registros
- Gráficos e tabelas definidos pela MQL
- Gráficos e tabelas definidos pelo PromQL
- Gráficos e tabelas definidos com filtros de série temporal
Painel de registros
Para configurar um painel de registros para filtrar a exibição com base no valor de uma variável de modelo, adicione a variável ao painel de consulta. Confira no exemplo a seguir uma consulta que filtra pelo valor da variável de modelo iid
:
${iid}
Antes que o painel de registros consulte os registros para exibição, a variável de modelo é resolvida. Neste exemplo, se o valor da variável de modelo for "12345"
, ${iid}
será substituído pela instrução resource.labels."instance_id"="12345"
.
Você também pode incluir apenas o valor de uma variável de modelo em uma consulta. Recomendamos que você use o valor apenas como parte de um filtro definido com uma expressão regular. Por exemplo, a consulta a seguir usa uma expressão regular para corresponder a entradas de registro com um payload JSON que contenha a string descrita:
jsonPayload.message=~"Connected to instance: ${iid.value}"
Se você tiver configurado uma consulta para o painel de registros e selecionado o botão para abri-la, as variáveis de modelo serão resolvidas antes de abrir a Análise de registros.
A tabela a seguir mostra como a variável de modelo é resolvida pelo painel de registros:
Sintaxe | Valor selecionado |
Expressão resolvida do painel de registros |
---|---|---|
${iid} |
12345 |
resource.labels."instance_id"="12345" |
${iid} |
* |
"" |
${iid.value} |
12345 |
12345 |
${iid.value} |
* |
.* |
Gráficos e tabelas definidos pelo MQL
Ao usar a linguagem de consulta do Monitoring (MQL, na sigla em inglês) para configurar um gráfico, anexe um pipe e a variável à string de consulta:
fetch gce_instance | metric 'compute.googleapis.com/instance/cpu/utilization' | every 1m | ${iid}
Antes de o gráfico consultar a série temporal para exibição, a variável de modelo é resolvida. Neste exemplo, se o valor da variável de modelo for "12345"
, ${iid}
será substituído pela instrução filter (resource.instance_id == '12345')
. Esse filtro corresponde apenas a séries temporais que têm um rótulo chamado resource.instance_id
e somente quando o valor desse rótulo é exatamente 12345
.
Quando você quiser filtrar série temporal usando uma expressão regular, configure a consulta para incluir apenas o valor da variável de modelo.
Para ilustrar a sintaxe, o código a seguir mostra como usar uma expressão regular para determinar se o valor do rótulo resource.instance_id
contém o valor da variável de modelo iid
:
fetch gce_instance | metric 'compute.googleapis.com/instance/cpu/utilization' | filter resource.instance_id=~"${iid.value}" | group_by 1m, [value_utilization_mean: mean(value.utilization)] | every 1m
A tabela a seguir mostra como a variável de modelo é resolvida para consultas MQL:
Sintaxe | Valor selecionado |
Expressão MQL resolvida |
---|---|---|
${iid} |
12345 |
filter (resource.instance_id == '12345') |
${iid} |
* |
filter (true) |
${iid.value} |
12345 |
12345 |
${iid.value} |
* |
.* |
Gráficos e tabelas definidos pelo PromQL
Ao definir um gráfico usando PromQL, anexe à string de consulta a variável entre chaves:
compute_googleapis_com:instance_cpu_utilization { project_id="my-project", ${iid} }
Antes de o gráfico consultar a série temporal para exibição, a variável de modelo é resolvida. Neste exemplo, se o valor da variável de modelo for "12345"
, ${iid}
será substituído pela instrução instance_id == '12345'
.
Assim como no MQL, quando você define um widget com PromQL, a consulta
pode extrair apenas o valor da variável de modelo. Recomendamos que você
use o valor apenas como parte de um filtro definido com uma expressão regular. Para ilustrar a sintaxe, o exemplo a seguir mostra como usar uma expressão regular para determinar se o valor do rótulo instance_id
contém o valor da variável de modelo iid
:
compute_googleapis_com:instance_cpu_utilization{ instance_id=~"${iid.value}" }
A tabela a seguir mostra como a variável de modelo é resolvida para consultas PromQL:
Sintaxe | Valor selecionado |
Expressão PromQL resolvida |
---|---|---|
${iid} |
12345 |
instance_id == '12345' |
${iid} |
* |
noop_filter=~".*" |
${iid.value} |
12345 |
12345 |
${iid.value} |
* |
.+ |
Gráficos e tabelas definidos com filtros de série temporal
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\" ${iid}"
Ao contrário dos gráficos definidos pelo MQL e pelo PromQL, não é possível usar o valor de uma variável de modelo em um filtro de série temporal.
A tabela a seguir mostra como a variável de modelo é resolvida:
Sintaxe | Valor selecionado |
Expressão de filtro resolvida |
---|---|---|
${iid} |
12345 |
resource.instance_id == "12345" |
${iid} |
* |
Omitida |
${iid.value} |
12345 |
Sem suporte |
${iid.value} |
* |
Sem suporte |
Criar 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 Acessar 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
.
É possível gerenciar seu painel pelo
console do Google Cloud.
Para outras configurações do painel, consulte Exemplos 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
. 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
.
A seguir
- Exemplos de painéis e layouts
- Criar e gerenciar painéis personalizados com o console do Google Cloud