Este documento descreve como pode criar e gerir painéis de controlo personalizados e os widgets nesses painéis de controlo através do recurso Dashboard na API Cloud Monitoring.
Os exemplos aqui ilustram como gerir os seus painéis de controlo através de
curl para invocar a API e mostram como usar a CLI Google Cloud.
Embora também possa gerir os seus painéis de controlo personalizados através da
Google Cloud consola, a API oferece-lhe uma forma
programática de gerir vários painéis de controlo em simultâneo.
O ponto final suporta os seguintes métodos para gerir e configurar painéis de controlo:
- dashboards.create: cria um painel de controlo
- dashboards.delete: elimina um painel de controlo especificado
- dashboards.list: obtém uma lista de todos os painéis de controlo num determinado projeto
- dashboards.get: obtém um painel de controlo especificado
- dashboards.patch: atualiza a estrutura de um painel de controlo especificado
Pode invocar a API diretamente através do utilitário curl ou da CLI Google Cloud.
Não pode obter, editar nem eliminar painéis de controlo predefinidos.
Esta funcionalidade só é suportada para projetos do Google Cloud . Para configurações do App Hub, selecione o projeto anfitrião ou o projeto de gestão do App Hub.
Acerca dos painéis de controlo
Quando cria um painel de controlo, tem de especificar os componentes ou os widgets que quer apresentar e o esquema desses widgets. Também pode adicionar etiquetas e filtros ao painel de controlo. As etiquetas podem ajudar a encontrar um painel de controlo ou indicar o tipo de conteúdo no painel de controlo.
Esquemas do painel de controlo
Os esquemas definem a ordem dos componentes de um painel de controlo. A API oferece os seguintes esquemas:
- GridLayout: divide o espaço disponível em colunas verticais de largura igual e organiza um conjunto de widgets usando uma estratégia de prioridade às linhas.
- MosaicLayout: divide o espaço disponível numa grelha. Cada widget pode ocupar um ou mais blocos da grelha.
- RowLayout: divide o espaço disponível em linhas e organiza um conjunto de widgets horizontalmente em cada linha.
- ColumnLayout: divide o espaço disponível em colunas verticais e organiza um conjunto de widgets verticalmente em cada coluna.
Por exemplo, o seguinte mostra a representação JSON de um painel de controlo 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 de controlo
Um widget contém um único componente do painel de controlo e a configuração de como apresentar o componente no painel de controlo. Um painel de controlo pode ter mais do que um widget. Existem vários tipos de Widgetobjetos:
- O widget - XyChartapresenta dados nos eixos X e Y.- Este widget apresenta um conjunto de dados que pode ser dados de séries cronológicas ou gerado por uma consulta SQL. Este widget permite-lhe associar os dados representados no gráfico ao eixo Y esquerdo ou direito. Quando são representados vários tipos de métricas, pode usar ambos os eixos Y. O widget - XyChartsuporta os seguintes estilos de apresentação:- Gráficos de linhas
- Gráficos de barras
- Gráficos de áreas sobrepostas
- Mapas térmicos
 
- Widgets que apresentam dados de uma dimensão, como o valor mais recente: - PieChart: apresenta os valores mais recentes de uma coleção de séries cronológicas, em que cada série cronológica contribui com uma fatia para o gráfico circular.
- Scorecard: apresenta o valor mais recente de uma série cronológica e a relação deste valor com um ou mais limites.
- TimeSeriesTable: apresenta o valor mais recente ou um valor agregado para cada série cronológica. As tabelas suportam a personalização. Por exemplo, pode atribuir um código de cores às células e configurar os nomes das colunas e o alinhamento dos dados.
 
- Widgets que apresentam informações sobre políticas de alerta ou incidentes: - AlertChart: apresenta um resumo de uma política de alerta de condição única. Este widget apresenta os dados como um gráfico de linhas, mostra o limite e indica o número de incidentes abertos.
- IncidentList: apresenta uma lista de incidentes. Pode configurar o widget para mostrar incidentes para políticas de alerta específicas ou para tipos de recursos específicos.
 
- Widgets que apresentam entradas do registo e erros: - ErrorReportingPanel: apresenta grupos de erros armazenados no Google Cloud projeto selecionado.
- LogsPanel: apresenta entradas de registo ao nível do projeto armazenadas no projeto Google Cloud atual. Pode configurar o widget para mostrar entradas de registo armazenadas em Google Cloud projetos acessíveis através do âmbito das métricas atual.
 
- Widgets de texto e organização: - CollapsibleGroup: apresenta uma coleção de widgets. Pode reduzir a vista de um grupo.
- SingleViewGroup: apresenta um widget numa coleção de widgets. Pode selecionar o widget a apresentar.
- SectionHeader: cria um separador horizontal no painel de controlo e cria uma entrada na tabela de conteúdos do painel de controlo.
- Text: apresenta conteúdo textual, como texto não processado ou uma string Markdown.
 - Para incluir os widgets de texto e organização num painel de controlo, o painel de controlo tem de ter um - MosaicLayout.
