Neste documento, descrevemos como criar e gerenciar painéis personalizados e os 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.
Embora também seja possível gerenciar seus painéis personalizados por meio do console do Google Cloud, 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.
Sobre os painéis
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 rótulos e filtros ao painel. Os rótulos ajudam a encontrar um painel ou indicar o tipo de conteúdo nele.
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 abaixo são instâncias do widgetXyChart
:Gráficos de linhas
Gráficos de barras
Gráficos de área empilhada
Mapas de Calor
Gráficos da Análise de dados de registros
Widgets de SLO, mas não há suporte para a criação de 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 inseridas no gráfico, é possível usar os dois eixos Y.
PieChart
: exibe o valor mais recente de uma métrica, em que cada série temporal contribui com uma fração para a pizza.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 políticas 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 configurar o widget para mostrar incidentes a políticas de alertas específicas ou a tipos de recursos específicos.
Widgets de registro e erro:
ErrorReportingPanel
: exibe os 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
: mostra uma coleção de widgets. Você pode recolher a visualização de um grupo.SingleViewGroup
: exibe um widget em um conjunto de widgets. É possível selecionar o widget a ser exibido.SectionHeader
: cria um divisor horizontal no seu painel e cria uma entrada na tabela de conteúdos do painel.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"
}
}
}
]
}
}
Rótulos do painel
Os identificadores ajudam você a gerenciar e organizar seus painéis. Por exemplo, é possível adicionar um rótulo chamado prod
para indicar que o painel exibe dados de série temporal e de registro para seus recursos de produção. Como alternativa,
é possível adicionar o rótulo playbook
para indicar que o painel
contém informações que ajudam a resolver falhas.
Adicionar rótulos a um painel é opcional.
Por exemplo, o exemplo a seguir mostra um objeto Dashboard
que especifica o rótulo chamado playbook
.
{
"displayName": "Example",
"mosaicLayout": {
"columns": 12,
"tiles": [
...
]
},
"dashboardFilters": [],
"labels": {
"playbook": ""
}
}
Conforme ilustrado no exemplo anterior, o campo labels
é implementado como uma
map
, em que os campos key
e value
são strings. Ao adicionar um rótulo a um painel, defina key
como o nome do rótulo e defina o campo value
como uma string vazia.
Filtros do painel
Ao projetar um painel, é possível identificar várias maneiras de visualizar os dados que ele exibe. Por exemplo, quando um painel exibe métricas para instâncias de máquina virtual (VM), talvez você queira 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 para 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 você pode usar para alterar temporariamente o valor do filtro.
Há vários tipos de filtros permanentes no painel:
Os filtros do painel se aplicam a todos os widgets em um painel que aceitam o rótulo do filtro 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, 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 em 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
é de uma variável de modelo com o nome iid
e um filtro do 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 a que ela se aplica. Em vez disso, você associa 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 pelo 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. O exemplo a seguir
ilustra uma consulta que filtra pelo valor da variável de modelo iid
:
${iid}
Antes que o painel de registros consulte a exibição dos registros, 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"
.
Também é possível 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 que têm um payload JSON que contém a string descrita:
jsonPayload.message=~"Connected to instance: ${iid.value}"
Se você configurou uma consulta para o painel de registros e selecionou o botão para abrir a Análise de registros, 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 do painel de registros resolvida |
---|---|---|
${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 que o gráfico consulte a série temporal a ser exibida, 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 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, veja a seguir 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 em 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 com o PromQL, anexe à string de consulta a variável encapsulada por chaves:
compute_googleapis_com:instance_cpu_utilization { project_id="my-project", ${iid} }
Antes que o gráfico consulte a série temporal a ser exibida, 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 o 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, veja a seguir 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 em 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 por MQL e 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 |
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 Gerar 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 usando o
console do Google Cloud.
Para mais configurações de 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