Primeiro, vêm dois documentos oficiais:
https://www.taosdata.com/cn/documentation/connections-with-other-tools/#Grafana
https://grafana.com/docs/grafana/latest/
instalação grafana
Existem muitas maneiras de instalar, aqui está uma maneira mais conveniente, se você quiser tentar outras maneiras, consulte o site oficial
- baixar
wget https://dl.grafana.com/oss/release/grafana-7.3.5.linux-amd64.tar.gz
- Descompactar
tar -xzvf grafana-7.3.5.linux-amd64.tar.gz
- corre
cd grafana-7.3.5/
cd bin
./grafana-server
Até agora, executei com sucesso um grafana, abri o navegador e visitei http porta 3000, http://192.168.137.164:3000. O
nome de usuário padrão: admin, e a senha também é: admin.
Bem, a interface ainda parece legal.
Instalação TDengine
- Baixe
https://www.taosdata.com/download/download.php?key=$2y 10 101 0 lTACLBcR68nBkt5.Ki90nuWS9/e3HAHJ0MlpU6XVp0RCN2Tc9G3Hi&[email protected]&pkg=tdengine_tar&pkgIndex=-
2. 解压
tar -zxvf TDengine-server-2.0.9.0-Linux-x64.tar.gz
3. Instalação
Execute o script install.sh no diretório descompactado
sudo ./install.sh
A propósito, ao desinstalar, execute: rmtaos este comando fará
Até agora o TDengine foi instalado, podemos usar o comando taos para entrar no banco de dados para operação (o cliente é instalado por padrão quando o servidor é instalado)
Instale o plugin TDengine no grafana
- Copie todo o diretório do plugin grafana no diretório do pacote de instalação TDengine para o diretório do plugin grafana
cd /opt/grafana/grafana-7.3.5/data/plugins
cp -r /opt/taos/TDengine-server-2.0.9.0/connector/grafanaplugin/ ./TDengine
Os seguintes são renomeados aqui para facilitar a instalação de outros plug-ins no futuro, de modo a distinguir para onde os
plug-ins específicos são copiados, o que pode ser especificado no arquivo de configuração (padrão: conf / default.ini).
Ou especificado nos parâmetros de inicialização, por exemplo:
./grafana-server --homepath = / usr / share / grafana --config = / etc / grafana / grafana.ini --packaging = docker cfg: default.log.mode = console cfg: default.paths.data = / var / lib / grafana Isso especifica que o diretório de dados é / var / lib / grafana, então o plugin deve ser copiado para o diretório / var / lib / grafana / plugins
-
Reinicie o serviço de grafana
Ctrl + c para parar (ou finalize o processo de grafana) e, em seguida, use o comando ./grafana-server para iniciar -
Configure a fonte de dados da grafana como TDengine
Clique no botão Configurações na interface da web grafana para selecionar Fontes de Dados
Clique em Adicionar fonte de dados para adicionar uma fonte de dados
Encontre TDengine, clique em selecionar
Digite host: http: // localhost: 6041, aqui você precisa prestar atenção: a porta é 6041 em vez da 6030 usada pelo cliente para se conectar. O
usuário e a senha padrão são adequados.
Clique em Salvar e testar para salvar.
Até agora, a fonte de dados grafana TDengine está configurada
Crie uma tabela no TDengine e escreva alguns dados
- Conecte-se ao TDengine com o cliente
- Criar banco de dados
CREATE DATABASE power KEEP 365 DAYS 10 BLOCKS 4 UPDATE 1;
Crie uma biblioteca chamada power, os dados nesta biblioteca serão retidos por 365 dias (serão excluídos automaticamente se mais de 365 dias), um arquivo de dados a cada 10 dias, o número de blocos de memória é 4, permitindo que os dados sejam atualizados
- Mudar para a biblioteca recém-criada
USE power;
- Criar super mesa
CREATE TABLE sensor (ts timestamp, temp float, humi float) TAGS (location binary(64), groupdId int);
A primeira coluna deve ser um carimbo de data / hora (ts no exemplo), as outras colunas são as quantidades físicas coletadas (temp, humi no exemplo) e o tipo de dados pode ser inteiro, ponto flutuante, string, etc.
A supertabela define um tipo de quantidade física coletada pelo terminal, onde coletamos temperatura temp e umidade humi
- Criar a tabela
CREATE TABLE d1001 USING sensor TAGS ("Beijing.Chaoyang", 2);
Entre eles, d1001 é o nome da tabela, sensor é o nome da tabela da supertabela, seguido pelo valor específico da tag "Beijing.Chaoyang" da tag Location e o valor específico da tag groupId 2.
Uma tabela corresponde a um terminal, uma tabela armazena os dados coletados por um terminal e usa tags para identificar diferentes terminais
- Insira alguns dados
insert into d1001 values (now,12.01,34);
Muito simples, basicamente consistente com o SQL comumente usado
Crie um painel em grafana para exibir dados
Clique no sinal de mais e crie
Clique em Adicionar novo painel
Selecione a fonte de dados, aqui selecione a fonte de dados TDengine que acabou de adicionar
Insira a declaração de consulta de dados
select ts,temp from power.d1001 where ts >= $from and ts < $to
aqui. Observe que aqui deve haver o tempo de consulta e a quantidade física a ser exibida (isto é, ts, temp), que é a temperatura de exibição.
de, para e intervalo são variáveis integradas do plug-in TDengine, que representam o intervalo de consulta e o intervalo de tempo obtido no painel do plug-in Grafana
Defina o nome e a unidade da quantidade física exibida aqui
Aqui, defina o intervalo de tempo dos dados exibidos, atualize os dados e defina o intervalo de tempo para atualização automática
Até agora, exibimos os dados armazenados no TDengine com grafana.
Coleta e armazenamento de dados
O TDengine fornece uma variedade de SDKs. Podemos usar esses SDKs para armazenar os dados coletados pelo terminal na tabela de dados correspondente do TDengine. Aqui, usamos o Conector RESTful para armazenar os dados no TDengine.
Documento oficial: https://www.taosdata.com/cn/documentation/connector/#RESTful-Connector,
olhe primeiro o código:
func InsertToDtEngine(temp interface{
}, humi float32) (string, error) {
//http://192.168.137.164:6041/rest/sql
//insert into power.d1001 values (now,12.4,0);
sqltr:="insert into power.d1001 values (now,"+fmt.Sprint(temp)+","+fmt.Sprint(humi)+");"
logrus.Debug(sqltr)
req, err := http.NewRequest("POST", "http://192.168.137.164:6041/rest/sql", bytes.NewBuffer([]byte(sqltr)))
if err != nil {
logrus.Error(err)
return "", err
}
req.SetBasicAuth("root","taosdata")
req.Close = true
cli := createCli()
resp, er := cli.Do(req)
if er != nil {
logrus.Error(er)
return "", er
}
if resp.StatusCode < 200 || resp.StatusCode >=300 {
logrus.Error(fmt.Sprintf("statusCode:%v",resp.StatusCode))
return "",errors.New(fmt.Sprintf("statusCode:%v",resp.StatusCode))
}
defer resp.Body.Close()
respBytes, errr := ioutil.ReadAll(resp.Body)
if errr != nil {
logrus.Error(errr)
return "", errr
}
str := string(respBytes)
logrus.Debugf(fmt.Sprintf("Post url[%v] -> req[%v] -> rsp[%v]","http://192.168.137.164:6041/rest/sql", sqltr, str))
return str, nil
}
Este método usa as ferramentas relevantes no pacote http de go para chamar a interface restful do TDengine.
sqltr: = "inserir em valores power.d1001 (agora," + fmt.Sprint (temp) + "," + fmt.Sprint (humi) + ");" Este é o sql para inserir dados, você precisa preste atenção ao nome da tabela Adicione o nome do banco de dados
req.SetBasicAuth ("root", "taosdata") Isso significa usar a autenticação Básica
http://192.168.137.164:6041/rest/sql Esta é a interface tranquila para enviar instruções SQL
Por fim, vamos simular os dados coletados em tempo real:
r := rand.New(rand.NewSource(time.Now().UnixNano()))
for {
enthandler.InsertToDtEngine(r.Intn(100),4.5)//测试
time.Sleep(1 * time.Second)
}
Bem, neste ponto, podemos ver uma exibição da quantidade física do dispositivo coletado em tempo real na página da grafana.
Resumindo
1. O plugin grafana fornecido pelo TDengine deve ser copiado para o diretório grafana correto.
2. Ao adicionar um painel, deve-se estar atento aos resultados da consulta ao escrever sql, ou seja, o tempo e a quantidade física a ser exibida.
3. Aqui está apenas uma demonstração simples, mais recursos precisam ser explorados.