Além destes objetos, também pode adicionar um marcador de posição em branco a um painel de controlo.
Por exemplo, o seguinte mostra a representação JSON de um widget XyChart cujo eixo Y direito está 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"
          }
        }
      }
    ]
  }
}
Etiquetas do painel de controlo
As etiquetas podem ajudar a gerir e organizar os painéis de controlo. Por exemplo, pode adicionar uma etiqueta com o nome prod para indicar que o painel de controlo apresenta dados de séries cronológicas e dados de registo para os seus recursos de produção. Em alternativa, pode adicionar a etiqueta playbook para indicar que o painel de controlo contém informações para ajudar a resolver problemas de falhas.
A adição de etiquetas a um painel de controlo é opcional.
Por exemplo, o seguinte mostra um objeto Dashboard que especifica a etiqueta denominada playbook.
{
  "displayName": "Example",
  "mosaicLayout": {
    "columns": 12,
    "tiles": [
      ...
    ]
  },
  "dashboardFilters": [],
  "labels": {
    "playbook": ""
  }
}
Conforme ilustrado no exemplo anterior, o campo labels é implementado como um map, em que os campos key e value são ambos strings. Quando adiciona uma etiqueta a um painel de controlo, defina o elemento key com o nome da etiqueta e defina o campo value como uma string vazia.
Filtros e variáveis do painel de controlo
Quando cria um painel de controlo, pode identificar várias formas de ver os dados que o painel de controlo apresenta. Por exemplo, suponhamos que um painel de controlo apresenta dados de séries cronológicas para as suas instâncias de máquinas virtuais (VMs). Pode querer ver os dados de séries cronológicas para todas as VMs e ver apenas os dados que estão numa zona específica. Nesta situação, recomendamos que crie um filtro fixo ou uma variável e, em seguida, defina o valor predefinido desse filtro para a zona mais vista.
Os filtros fixos aplicam-se a todos os widgets do painel de controlo que suportam a etiqueta especificada no filtro, a menos que o widget contenha um filtro com essa mesma chave de etiqueta.
Por exemplo, quando um gráfico inclui o filtro zone = us-central1-a, esse gráfico ignora um filtro fixo cuja chave de etiqueta é zone. Da mesma forma, este filtro é ignorado pelos gráficos que não têm uma etiqueta com uma chave de zone.
As variáveis são como filtros fixos, mas aplicam-se apenas a widgets específicos. As variáveis podem basear-se em etiquetas, como os filtros fixados, ou
podem ter apenas um valor. As variáveis apenas com valores contêm um ou mais valores predefinidos e uma lista de todos os valores possíveis. Se não especificar um valor predefinido, a predefinição é o operador universal (*).
Para definir o conjunto de todos os valores possíveis, fornece uma matriz de valores ou escreve uma consulta SQL.
Para widgets que consultam dados, pode incluir uma variável na consulta do widget e usar uma variável para controlar a visibilidade do widget. Quando a consulta depende de uma variável, os dados pedidos pelo widget mudam quando altera o valor da variável. Consequentemente, os dados apresentados também mudam. Quando usa uma variável para controlar a visibilidade de um widget, é apresentado um ícone visibility Visível na barra de ferramentas. Para restrições relacionadas com a visibilidade, consulte o artigo Defina a visibilidade de um widget.
Tanto para os filtros fixados como para as variáveis, a barra de ferramentas do painel de controlo apresenta
cada variável, juntamente com um menu, que lhe permite alterar temporariamente o valor
da variável. A mesma estrutura de dados é usada para representar filtros fixados
e variáveis. Para ajudar a distinguir os filtros das variáveis, na barra de ferramentas do painel de controlo, o nome de uma variável tem um cifrão $ antes.
Para mais informações, consulte DashboardFilter.
Para ver um exemplo que mostra como pode controlar a visibilidade do widget através de uma variável, consulte Painel de controlo com a visibilidade do widget configurada.
Para saber como atualizar a consulta de um widget com uma variável baseada em etiqueta ou uma variável apenas com valor, consulte as seguintes secções:
- Sintaxe geral para desreferenciar uma variável
- Widgets do painel de registos
- Gráficos com consultas PromQL
- Gráficos com consultas SQL
- Gráficos com consultas de filtros de monitorização - Quando usa a interface orientada por menus para criar um gráfico que apresenta dados de séries cronológicas, as suas seleções são convertidas num filtro de monitorização. 
Crie filtros e variáveis
Consola
Para obter informações sobre como usar a Google Cloud consola para criar filtros fixos e variáveis, consulte os seguintes documentos:
API
Para definir filtros e variáveis fixos, use a estrutura de dados dashboardFilters.
- Para criar uma variável, defina o valor do campo templateVariablepara o nome da variável. Omita este campo ou defina o valor como uma string vazia quando quiser criar um filtro fixo.
- Para criar um filtro fixo ou uma variável baseada em etiquetas, tem de especificar o campo labelKey. Omita este campo quando quiser uma variável apenas com valor.
- Defina o valor predefinido para o filtro ou a variável. A configuração deste campo determina se um utilizador pode selecionar exatamente uma opção no menu de valores ou se pode selecionar vários valores. - Para definir um único valor predefinido e restringir os utilizadores à seleção de exatamente uma opção no menu de valores, defina o campo valueTypecomoSTRINGe também defina o campostringValue:
 - "valueType": "STRING", "stringValue": "my-default-value",- Para definir, pelo menos, um valor predefinido e permitir que os utilizadores selecionem várias opções no menu de valores, defina o campo valueTypecomoSTRING_ARRAYe defina também o campostringArrayValue. No exemplo seguinte, existem três valores predefinidos.
 - "valueType": "STRING_ARRAY", "stringArrayValue": { "values": [ "a", "b", "c" ] },
