- O telegraf é o sistema que recupera, processa e dispara registros de fontes para os destinos.
O telegraf é dividido na seguinte estrutura:
- Configurações - Configurações gerais de comportamento
- Inputs - Processadores de Input que vão ler alguma estrutura de entrada, seja arquivo, banco ou log.
- Processors - Podem
- Aggregators
- Output
- Existe uma diferença grande sobre o InfluxDB 1 e 2, vamos manter nesse documento somente informações sobre a versão 2 para evitar confusão.
- O InfluxDB tem como finalidade principal ser um Hub de pesquisa e transformação permitindo que vc faça diversas pesquisas em fontes diversas, mesclando os resultados e calculando e entregando um resultado único.
- Bucket [Banco de dados]
- Measurement [Tabela]
- Tag [Campos indexados para filtro]
- Field/Value [Campos e valores para calculo]
Dica: É possível no Telegraf, tratar e transformar dados para chegar ao InfluxDB mais preparado: https://docs.influxdata.com/telegraf/v1.22/configure_plugins/aggregator_processor/
- Bucket - Seria como um banco de dados no servidor, que pode ter diversas estruturas internas a serem trabalhadas.
- Estrutura de pesquisa - Normalmente utiliza todas as estruturas abaixo, porém não é uma necessidade
- Source - Fonte da origem dos dados, pode ser InfluxDb, arquivo CSV, SQL e etc (Obrigatório).
- Filter - Filtro aplicado aos dados para recuperação e tratamento posterior. (Legal ter algum, nem que um filtro de data).
- Shape - Calculo aplicado, seja contagem, média, sumarização, agrupamento ou outros. (Opcional).
- Process - Processo final para retornar a estrutura dos dados (Obrigatorio).
Exemplo de estrutura:
from(bucket: "example-bucket") // ── Source
|> range(start: -1d) // ── Filter on time
|> filter(fn: (r) => r._field == "foo") // ── Filter on column values
|> group(columns: ["sensorID"]) // ── Shape
|> mean() // ── Process
É possível dentro do Influx explorar a estrutura de dados existente, como é efetuado no SQL.
Para listas os buckets (bancos) do servidor pode-se utilizar:
import "influxdata/influxdb/schema"
// List buckets
buckets()
Exibe a seguinte saida:
#group,false,false,false,false,true,false,false
#datatype,string,long,string,string,string,string,long
#default,_result,,,,,,
,result,table,name,id,organizationID,retentionPolicy,retentionPeriod
,,0,_monitoring,2d668a4439cfffe6,9d2d14719fae72dc,,604800000000000
,,0,_tasks,e5f03c53a670be12,9d2d14719fae72dc,,259200000000000
,,0,logs,2dddf3d5b2fe3aac,9d2d14719fae72dc,,604800000000000
Mais detalhes em: https://docs.influxdata.com/influxdb/cloud/query-data/flux/explore-schema/
- https://docs.influxdata.com/flux/v0.x/get-started/data-model/
- https://docs.influxdata.com/influxdb/cloud/organizations/buckets/bucket-schema
- Boas práticas gerais: https://www.influxdata.com/blog/data-layout-and-schema-design-best-practices-for-influxdb/
- Boas práticas na politica de retenção: https://www.influxdata.com/blog/simplifying-influxdb-retention-policy-best-practices/>
- Mais em: https://docs.influxdata.com/influxdb/cloud/organizations/buckets/bucket-schema/?t=sensor.ndjson
- Query simples como um
SELECT * FROM BANCO.TABELA
num Bucket do InfluxDB:
from(bucket: "BANCO")
|> range(start: -10h) // -- Filtro pegar registro das ultimas 10 horas
|> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value") // -- Transforma todas as estruturas de Chave/Valor da base em uma visão de tabela ("PIVOTANDO")
- Mais sobre a função pivot: https://docs.influxdata.com/flux/v0.x/stdlib/universe/pivot/
- Sobre resultados de busca: https://docs.influxdata.com/flux/v0.x/query-data/influxdb/#results-structure
- Query simples com filtro numa das colunas
SELECT * FROM BANCO.TABELA WHERE STATUS = "200"
:
from(bucket: "BANCO")
|> range(start: -10h)
|> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value")
|> filter(fn: (r) => r.http_status == "200") // -- Efetua o filtro na coluna "http_status" com valor "200"