As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Adicione a fonte de dados MySQL para poder consultar e visualizar dados de um banco de dados compatível com MySQL.
Importante
O Grafana versão 8.0 altera a estrutura de dados subjacente dos quadros de dados das fontes de dados MySQL, Postgres e Microsoft SQL Server. Como consequência, o resultado de uma consulta de série temporal é retornado em um formato amplo. Para obter mais informações, consulte Wide format
Para que as visualizações funcionem como antes, talvez seja necessário fazer algumas migrações manuais. Uma solução está documentada no Github em Postgres/MySQL/MSSQL: Alteração significativa na v8.0 relacionada a consultas de séries temporais e ordenação
Adicionar a fonte de dados
-
Abra o menu lateral escolhendo o ícone do Grafana no cabeçalho superior.
-
No menu lateral, sob o link Dashboards, você encontrará um link denominado Fontes de dados.
-
Escolha o botão + Adicionar fonte de dados no cabeçalho superior.
-
Selecione MySQL na lista suspensa Tipo.
Opções de fontes de dados.
Nome | Descrição |
---|---|
Name
|
O nome da fonte de dados. É assim que você vê a fonte de dados nos painéis e consultas. |
Default
|
Fonte de dados padrão significa que ela será pré-selecionada para novos painéis. |
Host
|
O endereço IP e nome do host e a porta opcional da instância MySQL. |
Database
|
Nome do banco de dados MySQL. |
User
|
Login e nome de usuário do banco de dados. |
Password
|
Senha do usuário do banco de dados. |
Max open
|
O número máximo de conexões abertas com o banco de dados, padrão unlimited (Grafana v5.4+). |
Max idle
|
O número máximo de conexões no pool de conexões ociosas, padrão 2 (Grafana v5.4+). |
Max lifetime
|
O tempo máximo, em segundos, em que uma conexão pode ser reutilizada. O padrão é 14400 /4 horas. Sempre deve ser menor do que o wait_timeout |
Intervalo de tempo mínimo
Um limite mínimo para as variáveis $_interval
e $_interval_ms
. É recomendável definir a frequência de gravação, por exemplo, 1m
se os dados forem gravados a cada minuto. Essa opção também pode ser substituída e configurada em um painel de dashboard nas opções de fonte de dados. Esse valor deve ser formatado como um número seguido por um identificador de tempo válido, por exemplo, 1m
(1 minuto) ou 30s
(30 segundos). As fontes de identidade a seguir são compatíveis.
Identificador | Description |
---|---|
y
|
Ano |
M
|
Mês |
w
|
Semana |
d
|
Dia |
h
|
Hora |
m
|
Minuto |
s
|
Segundo |
ms
|
Milissegundo |
Permissões de usuário do banco de dados
Importante
O usuário do banco de dados que você especifica ao adicionar a fonte de dados deve receber somente as permissões SELECT no banco de dados e nas tabelas específicos que você deseja consultar. O Grafana não valida se a consulta é segura. A consulta pode incluir qualquer instrução SQL. Por exemplo, instruções como USE otherdb;
e DROP TABLE
user;
seriam executadas. Para se proteger contra isso, recomendamos que você crie um usuário específico do MySQL com permissões restritas.
O exemplo de código a seguir mostra a criação de um usuário específico do MySQL com permissões restritas.
CREATE USER 'grafanaReader' IDENTIFIED BY 'password';
GRANT SELECT ON mydatabase.mytable TO 'grafanaReader';
Para conceder acesso a mais bancos de dados e tabelas, você pode usar caracteres curinga (*
) no lugar do banco de dados ou da tabela, se desejar.
Editor de consultas
Você encontra o editor de consultas MySQL na guia de métricas no modo de edição de um painel. Você entra no modo de edição escolhendo o título do painel e, depois, Editar.
O editor de consultas tem um link SQL gerado que aparece após a execução de uma consulta, no modo de edição do painel. Escolha-o e ele se expandirá e mostrará a string SQL bruta interpolada que foi executada.
Selecionar tabela, coluna de hora e coluna de métrica (DE)
Quando você entra no modo de edição pela primeira vez ou adiciona uma nova consulta, o Grafana tenta pré-preencher o construtor de consultas com a primeira tabela que tem uma coluna de carimbo de data e hora e uma coluna numérica.
No campo DE, o Grafana vai sugerir tabelas que estão no banco de dados configurado. Para selecionar uma tabela ou visualização em outro banco de dados ao qual o usuário do banco de dados tenha acesso, você pode inserir manualmente um nome totalmente qualificado (database.table), como otherDb.metrics
.
O campo da coluna Hora refere-se ao nome da coluna que contém os valores de tempo. Selecionar um valor para o campo da coluna Métrica é opcional. Se um valor for selecionado, o campo da coluna Métrica será usado como nome da série.
As sugestões da coluna de métrica conterão somente colunas com um tipo de dados de texto (text, tinytext, mediumtext, longtext, varchar, char). Se você quiser usar uma coluna com um tipo de dados diferente como coluna de métrica, você pode inserir o nome da coluna com uma forma: CAST(numericColumn as CHAR)
. Você também pode inserir expressões SQL arbitrárias no campo da coluna de métrica que sejam avaliadas como um tipo de dados de texto, como CONCAT(column1, " ",
CAST(numericColumn as CHAR))
.
Colunas e funções de agregação (SELECT)
Na linha SELECT
, você pode especificar quais colunas e funções deseja usar. No campo da coluna, você pode escrever expressões arbitrárias em vez de um nome de coluna, como column1 * column2 /
column3
.
Caso use funções agregadas, você deverá agrupar o conjunto de resultados. O editor adicionará automaticamente um GROUP BY time
se você adicionar uma função agregada.
Você pode adicionar mais colunas de valor escolhendo o botão de adição e selecionando no menu Column
. Várias colunas de valores serão plotadas como séries separadas no painel de grafo.
Filtrar dados (WHERE)
Para adicionar um filtro, escolha o ícone de adição à direta da condição WHERE
. Você pode remover filtros escolhendo o filtro e selecionando Remove
. Um filtro para o intervalo de tempo selecionado atualmente é adicionado automaticamente às novas consultas.
Agrupar por
Para agrupar por hora ou qualquer outra coluna, escolha o ícone de adição no final da linha AGRUPAR POR. A lista suspensa de sugestões mostrará somente as colunas de texto da tabela atualmente selecionada, mas você pode inserir manualmente qualquer coluna. Você pode remover o grupo escolhendo o item e selecionando Remove
.
Se você adicionar qualquer agrupamento, todas as colunas selecionadas deverão ter uma função agregada aplicada. O construtor de consultas adicionará automaticamente funções agregadas a todas as colunas sem funções agregadas quando você adicionar agrupamentos.
Preenchimento de lacunas
O Grafana pode preencher os valores ausentes quando você agrupa por tempo. A função de tempo aceita dois argumentos. O primeiro argumento é a janela de hora pela qual você deseja agrupar, e o segundo argumento é o valor com o qual você deseja que o Grafana preencha os itens ausentes.
Modo de editor de texto (bruto)
Você pode alternar para o modo de editor de consultas brutas escolhendo o ícone de hambúrguer e selecionando Alternar modo de editor ou escolhendo Editar SQL abaixo da consulta.
nota
Se você usar o editor de consultas brutas, certifique-se de que a consulta tenha, no mínimo, ORDER BY time
e um filtro no intervalo de tempo retornado.
Macros
Para simplificar a sintaxe e permitir partes dinâmicas, como filtros de intervalo de datas, a consulta pode conter macros.
Exemplo de macro | Descrição |
---|---|
$__time(dateColumn)
|
Será substituído por uma expressão para converter em um carimbo de data e hora do UNIX e renomear a coluna para time_sec ; por exemplo, UNIX_TIMESTAMP(dateColumn) as time_sec. |
$__timeEpoch(dateColumn)
|
Será substituído por uma expressão para converter em um carimbo de data e hora do UNIX e renomear a coluna para time_sec ; por exemplo, UNIX_TIMESTAMP(dateColumn) as time_sec. |
$__timeFilter(dateColumn)
|
Será substituído por um filtro de intervalo de tempo usando o nome da coluna especificada. Por exemplo, dateColumn BETWEEN FROM_UNIXTIME(1494410783) AND FROM_UNIXTIME(1494410983). |
$__timeFrom()
|
Será substituído pelo início da seleção de hora atualmente ativa. Por exemplo, FROM_UNIXTIME(1494410783). |
$__timeTo()
|
Será substituído pelo final da seleção de hora atualmente ativa. Por exemplo, FROM_UNIXTIME(1494410983). |
$__timeGroup(dateColumn,'5m')
|
Será substituído por uma expressão utilizável na cláusula GROUP BY. Por exemplo, cast(cast(UNIX_TIMESTAMP(dateColumn)/(300) as signed)300 as signed),* |
$__timeGroup(dateColumn,'5m', 0)
|
Igual à linha anterior, mas com um parâmetro de preenchimento, assim os pontos ausentes nessa série serão adicionados pelo Grafana e 0 será usado como valor. |
$__timeGroup(dateColumn,'5m', NULL)
|
O mesmo que acima, mas NULL será usado como valor para pontos ausentes. |
$__timeGroup(dateColumn,'5m', previous)
|
O mesmo que acima, mas o valor anterior dessa série será usado como valor de preenchimento se nenhum valor tiver sido visto ainda. NULL será usado (disponível apenas no Grafana 5.3+). |
$__timeGroupAlias(dateColumn,'5m')
|
Será substituído de forma idêntica a $__timeGroup , mas por um alias adicionado de coluna (disponível apenas no Grafana 5.3+). |
$__unixEpochFilter(dateColumn) |
Será substituído por um filtro de intervalo de tempo usando o nome da coluna especificado com os tempos representados como carimbo de data e hora do Unix. Por exemplo, dateColumn > 1494410783 AND dateColumn <
1494497183 . |
$__unixEpochFrom() |
Será substituído pelo início da seleção de hora atualmente ativa como carimbo de data e hora do Unix. Por exemplo, 1494410783 . |
$__unixEpochTo() |
Será substituído pelo final da seleção de hora atualmente ativa como carimbo de data e hora do Unix. Por exemplo, 1494497183 . |
$__unixEpochNanoFilter(dateColumn) |
Será substituído por um filtro de intervalo de tempo usando o nome da coluna especificado com os tempos representados como carimbo de data e hora de nanossegundos. Por exemplo, dateColumn > 1494410783152415214 AND
dateColumn < 1494497183142514872 . |
$__unixEpochNanoFrom() |
Será substituído pelo início da seleção de hora atualmente ativa como carimbo de data e hora de nanossegundos. Por exemplo, 1494410783152415214 . |
$__unixEpochNanoTo() |
Será substituído pelo final da seleção de hora atualmente ativa como carimbo de data e hora de nanossegundos. Por exemplo, 1494497183142514872 . |
$__unixEpochGroup(dateColumn,"5m",
[fillmode]) |
O mesmo que $__timeGroup para tempos armazenados como carimbo de data e hora do Unix (disponível apenas no Grafana 5.3+). |
$__unixEpochGroupAlias(dateColumn,"5m",
[fillmode])` |
O mesmo que acima, mas também adiciona um alias de coluna (disponível apenas no Grafana 5.3+). |
O editor de consultas tem um link de SQL gerado que aparece após a execução de uma consulta, no modo de edição do painel. Escolha-o e ele se expandirá e mostrará a string SQL bruta interpolada que foi executada.
Consultas de tabelas
Se a opção de consulta Formatar como estiver definida como Tabela, você poderá fazer basicamente qualquer tipo de consulta SQL. O painel da tabela mostrará automaticamente os resultados das colunas e linhas retornadas pela consulta.
O código a seguir mostra um exemplo de consulta.
SELECT
title as 'Title',
user.login as 'Created By' ,
dashboard.created as 'Created On'
FROM dashboard
INNER JOIN user on user.id = dashboard.created_by
WHERE $__timeFilter(dashboard.created)
Você pode controlar o nome das colunas do painel Tabela usando a sintaxe as
regular de seleção de coluna SQL.
Consultas de séries temporais
Se você definir Formatar como para Série temporal, para uso em um painel de grafo, por exemplo, a consulta deverá retornar uma coluna chamada time
que retorne um datetime de SQL ou qualquer tipo de dados numéricos representando o Unix epoch. Qualquer coluna, exceto time
e metric
, é tratada como uma coluna de valor. Você pode retornar uma coluna chamada metric
que é usada como nome da métrica para a coluna de valor. Se você retornar várias colunas de valor e uma coluna chamada metric
, essa coluna será usada como prefixo para o nome das séries (disponível somente no Grafana 5.3+).
Os conjuntos de resultados das consultas de séries temporais devem ser classificados por hora.
O código de exemplo a seguir mostra a coluna de metric
:
SELECT
$__timeGroup(time_date_time,'5m'),
min(value_double),
'min' as metric
FROM test_data
WHERE $__timeFilter(time_date_time)
GROUP BY time
ORDER BY time
O exemplo de código a seguir mostra o uso do parâmetro de preenchimento no macro $__timeGroup para converter valores nulos em zero.
SELECT
$__timeGroup(createdAt,'5m',0),
sum(value_double) as value,
measurement
FROM test_data
WHERE
$__timeFilter(createdAt)
GROUP BY time, measurement
ORDER BY time
O código de exemplo a seguir mostra várias colunas.
SELECT
$__timeGroup(time_date_time,'5m'),
min(value_double) as min_value,
max(value_double) as max_value
FROM test_data
WHERE $__timeFilter(time_date_time)
GROUP BY time
ORDER BY time
Não há suporte para um grupo dinâmico por tempo com base no intervalo de tempo e na largura do painel.
Modelos
Em vez da codificação rígida dos nomes de servidores, das aplicações e dos sensores em suas consultas de métricas, você pode usar variáveis no lugar deles. As variáveis são mostradas como caixas de seleção suspensas na parte superior do dashboard. Você pode usar essas caixas suspensas para alterar os dados exibidos no dashboard.
Para obter mais informações sobre modelos e variáveis de modelos, consulte Modelos.
Variável de consulta
Caso adicione uma variável de modelo do tipo Query
, você poderá escrever uma consulta MySQL que possa retornar itens como nomes de medições, nomes de chave ou valores de chave que são mostrados como uma caixa de seleção suspensa.
Por exemplo, você pode ter uma variável que contém todos os valores da coluna hostname
em uma tabela caso especifique uma consulta como esta na configuração da variável de modelos da Consulta.
SELECT hostname FROM my_host
Uma consulta pode retornar várias colunas, e o Grafana criará automaticamente uma lista delas. Por exemplo, a consulta a seguir retornará uma lista com valores de hostname
e hostname2
.
SELECT my_host.hostname, my_other_host.hostname2 FROM my_host JOIN my_other_host ON my_host.city = my_other_host.city
Para usar macros dependentes do intervalo de tempo, como $__timeFilter(column)
em sua consulta, o modo de atualização da variável do modelo deve ser definido como Na alteração do intervalo de tempo.
SELECT event_name FROM event_log WHERE $__timeFilter(time_column)
Outra opção é uma consulta que pode criar uma variável de chave/valor. A consulta deve retornar duas colunas denominadas __text
e __value
. O valor da coluna __text
deve ser exclusivo (se não for exclusivo, o primeiro valor será usado). As opções na lista suspensa terão um texto e um valor para que você possa ter um nome amigável como texto e uma ID como o valor.
O exemplo de código a seguir mostra uma consulta com hostname
como o texto e id
como o valor.
SELECT hostname AS __text, id AS __value FROM my_host
Você também pode criar variáveis aninhadas. Por exemplo, se você tivesse outra variável denominada region
. Então você pode fazer com que a variável hosts mostre apenas os hosts da região selecionada atualmente com uma consulta como esta (se region
for uma variável de vários valores, use o operador IN
de comparação em vez de =
para comparar com vários valores).
SELECT hostname FROM my_host WHERE region IN($region)
Usar __searchFilter
para filtrar resultados na variável de consulta
Usar __searchFilter
no campo de consulta filtrará o resultado da consulta com base no que o usuário digita na caixa de seleção suspensa. Quando nada foi inserido pelo usuário, o valor padrão para __searchFilter
é %
.
nota
É importante que você coloque a expressão __searchFilter
entre aspas, pois o Grafana não faz isso por você.
O exemplo a seguir mostra como usar __searchFilter
como parte do campo de consulta para permitir a pesquisa de hostname
enquanto o usuário digita na caixa de seleção suspensa.
SELECT hostname FROM my_host WHERE hostname LIKE '$__searchFilter'
Usar variáveis em consultas
Do Grafana 4.3.0 ao 4.6.0, as variáveis do modelo estão sempre entre aspas automaticamente, portanto, se for um valor de string, não as coloque entre aspas nas cláusulas where.
No Grafana 4.7.0, os valores das variáveis do modelo só ficam entre aspas quando a variável do modelo é de multi-value
.
Se a variável for uma variável de vários valores, use o operador de comparação IN
em vez de =
para comparar com vários valores.
Há duas sintaxes:
$<varname>
Exemplo com uma variável de modelo denominada hostname
:
SELECT
UNIX_TIMESTAMP(atimestamp) as time,
aint as value,
avarchar as metric
FROM my_table
WHERE $__timeFilter(atimestamp) and hostname in($hostname)
ORDER BY atimestamp ASC
[[varname]]
Exemplo com uma variável de modelo denominada hostname
:
SELECT
UNIX_TIMESTAMP(atimestamp) as time,
aint as value,
avarchar as metric
FROM my_table
WHERE $__timeFilter(atimestamp) and hostname in([[hostname]])
ORDER BY atimestamp ASC
Desativar a cotação para variáveis de vários valores
O Grafana cria automaticamente uma string entre aspas e separada por vírgula para variáveis de vários valores. Por exemplo: se server01
e server02
forem selecionados, será então formatado como: 'server01', 'server02'
. Para desativar a citação, use a opção de formatação csv para variáveis.
${servers:csv}
Para obter mais informações sobre opções de formatação de variáveis, consulte Opções avançadas de formato de variáveis.
Anotações
Você pode usar anotações para sobrepor informações importantes de eventos nos grafos. Você adiciona consultas de anotações por meio do menu Dashboard e da Visualização de anotações. Para obter mais informações, consulte .
O código de exemplo a seguir mostra uma consulta usando uma coluna de hora com valores epoch.
SELECT
epoch_time as time,
metric1 as text,
CONCAT(tag1, ',', tag2) as tags
FROM
public.test_data
WHERE
$__unixEpochFilter(epoch_time)
O código de exemplo a seguir mostra uma consulta de região usando colunas timeend com valores epoch.
nota
Disponível apenas no Grafana v6.6+.
SELECT
epoch_time as time,
epoch_timeend as timeend,
metric1 as text,
CONCAT(tag1, ',', tag2) as tags
FROM
public.test_data
WHERE
$__unixEpochFilter(epoch_time)
O código de exemplo a seguir mostra uma consulta usando uma coluna de hora do tipo de dados SQL nativo de data e hora.
SELECT
native_date_time as time,
metric1 as text,
CONCAT(tag1, ',', tag2) as tags
FROM
public.test_data
WHERE
$__timeFilter(native_date_time)
Nome | Descrição |
---|---|
time
|
O nome do tipo de date/time field. Could be a column with a native SQL date/time dados ou valor da época. |
timeend
|
Nome opcional do tipo de date/time field. Could be a column with a native SQL date/time dados final ou valor da época. |
text
|
Campo de descrição do evento. |
tags
|
Nome de campo opcional a ser usado para tags de eventos como uma string separada por vírgula. |
Geração de alertas
As consultas de séries temporais devem funcionar em condições de alerta. As consultas formatadas em tabela ainda não são compatíveis em condições de regras de alerta.