- Para definir um único valor predefinido e restringir os utilizadores à seleção de exatamente uma opção no menu de valores, defina o campo 
- Opcional: para especificar a lista de todos os valores possíveis para uma variável apenas de valor, defina o campo - stringArrayou o campo- timeSeriesQuery. Se especificar uma consulta, tem de ser uma consulta de estatísticas.
Por exemplo, considere o seguinte objeto dashboardFilters:
{
  "dashboardFilters": [
      {
        "labelKey": "zone"
        "stringValue": "us-central1-c",
        "valueType": "STRING",
        "filterType": "RESOURCE_LABEL"
      },
      {
        "labelKey": "instance_id",
        "stringValue": "3133577226154888113",
        "valueType": "STRING",
        "filterType": "RESOURCE_LABEL",
        "templateVariable": "my_label_based_variable"
      },
      {
        "filterType": "VALUE_ONLY",
        "templateVariable": "my_value_only_variable",
        timeSeriesQuery: {
          opsAnalyticsQuery: {
            sql: "
              SELECT log_name
              FROM `MY_TABLE`
              GROUP BY log_name
            ",
          }
        }
      }
    ],
  "displayName": "Illustrate Variables",
  ...
}
O JSON anterior define um filtro fixo e duas variáveis:
- O filtro fixo tem a chave da etiqueta - zone, que é apresentada na barra de ferramentas. Os campos- valueTypee- stringValueespecificam o valor predefinido único. Para mais informações, consulte a página de referências da API para a estrutura de dados- dashboardFilters.
- A variável baseada em etiquetas tem o nome - my_label_based_variablee a respetiva chave de etiqueta é- instance_id. O valor predefinido desta variável está definido como um ID de instância específico. Também pode configurar o valor predefinido através de uma matriz. Na barra de ferramentas, o filtro é apresentado com o nome- my_label_based_variable.
- A variável apenas com valor tem o nome - my_value_only_variable. Esta entrada não especifica um valor predefinido, pelo que o operador universal,- (*), é aplicado automaticamente. Além disso, esta variável usa uma consulta SQL para gerar a lista de valores possíveis para a variável.
Tenha em atenção que o objeto dashboardFilters não apresenta os widgets aos quais a variável se aplica. Em alternativa, atualize a consulta de um widget para depender de uma variável.
Sintaxe geral para desreferenciar uma variável
Para todos os widgets, exceto os definidos por SQL, use a seguinte sintaxe para aplicar uma variável a uma consulta:
- Para aplicar uma variável baseada em etiquetas e ter a chave da etiqueta e o valor da etiqueta resolvidos numa expressão de filtro válida para a linguagem de consulta, use - ${my_label_based_variable}.
- Para aplicar apenas o valor de uma variável baseada em etiquetas, use - ${my_label_based_variable.value}. A comparação tem de usar uma expressão regular.
- Para aplicar apenas o valor de uma variável apenas de valor, use - ${my_value_only_variable}. Para variáveis apenas com valores, não inclua uma cláusula- .value. A comparação tem de usar uma expressão regular.
Widgets do painel de registos
Para aplicar uma variável a um widget do painel Registos, atualize o painel de consultas. A sintaxe destes widgets segue a especificada em Sintaxe geral.
Consola
Por exemplo, a seguinte consulta usa uma expressão regular para comparar o valor do campo jsonPayload.message com um valor de string que inclui o valor de uma variável baseada em etiquetas:
jsonPayload.message=~"Connected to instance: ${my_label_based_variable.value}"
Como outro exemplo, considere uma variável apenas com valores, value_only_severity_variable, e suponha que, no menu de valores, estão selecionados três valores: ERROR, INFO e NOTICE.
Em seguida, adicione o seguinte ao painel de consultas do widget do painel de registos:
severity =~ "${value_only_severity_variable}"
A imagem seguinte ilustra o formulário renderizado:
severity =~ "^(ERROR|INFO|NOTICE)$"
API
Por exemplo, o JSON seguinte ilustra como atualizar a consulta de um widget do painel de registos com uma variável baseada em etiquetas:
"logsPanel": {
  "filter": "${my_label_based_variable}",
  "resourceNames": [
    "projects/1234512345"
  ]
},
Por exemplo, a seguinte consulta usa uma expressão regular para comparar o valor do campo jsonPayload.message com um valor de string que inclui o valor de uma variável baseada em etiquetas:
"logsPanel": {
  "filter": "resource.type=\"gce_instance\"\n
             resource.labels.project_id=~\"${my_label_based_variable.value}\"\n",
  "resourceNames": [
    "projects/012345"
  ]
}
Como outro exemplo, considere uma variável apenas com valor, value_only_severity_variable, e suponha que são selecionados três valores no menu: ERROR, INFO e NOTICE.
Em seguida, adicione o seguinte ao painel de consultas do widget do painel de registos:
"logsPanel": {
  "filter": "severity =~ \"${value_only_severity_variable}\"\n",
  ...
}
A imagem seguinte ilustra a consulta conforme executada pelo widget do painel de registos:
severity =~ "^(ERROR|INFO|NOTICE)$"
Se tiver configurado uma consulta para o painel de registos e, em seguida, selecionar o botão para abrir o Explorador de registos, as variáveis são resolvidas antes de o Explorador de registos ser aberto.
A tabela seguinte ilustra como as variáveis de exemplo são resolvidas pelo painel de registos. Conforme mencionado anteriormente, quando apenas o valor de uma variável é usado, tem de usar uma expressão regular como o operador de comparação:
| Sintaxe | Selected Value | Expressão do painel de registos resolvida | 
|---|---|---|
| ${my_label_based_variable} | 12345 | resource.labels."instance_id"="12345"A variável de exemplo baseia-se na etiqueta do recurso
           | 
