Conecte-se a uma fonte de dados MySQL - Amazon Managed Grafana

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á.

Conecte-se a uma fonte de dados 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, o resultado de uma consulta de série temporal é retornado em um formato amplo. Para obter mais informações, consulte Formato amplo na documentação dos quadros de dados da Grafana.

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.

Adicionando a fonte de dados

  1. Abra o menu lateral escolhendo o ícone Grafana no cabeçalho superior.

  2. No menu lateral abaixo do link Painéis, você deve encontrar um link chamado Fontes de dados.

  3. Escolha o botão + Adicionar fonte de dados no cabeçalho superior.

  4. Selecione MySQL na lista suspensa Tipo.

Opções de fonte de dados

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 do 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ã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, padrão 14400 /4 horas. Isso sempre deve ser menor do que o wait_timeout configurado no MySQL (Grafana v5.4+).

Intervalo de tempo mínimo

Um limite inferior para as $_interval $_interval_ms variáveis. É recomendável 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 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). Os seguintes identificadores de horário são suportados.

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

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. Grafana não valida se a consulta é segura. A consulta pode incluir qualquer instrução SQL. Por exemplo, declaraçõ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 quiser.

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-a e ela se expandirá e mostrará a string SQL bruta interpolada 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 tenta pré-preencher o construtor de consultas com a primeira tabela que tem uma coluna de carimbo de data/hora 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), como. otherDb.metrics

O campo da coluna Hora se refere ao nome da coluna que contém seus valores de tempo. Selecionar um valor para o campo Coluna métrica é opcional. Se um valor for selecionado, o campo Coluna métrica será usado como nome da série.

As sugestões de coluna 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 métrica, você pode inserir o nome da coluna com um elenco:CAST(numericColumn as CHAR). Você também pode inserir expressões SQL arbitrárias no campo da coluna métrica que sejam avaliadas como um tipo de dados de texto, comoCONCAT(column1, " ", CAST(numericColumn as CHAR)).

Colunas e funções de agregação (SELECT)

Na SELECT 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 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 Column menu. Várias colunas de valores serão plotadas como séries separadas no painel gráfico.

Filtrando dados (WHERE)

Para adicionar um filtro, escolha o ícone de adição à direita da WHERE 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á 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 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

Grafana pode preencher os valores ausentes quando você agrupa por horário. 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 de editor de texto (raw)

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 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 especificada. 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 na Grafana 5.3+).
$__timeGroupAlias(dateColumn,'5m') Será substituído de forma idêntica$__timeGroup, mas por um alias de coluna adicionado (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 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 timestamp Unix. Por exemplo, 1494410783.
$__unixEpochTo() Será substituído pelo final da seleção de hora atualmente ativa como timestamp 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 pelo final da seleção de tempo atualmente ativa como timestamp de nanossegundos. Por exemplo, 1494497183142514872.
$__unixEpochGroup(dateColumn,"5m", [fillmode]) O mesmo que para horários armazenados como timestamp Unix (disponível $__timeGroup 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 SQL gerado que aparece após a execução de uma consulta, no modo de edição do painel. Escolha-a e ela se expandirá e mostrará a string SQL bruta interpolada que foi executada.

Consultas de tabela

Se a opção Formatar como consulta 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 de seleção de coluna as SQL normal.

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 chamada time que retorne uma data e hora SQL ou qualquer tipo de dados numéricos representando a época do Unix. Qualquer coluna, exceto time e metric é tratada como uma coluna de valor. Você pode retornar uma coluna chamada metric 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 a metric 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

Não há suporte para um grupo dinâmico por tempo com base no intervalo de tempo e na largura do painel.

Modelagem

Em vez de codificar itens como nome do servidor, do aplicativo e 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 modelos 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 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 hostname 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 de hostname 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) na sua consulta, o modo de atualização da variável do modelo deve ser definido como On Time Range Change.

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 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 uma ID como valor.

O exemplo de código a seguir mostra uma consulta com hostname texto e id 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. Em seguida, você pode fazer com que a variável hosts mostre somente os hosts da região selecionada atualmente com uma consulta como essa (se region for uma variável de vários valores, use o operador de IN comparação em vez de = comparar com vários valores).

SELECT hostname FROM my_host WHERE region IN($region)

Usando __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 __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 pesquisa hostname enquanto o usuário digita na caixa de seleção suspensa.

SELECT hostname FROM my_host WHERE hostname LIKE '$__searchFilter'

Usando variáveis em consultas

Do Grafana 4.3.0 ao 4.6.0, as variáveis do modelo são sempre citadas 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ão citados apenas quando a variável do modelo é a. multi-value

Se a variável for uma variável de vários valores, use o operador de IN comparação em vez de = comparar com 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

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 for selecionado, ele será 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 as opções de formatação de variáveis, consulteOpções avançadas de formato variável.

Anotações

Você pode usar anotações para sobrepor informações ricas sobre eventos aos gráficos. Você adiciona consultas de anotação por meio do menu Dashboard /Visualização de anotações. Para ter 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 hora e fim de tempo com valores de época.

nota

Disponível apenas na 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/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 campo de data/hora. Pode ser uma coluna com um tipo de dados SQL nativo de data/hora ou valor de época.
timeend Nome opcional do campo de data/hora de término. Pode ser uma coluna com um tipo de dados SQL nativo de data/hora ou valor de é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 suportadas em condições de regras de alerta.