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á.
MySQL
Adicione a fonte de dados MySQL para poder consultar e visualizar dados de um banco de dados compatível com MySQL.
Importante
A versão 8.0 do Grafana altera a estrutura de dados subjacente dos quadros de dados das fontes de dados MySQL, Postgres e Microsoft SQL Server. Como resultado, um resultado de consulta de série temporal é retornado em um formato amplo. Para obter mais informações, consulte Formato amplo
Para que suas 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 da coluna de dados
Adicionar a fonte de dados
-
Abra o menu lateral escolhendo o ícone Grafana no cabeçalho superior.
-
No menu lateral abaixo do link Painéis, você deve encontrar um link chamado Fontes de dados.
-
Escolha o botão + Adicionar fonte de dados no cabeçalho superior.
-
Selecione MySQL na lista suspensa Tipo.
Opções de fonte de dados
Name (Nome) | Descrição |
---|---|
Name
|
O nome da fonte de dados. É assim que você vê a fonte de dados em painéis e consultas. |
Default
|
A fonte de dados padrão significa que ela será pré-selecionada para novos painéis. |
Host
|
O endereço IP/nome do host e a porta opcional da sua instância MySQL. |
Database
|
Nome do seu banco de dados MySQL. |
User
|
Login/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ãounlimited (Grafana v5.4+). |
Max idle
|
O número máximo de conexões no pool de conexões ociosas, padrão2 (Grafana v5.4+). |
Max lifetime
|
O tempo máximo em segundos em que uma conexão pode ser reutilizada, por padrão:14400 /4 horas. Isso sempre deve ser menor do que o wait_timeout |
Intervalo de tempo mínimo
Um limite inferior para as$_interval
$_interval_ms
variáveis. Recomenda-se definir a frequência de gravação, por exemplo,1m
se seus dados forem gravados a cada minuto. Essa opção também pode ser substituída/configurada em um painel de painel nas opções da 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) ou30s
(30 segundos). Os seguintes identificadores de horário são suportados.
Identifier | Descrição |
---|---|
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
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 especificados que você deseja consultar. O Grafana não valida se a consulta é segura. A consulta pode incluir qualquer instrução SQL. Por exemplo, declarações comoUSE otherdb;
eDROP TABLE
user;
seriam executadas. Para se proteger contra isso, é altamente recomendável 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 quiser.
Editor de consultas
Você encontra o editor de consultas do 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 interpolada bruta que foi executada.
Selecione tabela, coluna de tempo e coluna métrica (DE)
Quando você entra no modo de edição pela primeira vez ou adiciona uma nova consulta, o Grafana tentará pré-preencher o construtor de consultas com a primeira tabela que tem uma coluna de timestamp e uma coluna numérica.
No campo FROM, o Grafana sugerirá tabelas que estão no banco de dados configurado. Para selecionar uma tabela ou exibiçã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), comootherDb.metrics
.
O campo Coluna Hora se refere ao nome da coluna que contém seus valores de tempo. A seleção de um valor para o campo Coluna métrica é opcional. Se um valor for selecionado, o campo da coluna Métrica será usado como o nome da série.
As sugestões de colunas métricas conterão somente colunas com um tipo de dados de texto (texto, texto minúsculo, texto médio, texto longo, varchar, char). Se você quiser usar uma coluna com um tipo de dados diferente como coluna métrica, você pode inserir o nome da coluna com uma conversão:CAST(numericColumn as CHAR)
. Você também pode inserir expressões SQL arbitrárias no campo da coluna métrica que avaliam um tipo de dados de texto, comoCONCAT(column1, " ",
CAST(numericColumn as CHAR))
.
Colunas e funções de agregação (SELECT)
NaSELECT
linha, 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, comocolumn1 * column2 /
column3
.
Se você usar funções agregadas, deverá agrupar seu conjunto de resultados. O editor adicionará automaticamente umGROUP 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 noColumn
menu. Várias colunas de valores serão plotadas como séries separadas no painel gráfico.
Filtrando dados (ONDE)
Para adicionar um filtro, escolha o ícone de adição à direita daWHERE
condição. Você pode remover filtros escolhendo o filtro e selecionandoRemove
. 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á apenas as colunas de texto da tabela atualmente selecionada, mas você poderá inserir manualmente qualquer coluna. Você pode remover o grupo escolhendo o item e depois selecionandoRemove
.
Se você adicionar qualquer agrupamento, todas as colunas selecionadas deverão ter uma função agregada aplicada. O criador 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 que faltam quando você agrupa por hora. A função time aceita dois argumentos. O primeiro argumento é a janela de tempo pela qual você deseja agrupar e o segundo argumento é o valor com o qual você deseja que o Grafana preencha os itens ausentes.
Modo editor de texto (raw)
Você pode alternar para o modo de editor de consulta bruta 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 sua consulta tenhaORDER BY time
, no mínimo, 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ída por uma expressão para converter em um timestamp UNIX e renomear a coluna paratime_sec ; por exemplo, UNIX_TIMESTAMP (DateColumn) como time_sec. |
$__timeEpoch(dateColumn)
|
Será substituída por uma expressão para converter em um timestamp UNIX e renomear a coluna paratime_sec ; por exemplo, UNIX_TIMESTAMP (DateColumn) como time_sec. |
$__timeFilter(dateColumn)
|
Será substituído por um filtro de intervalo de tempo usando o nome da coluna especificado. Por exemplo, DateColumn BETWEEN FROM_UNIXTIME (1494410783) E FROM_UNIXTIME (1494410983). |
$__timeFrom()
|
Será substituído pelo início da seleção de horário atualmente ativa. Por exemplo, FROM_UNIXTIME (1494410783). |
$__timeTo()
|
Será substituído até o final da seleção de horário atualmente ativa. Por exemplo, FROM_UNIXTIME (1494410983). |
$__timeGroup(dateColumn,'5m')
|
Será substituída por uma expressão utilizável na cláusula GROUP BY. Por exemplo, cast (cast (UNIX_TIMESTAMP (DateColumn)/(300) como assinado) 300 como assinado), * |
$__timeGroup(dateColumn,'5m', 0)
|
Igual à linha anterior, mas com um parâmetro de preenchimento, os pontos ausentes nessa série serão adicionados por grafana e 0 será usado como valor. |
$__timeGroup(dateColumn,'5m', NULL)
|
O mesmo que acima, mas NULL será usado como valor para pontos faltantes. |
$__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$__timeGroup , mas por um alias de coluna adicionado (disponível somente no Grafana 5.3+). |
$__unixEpochFilter(dateColumn) |
Será substituído por um filtro de intervalo de tempo usando o nome da coluna especificado com horários representados como timestamp 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/hora Unix. Por exemplo, 1494410783 . |
$__unixEpochTo() |
Será substituído até o final da seleção de hora atualmente ativa como carimbo de data/hora Unix. Por exemplo, 1494497183 . |
$__unixEpochNanoFilter(dateColumn) |
Será substituído por um filtro de intervalo de tempo usando o nome da coluna especificado com horários representados como timestamp de nanossegundos. Por exemplo, dateColumn > 1494410783152415214 AND
dateColumn < 1494497183142514872 . |
$__unixEpochNanoFrom() |
Será substituído pelo início da seleção de tempo atualmente ativa como timestamp de nanossegundos. Por exemplo, 1494410783152415214 . |
$__unixEpochNanoTo() |
Será substituído até o final da seleção de tempo atualmente ativa como timestamp de nanossegundos. Por exemplo, 1494497183142514872 . |
$__unixEpochGroup(dateColumn,"5m",
[fillmode]) |
O mesmo que$__timeGroup , mas para horários armazenados como timestamp Unix (disponível somente 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 SQL gerado que aparece após a execução de uma consulta, no modo de edição de painel. Escolha-o e ele se expandirá e mostrará a string SQL interpolada bruta que foi executada.
Consultas de tabelas
Se a opção Formatar como consulta estiver definida como Tabela, você pode basicamente fazer qualquer tipo de consulta SQL. O painel da tabela mostrará automaticamente os resultados de quaisquer colunas e linhas que sua consulta retorne.
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 normal de seleção de colunasas
SQL.
consultas de séries temporais
Se você definir Formato como Série temporal, para uso em um painel gráfico, por exemplo, a consulta deverá retornar uma coluna chamadatime
que retorne uma data e hora SQL ou qualquer tipo de dados numérico representando a época do Unix. Qualquer coluna, excetotime
e,metric
é tratada como uma coluna de valor. Você pode retornar uma coluna chamadametric
que é usada como nome métrico para a coluna de valor. Se você retornar várias colunas de valor e uma coluna chamadametric
, essa coluna será usada como prefixo para o nome da série (disponível somente no Grafana 5.3+).
Os conjuntos de resultados das consultas de séries temporais devem ser classificados por tempo.
O exemplo de código a seguir mostra ametric
coluna.
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 fill na 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 exemplo de código 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
Atualmente, não há suporte para um grupo dinâmico por tempo com base no intervalo de tempo e na largura do painel. Isso pode ser suportado no future.
Modelagem
Em vez de codificar coisas como servidor, aplicativo e nome do sensor em suas consultas métricas, você pode usar variáveis em seu lugar. As variáveis são mostradas como caixas de seleção suspensas na parte superior do painel. Você pode usar essas caixas suspensas para alterar os dados exibidos em seu painel.
Para obter mais informações sobre modelagem e variáveis de modelo, consulteModelos.
Variável de consulta
Se você adicionar uma variável de modelo do tipoQuery
, poderá escrever uma consulta MySQL que possa retornar itens como nomes de medidas, nomes de chaves ou valores-chave que são mostrados como uma caixa de seleção suspensa.
Por exemplo, você pode ter uma variável que contenha todos os valores dahostname
coluna em uma tabela se especificar uma consulta como essa na configuração Consulta da variável de modelagem.
SELECT hostname FROM my_host
Uma consulta pode retornar várias colunas e o Grafana criará automaticamente uma lista a partir delas. Por exemplo, a consulta a seguir retornará uma lista com valores dehostname
hostname2
e.
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 de modelo deve ser definido como On Time Range.
SELECT event_name FROM event_log WHERE $__timeFilter(time_column)
Outra opção é uma consulta que pode criar uma variável chave/valor. A consulta deve retornar duas colunas com o nome__text
__value
e. O valor da__text
coluna 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 um ID como valor.
O exemplo de código a seguir mostra uma consulta comhostname
como texto eid
como 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 chamadaregion
. Então, você pode fazer com que a variável hosts mostre somente os hosts da região selecionada atual com uma consulta como essa (seregion
for uma variável de vários valores, use o operador deIN
comparação em vez de=
comparar vários valores).
SELECT hostname FROM my_host WHERE region IN($region)
Usando__searchFilter
para filtrar resultados na variável de consulta
O uso__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__searchFilter
expressão 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 pesquisahostname
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 de modelo são sempre citadas automaticamente, portanto, se for um valor de string, não as coloque entre aspas nas cláusulas where.
A partir do Grafana 4.7.0, os valores das variáveis de modelo são citados apenas quando a variável do modelo émulti-value
a.
Se a variável for uma variável de vários valores, use o operador deIN
comparação em vez de=
comparar vários valores.
Há duas sintaxes:
$<varname>
Exemplo com uma variável de modelo chamadahostname
:
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 chamadahostname
:
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
Desativando 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: seserver01
eserver02
for selecionado, ele será formatado como:'server01', 'server02'
. Para desativar a cotaçã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, consulteOpções de formato de variáveis avançadas.
Anotações
Você pode usar anotações para sobrepor informações ricas sobre eventos em cima dos gráficos. Você adiciona consultas de anotação por meio do menu Dashboard /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 tempo com valores de época.
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 de tempo e fim de tempo com valores de época.
nota
Disponível somente 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 nativo de data/hora do SQL.
SELECT native_date_time as time, metric1 as text, CONCAT(tag1, ',', tag2) as tags FROM public.test_data WHERE $__timeFilter(native_date_time)
Name (Nome) | Descrição |
---|---|
time
|
O nome do campo de data/hora. Pode ser uma coluna com um tipo de dados de data/hora do SQL nativo ou valor de época. |
timeend
|
Nome opcional do campo de data/hora de término. Pode ser uma coluna com um tipo de dados de data/hora do SQL nativo ou valor de época. |
text
|
Campo de descrição do evento. |
tags
|
Nome de campo opcional para uso de tags de eventos como uma string separada por vírgulas. |
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 suportadas em condições de regras de alerta.