| ${my_label_based_variable} | * | "" | 
| ${my_label_based_variable.value}${my_value_based_variable} | 12345 | 12345 | 
| ${my_label_based_variable.value}${my_value_based_variable} | * | .* | 
Gráficos com consultas PromQL
Para atualizar um gráfico que tenha uma consulta PromQL para depender de uma variável baseada em etiquetas, siga as orientações indicadas em Sintaxe geral.
Consola
Por exemplo, a seguinte consulta baseia-se na variável baseada em etiquetas my_label_based_variable, que é resolvida numa expressão de filtro:
compute_googleapis_com:instance_cpu_utilization{
    monitored_resource="gce_instance", ${my_label_based_variable} }
Também pode modificar a consulta para resolver apenas o valor de uma variável.
O exemplo seguinte usa uma expressão regular para comparar o valor
de uma consulta baseada em etiquetas com instance_id:
compute_googleapis_com:instance_cpu_utilization{
    instance_id=~"${my_label_based_variable.value}"
}
Se tiver uma variável apenas com valor, omita a cláusula .value. Por exemplo, para filtrar por zona usando uma variável apenas com valor, a consulta incluiria algo como o seguinte:
zone=~"${my_value_only_variable}"
API
Por exemplo, o JSON seguinte ilustra uma consulta que depende da variável baseada em etiquetas, my_label_based_variable, a ser resolvida numa expressão de filtro:
"timeSeriesQuery": {
  "prometheusQuery": "avg_over_time(
    compute_googleapis_com:instance_cpu_utilization{
      monitored_resource=\"gce_instance\",
      ${my_label_based_variable}
      }[${__interval}])",
  "unitOverride": "",
  "outputFullDuration": false
},
Também pode modificar a consulta para resolver apenas o valor de uma variável.
O exemplo seguinte usa uma expressão regular para comparar o valor
de uma consulta baseada em etiquetas com instance_id:
"timeSeriesQuery": {
  "prometheusQuery": "avg_over_time(
    compute_googleapis_com:instance_cpu_utilization{
    monitored_resource=\"gce_instance\",
    instance_id=~\"${my_label_based_variable.value}\"
    }[${__interval}])",
  "unitOverride": "",
  "outputFullDuration": false
},
Se tiver uma variável apenas com valor, omita a cláusula .value. Por exemplo, para filtrar por zona usando uma variável apenas com valor, a consulta incluiria algo como o seguinte:
zone=~\"${my_value_only_variable}\"
A tabela seguinte ilustra como as variáveis de exemplo são resolvidas pelo PromQL. Conforme mencionado anteriormente, quando apenas o valor de uma variável é usado, tem de usar uma expressão regular como o operador de comparação:
| Sintaxe | Selected Value | Expressão PromQL resolvida | 
|---|---|---|
| ${my_label_based_variable} | 12345 | instance_id == '12345'A variável de exemplo baseia-se na etiqueta do recurso
            | 
| ${my_label_based_variable} | * | noop_filter=~".*" | 
| ${my_label_based_variable.value}${my_value_based_variable} | 12345 | 12345 | 
| ${my_label_based_variable.value}${my_value_based_variable} | * | .+ | 
Gráficos com consultas SQL
Quando quiser atualizar um widget definido por SQL para depender de uma variável,
atualize a cláusula WHERE para referenciar o valor da variável.
Para todas as variáveis, adicione o símbolo "@" antes do nome da variável, por exemplo:
@variable_name. Para variáveis baseadas em etiquetas, acrescente .value ao nome da variável, @my_label_based_variabe.value.
Para consultas SQL, a substituição de variáveis baseia-se no BigQuery e é segura contra injeção de SQL. Para mais informações, consulte o artigo Executar consultas parametrizadas.
Consola
Uma vez que o SQL não interpreta o operador de carateres universais como "qualquer valor", recomendamos que use sempre uma declaração IF quando usar variáveis numa consulta SQL. O exemplo seguinte ilustra a utilização de uma variável apenas de valor cujo tipo de dados é uma string:
WHERE IF(@my_value_only_variable = "*", TRUE, log_name = @my_value_only_variable)
Quando a opção de menu da variável permite aos utilizadores selecionar vários valores, tem de converter o valor da variável num tipo de dados GoogleSQL através da função CAST.
A seguinte consulta ilustra esta sintaxe:
IF(ARRAY_LENGTH(CAST(@my_value_only_variable)) = 0, TRUE, severity IN UNNEST(@my_value_only_variable))
A declaração IF apresentada nos exemplos anteriores é recomendada porque o SQL não interpreta o operador de carateres universais como "qualquer valor". Por conseguinte, se omitir a declaração IF e selecionar o operador de carateres universais, o resultado da consulta é uma tabela vazia. No segundo exemplo, a função UNNEST converte a matriz numa tabela.
Para adicionar uma cláusula WHERE formatada corretamente, faça o seguinte:
- Edite o widget.
- Na barra de ferramentas, selecione Inserir filtro de variável e, de seguida, selecione a variável cuja cláusula WHEREquer atualizar.
- Na caixa de diálogo apresentada, reveja o código gerado e, de seguida, clique em Copiar e fechar.
- Cole o código copiado no painel Consulta e faça as edições necessárias. - Por exemplo, suponhamos que cria uma variável denominada - LogNameque gera uma lista de nomes de registos e produz o resultado numa tabela com uma única coluna denominada- log_name. Em seguida, cria um gráfico, seleciona Inserir filtro de variável e, de seguida, seleciona a variável- LogName. É gerado o seguinte código:- WHERE IF(@LogName = '*', TRUE, LogName = @LogName)- Neste exemplo, tem de editar o código gerado e substituir - LogName =por- log_name =para que a junção de tabelas possa ocorrer:- WHERE IF(@LogName = '*', TRUE, log_name = @LogName)
- Clique em Executar e, de seguida, em Aplicar. 
- Para guardar o painel de controlo modificado, clique em Guardar na barra de ferramentas. 
API
Uma vez que o SQL não interpreta o operador de carateres universais como "qualquer valor", recomendamos que use sempre uma declaração IF quando usar variáveis numa consulta SQL. O exemplo seguinte ilustra a utilização de uma variável apenas de valor cujo tipo de dados é uma string:
WHERE IF(@my_value_only_variable = "*", TRUE, log_name = @my_value_only_variable)
Por exemplo, o seguinte mostra uma representação JSON parcial de um gráfico que apresenta os resultados de uma consulta SQL. Para suportar a filtragem dos resultados
pelo nome de um registo, foi adicionada uma cláusula WHERE que faz referência à variável
denominada LogName:
"plotType": "STACKED_BAR",
"targetAxis": "Y1",
"timeSeriesQuery": {
  "opsAnalyticsQuery": {
    "queryExecutionRules": {},
    "queryHandle": "",
    "sql": "SELECT\n timestamp, severity, resource.type, log_name, text_payload, proto_payload, json_payload\n
            FROM\n `my-project.global._Default._Default`\n
            WHERE \n IF (@LogName = \"*\", TRUE, log_name=@LogName)\nLIMIT 10000"
  }
}
A variável LogName também envia uma consulta para determinar a lista de
nomes de registos possíveis:
"dashboardFilters": [
  {
    "filterType": "VALUE_ONLY",
    "templateVariable": "LogName",
    "valueType": "STRING",
    "timeSeriesQuery": {
      "opsAnalyticsQuery": {
        "savedQueryId": "",
        "sql": "SELECT log_name FROM `my-project.global._Default._Default` GROUP BY log_name LIMIT 1000",
        "queryHandle": ""
      },
      "unitOverride": "",
      "outputFullDuration": false
    }
  }
],
Quando a opção de menu da variável permite aos utilizadores selecionar vários valores, tem de converter o valor da variável num tipo de dados GoogleSQL através da função CAST.
A seguinte consulta ilustra esta sintaxe:
IF(ARRAY_LENGTH(CAST(@my_value_only_variable)) = 0, TRUE, severity IN UNNEST(@my_value_only_variable))
A declaração IF apresentada nos exemplos anteriores é recomendada porque o SQL não interpreta o operador de carateres universais como "qualquer valor". Por conseguinte, se omitir a declaração IF e selecionar o operador de carateres universais, o resultado da consulta é uma tabela vazia. No segundo exemplo, a função UNNEST converte a matriz numa tabela.
Gráficos com consultas de filtros de monitorização
Para atualizar um gráfico que tenha uma consulta sob a forma de um filtro de monitorização para depender de uma variável baseada em etiquetas, siga as orientações indicadas na secção Sintaxe geral.
Consola
Se usar a Google Cloud consola para criar os gráficos e usar a interface orientada por menus, pode atualizar a consulta do gráfico usando o campo Aplicar a gráficos da variável ou editando o widget e selecionando a variável baseada em etiquetas no menu Filtro. O menu Filtro apresenta todas as variáveis baseadas em etiquetas e todas as chaves de etiquetas.
Para atualizar a consulta de um gráfico de modo a depender de uma variável baseada em valor, faça o seguinte:
- Edite o gráfico.
- No painel de consulta, clique em Adicionar filtro e selecione uma chave de etiqueta. Por exemplo, pode selecionar zona.
- No menu Valor, selecione a variável apenas de valor.
- Clique em Aplicar.
- Para guardar o painel de controlo modificado, clique em Guardar na barra de ferramentas.
Por exemplo, o JSON seguinte ilustra uma consulta que depende de uma variável baseada em etiquetas, my_label_based_variable, a ser resolvida numa expressão de filtro:
metric.type="compute.googleapis.com/instance/cpu/utilization"
resource.type="gce_instance" ${my_label_based_variable}"
Os widgets que usam uma consulta sob a forma de um filtro de monitorização não podem filtrar a série cronológica pelo valor numa variável baseada em etiquetas;
no entanto, pode filtrar por variáveis apenas de valor.
Por exemplo, a consulta seguinte mostra o valor do campo Filtros de uma consulta que filtra por zone, com base no valor de uma variável apenas de valor:
metric.type="compute.googleapis.com/instance/cpu/utilization"
resource.type="gce_instance"
resource.label."zone"=monitoring.regex.full_match(${my_value_only_variable})
API
Por exemplo, o JSON seguinte ilustra uma consulta que depende de uma variável baseada em etiquetas, my_label_based_variable, a ser resolvida numa expressão de filtro:
"timeSeriesQuery": {
  "timeSeriesFilter": {
    "filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\"
               resource.type=\"gce_instance\"
               ${my_label_based_variable} ",
    "aggregation": {
      "alignmentPeriod": "60s",
      "perSeriesAligner": "ALIGN_MEAN",
      "groupByFields": []
    }
  },
  "unitOverride": "",
  "outputFullDuration": false
},
Os widgets que usam uma consulta sob a forma de um filtro de monitorização não podem filtrar a série cronológica pelo valor numa variável baseada em etiquetas;
no entanto, pode filtrar por variáveis apenas de valor.
Por exemplo, a seguinte consulta mostra o campo "filter" de uma consulta que
filtra por zone, com base no valor de uma variável apenas de valor:
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\"
          resource.type=\"gce_instance\"
          resource.labels.\"zone\"=monitoring.regex.full_match(${my_value_only_variable})"
A tabela seguinte ilustra como as variáveis de exemplo são resolvidas pelo filtro de monitorização. Conforme mencionado anteriormente, quando apenas o valor de uma variável é usado, tem de usar uma expressão regular como o operador de comparação:
| Sintaxe | Selected Value | Expressão de filtro resolvida | 
|---|---|---|
| ${my_label_based_variable} | 12345 | resource.instance_id == "12345"A variável de exemplo baseia-se na etiqueta do recurso
            | 
| ${my_label_based_variable} | * | Omitido | 
| ${my_label_based_variable.value} | 12345 | Não suportado | 
| ${my_label_based_variable.value} | * | Não suportado | 
| ${my_value_based_variable} | 12345 | "12345" | 
| ${my_value_based_variable} | * | ".*" | 
Antes de começar
Conclua o seguinte no Google Cloud projeto onde quer criar ou gerir painéis de controlo:
- 
  
   
   
     
   
  
 
 
 
  
    
      Select the tab for how you plan to use the samples on this page: gcloudIn the Google Cloud console, activate Cloud Shell. At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize. TerraformPara usar os exemplos do Terraform nesta página num ambiente de desenvolvimento local, instale e inicialize a CLI gcloud e, em seguida, configure as credenciais predefinidas da aplicação com as suas credenciais de utilizador. Instale a CLI Google Cloud. Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada. If you're using a local shell, then create local authentication credentials for your user account: gcloud auth application-default login You don't need to do this if you're using Cloud Shell. If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity. Para mais informações, consulte Configure o ADC para um ambiente de desenvolvimento local na Google Cloud documentação de autenticação. RESTPara usar os exemplos da API REST nesta página num ambiente de desenvolvimento local, usa as credenciais que fornece à CLI gcloud. Instale a CLI Google Cloud. Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada. Para mais informações, consulte o artigo Autenticar para usar REST na Google Cloud documentação de autenticação. Crie um painel de controloPara criar um novo painel de controlo personalizado, invoque o método dashboards.createe faculte-lhe o esquema e os widgets a apresentar no painel de controlo.O campo nameé opcional. O valor do campo de nome tem a seguinte estrutura:"name": "projects/PROJECT_ID_OR_NUMBER/dashboards/DASHBOARD_ID" Quando cria um painel de controlo, a API gera automaticamente o componente DASHBOARD_ID. Se quiser especificar um valor personalizado DASHBOARD_ID, pode especificar o campo namedo objetoDashboard.gcloudPara criar um painel de controlo num projeto, use o comando gcloud monitoring dashboards create.gcloud monitoring dashboards create --config-from-file=my-dashboard.json --project=PROJECT_IDAntes de executar o comando anterior, substitua o seguinte: - PROJECT_ID: o identificador do projeto. Para configurações do App Hub, selecione o projeto anfitrião ou o projeto de gestão do App Hub.
 Por exemplo, se quiser duplicar um painel de controlo, faça o seguinte: - Conclua os passos em Obter painel de controlo para transferir a definição do painel de controlo original.
- Edite o JSON devolvido para remover os campos etagenamee alterar o valor do campodisplayName.
- Execute o comando para criar o painel de controlo.
 Para mais informações, consulte a referência gcloud monitoring dashboards create.TerraformPara saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform. Para mais informações, consulte a Terraform documentação de referência do fornecedor. Para criar um painel de controlo com o Terraform, faça o seguinte: - Instale e configure o Terraform para o seu projeto. Para configurações do App Hub, selecione o projeto anfitrião ou o projeto de gestão do App Hub.
- Use o recurso do Terraform - google_monitoring_dashboard.- No comando, defina os seguintes campos: - dashboard_json: a representação JSON do painel de controlo, usando o formato- Dashboards.- Para ver exemplos deste formato, pode listar os painéis de controlo através do Explorador de APIs ou abrir um painel de controlo na Google Cloud consola e ver as representações JSON. 
- parent: o nome totalmente qualificado do seu projeto. Por exemplo, pode definir este campo como- "projects/PROJECT_ID", onde PROJECT_ID é o ID do seu Google Cloud projeto. Para configurações do App Hub, selecione o projeto anfitrião ou o projeto de gestão do App Hub.
 
 RESTPara criar um novo painel de controlo, envie um pedido POSTpara o ponto finalDashboard.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}/dashboardsAntes de executar o comando anterior, configure o seguinte: - ${PROJECT_ID}: uma variável de ambiente que armazena o ID do projeto no qual criar o painel de controlo. Para configurações do App Hub, selecione o projeto anfitrião ou o projeto de gestão do App Hub.
 Os exemplos criam um painel de controlo de amostra através do ficheiro my-dashboard.json. Pode gerir o seu painel de controlo através da Google Cloud consola.Para configurações adicionais do painel de controlo, consulte o artigo Exemplos de painéis de controlo e esquemas. Elimine painéis de controloPara eliminar um painel de controlo personalizado, invoque o método dashboards.deletee especifique o painel de controlo que quer eliminar.gcloudPara eliminar um painel de controlo personalizado, use gcloud monitoring dashboards deletee especifique o ID totalmente qualificado do painel de controlo a eliminar:gcloud monitoring dashboards delete DASHBOARD_ID --project=PROJECT_IDAntes de executar o comando anterior, substitua o seguinte: - PROJECT_ID: o identificador do projeto. Para configurações do App Hub, selecione o projeto anfitrião ou o projeto de gestão do App Hub.
- DASHBOARD_ID: o ID do painel de controlo.
 Para mais informações, consulte a referência gcloud monitoring dashboards delete.TerraformPode eliminar recursos através do Terraform. Para obter informações sobre como eliminar recursos, consulte o comando destroy do Terraform. RESTPara eliminar um painel de controlo personalizado, envie um pedido DELETEpara o ponto finalDashboard, qualificado com o ID do painel de controlo a eliminar.curl -H "Authorization: Bearer $ACCESS_TOKEN" -X DELETE https://monitoring.googleapis.com/v1/projects/${PROJECT_ID}/dashboards/${DASHBOARD_ID}Antes de executar o comando anterior, configure o seguinte: - ${PROJECT_ID}: uma variável de ambiente que armazena o ID do projeto no qual criar o painel de controlo. Para configurações do App Hub, selecione o projeto anfitrião ou o projeto de gestão do App Hub.
- ${DASHBOARD_ID}: uma variável de ambiente que armazena o ID do painel de controlo.
 Se for bem-sucedido, o método devolve uma resposta vazia. Caso contrário, devolve um erro. Listar painéis de controloPara listar todos os painéis de controlo personalizados que pertencem a um projeto, invoque o método dashboards.liste especifique o ID do projeto.gcloudPara apresentar uma lista de todos os painéis de controlo personalizados de um projeto, use o comando gcloud monitoring dashboards list:gcloud monitoring dashboards list --project=PROJECT_IDAntes de executar o comando anterior, substitua o seguinte: - PROJECT_ID: o identificador do projeto. Para configurações do App Hub, selecione o projeto anfitrião ou o projeto de gestão do App Hub.
 Para mais informações, consulte a gcloud monitoring dashboards listreferência.TerraformNão pode usar o Terraform para enviar uma consulta ao seu projeto com a resposta a ser uma lista de painéis de controlo. No entanto, pode ver estes painéis de controlo através da Google Cloud consola. RESTPara listar todos os painéis de controlo personalizados de um projeto, envie o ID do projeto para o ponto final Dashboard.curl -H "Authorization: Bearer $ACCESS_TOKEN" https://monitoring.googleapis.com/v1/projects/${PROJECT_ID}/dashboardsAntes de executar o comando anterior, configure o seguinte: - ${PROJECT_ID}: uma variável de ambiente que armazena o ID do projeto no qual criar o painel de controlo. Para configurações do App Hub, selecione o projeto anfitrião ou o projeto de gestão do App Hub.
 Os exemplos devolvem os painéis de controlo personalizados associados ao seu projeto. Paginar a resposta da listaO método dashboards.listsuporta a paginação, o que lhe permite obter os resultados uma página de cada vez, em vez de todos de uma só vez.gcloudPara especificar o número de recursos por página, transmita a flag --page-sizecom o comando. Por exemplo:gcloud monitoring dashboards list --page-size=1 --project=PROJECT_IDAntes de executar o comando anterior, substitua o seguinte: - PROJECT_ID: o identificador do projeto. Para configurações do App Hub, selecione o projeto anfitrião ou o projeto de gestão do App Hub.
 TerraformNão pode usar o Terraform para enviar uma consulta ao seu projeto com a resposta a ser uma lista paginada de painéis de controlo. No entanto, pode ver estes painéis de controlo através da Google Cloud consola. RESTPara a página inicial da lista de resultados, especifique o parâmetro de consulta pageSizecom o pedido:curl -H "Authorization: Bearer $ACCESS_TOKEN" https://monitoring.googleapis.com/v1/projects/${PROJECT_ID}/dashboards?page_size=1Antes de executar o comando anterior, configure o seguinte: - ${PROJECT_ID}: uma variável de ambiente que armazena o ID do projeto no qual criar o painel de controlo. Para configurações do App Hub, selecione o projeto anfitrião ou o projeto de gestão do App Hub.
 O método devolve a primeira página da lista e o nextPageToken. Por exemplo:{ "dashboards" : [ { "displayName" : "Grid Layout Example", "gridLayout" : { "widgets" : [ { ... }, { ... }, { ... }, ] } } ] }, "nextPageToken": "ChYqFDEyMzkzMzUwNzg0OTE1MDI4MjM3"Para cada página restante, tem de incluir o nextPageTokencorrespondente no pedido.Aceda ao painel de controloPara obter um painel de controlo personalizado específico para um projeto, invoque o método dashboards.get, qualificado com o ID do painel de controlo.gcloudPara obter um painel de controlo personalizado específico, use o comando gcloud monitoring dashboards describee especifique o ID do painel de controlo:gcloud monitoring dashboards describe DASHBOARD_ID --format=json --project=PROJECT_IDAntes de executar o comando anterior, substitua o seguinte: - PROJECT_ID: o identificador do projeto. Para configurações do App Hub, selecione o projeto anfitrião ou o projeto de gestão do App Hub.
- DASHBOARD_ID: o ID do painel de controlo.
 O comando devolve o painel de controlo pedido: { "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 gcloud monitoring dashboards describe.TerraformNão pode usar o Terraform para enviar uma consulta ao seu projeto com a resposta a ser um painel de controlo individual. No entanto, pode ver estes painéis de controlo através da Google Cloud consola. RESTPara obter um painel de controlo personalizado específico, envie o ID do painel de controlo para o ponto final Dashboard.curl -H "Authorization: Bearer $ACCESS_TOKEN" https://monitoring.googleapis.com/v1/projects/${PROJECT_ID}/dashboards/${DASHBOARD_ID}Antes de executar o comando anterior, configure o seguinte: - ${PROJECT_ID}: uma variável de ambiente que armazena o ID do projeto no qual criar o painel de controlo. Para configurações do App Hub, selecione o projeto anfitrião ou o projeto de gestão do App Hub.
- ${DASHBOARD_ID}: uma variável de ambiente que armazena o ID do painel de controlo.
 Na expressão anterior, ${DASHBOARD_ID}é uma variável de ambiente que armazena o nome totalmente qualificado do painel de controlo.O método devolve uma resposta semelhante ao seguinte exemplo: { "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" }Atualizar painel de controloPara atualizar um painel de controlo personalizado existente, invoque o método dashboards.patch. Para obter o valor atual, pode invocar o métododashboards.gete encontrá-lo na resposta.etaggcloudPara atualizar um painel de controlo personalizado, use gcloud monitoring dashboards update, especifique o ID do painel de controlo a atualizar e faculte as alterações ao painel de controlo.gcloud monitoring dashboards update DASHBOARD_ID --config-from-file=my-updated-dashboard.json --project=PROJECT_IDAntes de executar o comando anterior, substitua o seguinte: - PROJECT_ID: o identificador do projeto. Para configurações do App Hub, selecione o projeto anfitrião ou o projeto de gestão do App Hub.
- DASHBOARD_ID: o ID do painel de controlo.
 Para mais informações, consulte a referência gcloud monitoring dashboards update.O exemplo anterior atualiza um painel de controlo personalizado existente através do ficheiro my-updated-dashboard.json. A resposta, que inclui um novo valoretag, é uma cópia da ficha do painel de controlo atualizada.TerraformPara saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform. Para mais informações, consulte a Terraform documentação de referência do fornecedor. Para atualizar um painel de controlo através do Terraform, faça o seguinte: - Instale e configure o Terraform para o seu projeto. Para configurações do App Hub, selecione o projeto anfitrião ou o projeto de gestão do App Hub.
- Use o recurso do Terraform - google_monitoring_dashboard.- No comando, defina os seguintes campos: - dashboard_json: a representação JSON do painel de controlo, usando o formato- Dashboards.
- parent: o nome totalmente qualificado do seu projeto. Por exemplo, pode definir este campo como- "projects/PROJECT_ID", onde PROJECT_ID é o ID do seu Google Cloud projeto. Para configurações do App Hub, selecione o projeto anfitrião ou o projeto de gestão do App Hub.
 
 RESTPara atualizar um painel de controlo personalizado, envie um pedido PATCHpara o ponto finalDashboarde forneça o objetoDashboardrevisto e o valoretagda respostadashboards.getmais 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}Antes de executar o comando anterior, configure o seguinte: - ${PROJECT_ID}: uma variável de ambiente que armazena o ID do projeto no qual criar o painel de controlo. Para configurações do App Hub, selecione o projeto anfitrião ou o projeto de gestão do App Hub.
- ${DASHBOARD_ID}: uma variável de ambiente que armazena o ID do painel de controlo.
 O exemplo anterior atualiza um painel de controlo personalizado existente através do ficheiro my-updated-dashboard.json. A resposta, que inclui um novo valoretag, é uma cópia da ficha do painel de controlo atualizada.O que se segue?- Exemplos de painéis de controlo e esquemas
- Crie e faça a gestão de painéis de controlo personalizados com a Google Cloud consola
 Exceto em caso de indicação contrária, o conteúdo desta página é licenciado de acordo com a Licença de atribuição 4.0 do Creative Commons, e as amostras de código são licenciadas de acordo com a Licença Apache 2.0. Para mais detalhes, consulte as políticas do site do Google Developers. Java é uma marca registrada da Oracle e/ou afiliadas. Última atualização 2025-10-19 UTC.