Operaciones básicas de InfluxDB

1. Introducción a InfluxDB

Base de datos de series de tiempo La versión de InfluxDB es una base de datos de series de tiempo que se especializa en el manejo de altas cargas de escritura y consultas. Se utiliza para almacenar datos de series de tiempo a gran escala y realizar análisis en tiempo real, incluidos datos de monitoreo de DevOps, indicadores de aplicaciones y sensores de IoT. .

caracteristica principal:

  • Almacenamiento de datos de alto rendimiento diseñado específicamente para datos de series temporales. El motor TSM proporciona funciones como lectura, escritura y compresión de datos a alta velocidad
  • Interfaz de consulta y escritura API HTTP simple y eficiente
  • Para los datos de series de tiempo, se adapta un lenguaje de consulta similar a SQL para consultar fácilmente datos agregados
  • Permite indexar etiquetas para lograr consultas rápidas y efectivas
  • Las políticas de retención de datos pueden invalidar de manera efectiva los datos antiguos de forma automática

Dos, instale y configure el acceso remoto

Instalar usando Docker

docker run -d -p 8083:8083 -p 8086:8086 --name my_influxdb influxdb

Ingrese al contenedor InfluxDB

hanxiantao$ docker exec -it my_influxdb bash

Abra la consola InfluxDB

root@31f5ad31806f:/# cd /usr/bin/
root@31f5ad31806f:/usr/bin# ./influx

Tres, modelo de datos de series de tiempo

Tomemos un ejemplo para ver el modelo de datos de InfluxDB.

> show databases
name: databases
name
----
_internal

Utilice el comando show database para ver toda la información actual de la base de datos, ya que se instaló recientemente, solo se ve la base de datos _internal en la salida

> create database devops_idc_sz
> show databases
name: databases
name
----
_internal
devops_idc_sz
> use devops_idc_sz
Using database devops_idc_sz

Crea y selecciona la base de datos devops_idc_sz

> insert cpu_usage,host=server01,location=cn-sz user=23.0,system=57.0
> show measurements
name: measurements
name
----
cpu_usage
> select * from cpu_usage
name: cpu_usage
time                host     location system user
----                ----     -------- ------ ----
1607760206416219500 server01 cn-sz    57     23

Inserte un registro en la tabla cpu_usage a través del comando insert, vea toda la información de la tabla actual en la base de datos devops_idc_sz a través del comando mostrar medidas y luego consulte los registros en la tabla cpu_usage a través del comando select

A diferencia de las bases de datos tradicionales, InfluxDB no necesita crear explícitamente una nueva tabla. Al insertar datos usando la declaración de inserción, InfluxDB creará automáticamente una nueva tabla de acuerdo con el formato de los datos de inserción y el nombre de la tabla especificada.

Modelo de datos de series de tiempo :

  • Hora : 1607760206416219500 en el caso, que representa la marca de tiempo cuando se generaron los datos
  • Tabla (medición) : cpu_usage en el caso indica un conjunto de datos de series de tiempo relacionados
  • Etiqueta : host = server01 y location = cn-sz en el caso se utilizan para crear índices y mejorar el rendimiento de las consultas
  • Indicadores (campo) : usuario = 23.0 y sistema = 57.0 en el caso, generalmente almacenan datos de series de tiempo específicas y no se crearán datos de índice
  • Registro de datos de series de tiempo (punto) : representa un registro de datos de series de tiempo específico, que se identifica de forma única por la línea de tiempo y la marca de tiempo
  • Política de retención : defina el tiempo de retención de datos de InfluxDB y la cantidad de copias de almacenamiento de datos
  • Línea de tiempo (serie) : representa un conjunto de datos con el mismo nombre de tabla, política de retención y conjunto de etiquetas.

Tres, escribe y consulta

1. Datos de importación y escritura de la API de InfuxDB

1) Escribir datos

Inserte la descripción de la imagen aquí

curl -g http://localhost:8086/write?db=devops_idc_sz -d "cpu_load_short,host=server01,region=us-west value=0.64,value2=0.86 1607763025000000000 
> cpu_load_short,host=server02,region=cn-sz value=0.52,value2=0.78 1607763143000000000"

Resultados de la escritura de la consulta :

> select * from cpu_load_short
name: cpu_load_short
time                host     region  value value2
----                ----     ------  ----- ------
1607763025000000000 server01 us-west 0.64  0.86
1607763143000000000 server02 cn-sz   0.52  0.78

Si los datos se escriben sin una marca de tiempo, InfluxDB utilizará el tiempo UTC local en nanosegundos como el tiempo para escribir los datos de forma predeterminada. Cuando sea necesario escribir varios datos en la misma base de datos y en la misma línea de serie temporal al mismo tiempo , cada dato debe traer una marca de tiempo; de lo contrario, los datos escritos más tarde sobrescribirán los datos anteriores

2) Importar datos

El contenido del archivo es el siguiente :

mem_usage,host_name=server1,region=us-west precent=26.79,value=2151672 1607764824000000000
mem_usage,host_name=server1,region=us-west precent=38.21,value=3068883 1607764905000000000
mem_usage,host_name=server1,region=us-west precent=42.66,value=3426290 1607764977000000000
mem_usage,host_name=server2,region=cn-sz precent=6.9,value=554182 1607764983000000000
mem_usage,host_name=server2,region=cn-sz precent=8.1,value=630561 1607765069000000000
mem_usage,host_name=server2,region=cn-sz precent=4.6,value=369454 1607765075000000000

Inserte la descripción de la imagen aquí

curl -g http://localhost:8086/write?db=devops_idc_sz --data-binary @./mem_usage.txt

Resultados de la importación de consultas :

> select * from mem_usage
name: mem_usage
time                host_name precent region  value
----                --------- ------- ------  -----
1607764824000000000 server1   26.79   us-west 2151672
1607764905000000000 server1   38.21   us-west 3068883
1607764977000000000 server1   42.66   us-west 3426290
1607764983000000000 server2   6.9     cn-sz   554182
1607765069000000000 server2   8.1     cn-sz   630561
1607765075000000000 server2   4.6     cn-sz   369454
  • De forma predeterminada, el período de tiempo de espera de la API de InfluxDB es de 5 segundos. Después del tiempo de espera, InfluxDB continuará escribiendo los datos, pero el solicitante no puede saber si los datos se escribieron correctamente debido al tiempo de espera.
  • Al escribir más de 5000 datos, se deben usar varias solicitudes HTTP para escribir datos en lotes

2. Consulta de InfluxQL

InfluxQL admite el uso de una sintaxis similar a SQL para consultas de datos, y muchos usos son similares a MySQL

1) instrucción SELECT

> select * from mem_usage
name: mem_usage
time                host_name precent region  value
----                --------- ------- ------  -----
1607764824000000000 server1   26.79   us-west 2151672
1607764905000000000 server1   38.21   us-west 3068883
1607764977000000000 server1   42.66   us-west 3426290
1607764983000000000 server2   6.9     cn-sz   554182
1607765069000000000 server2   8.1     cn-sz   630561
1607765075000000000 server2   4.6     cn-sz   369454
> select precent from mem_usage
name: mem_usage
time                precent
----                -------
1607764824000000000 26.79
1607764905000000000 38.21
1607764977000000000 42.66
1607764983000000000 6.9
1607765069000000000 8.1
1607765075000000000 4.6
> select * from mem_usage,cpu_usage
name: cpu_usage
time                host     host_name location precent region system user value
----                ----     --------- -------- ------- ------ ------ ---- -----
1607760206416219500 server01           cn-sz                   57     23   

name: mem_usage
time                host host_name location precent region  system user value
----                ---- --------- -------- ------- ------  ------ ---- -----
1607764824000000000      server1            26.79   us-west             2151672
1607764905000000000      server1            38.21   us-west             3068883
1607764977000000000      server1            42.66   us-west             3426290
1607764983000000000      server2            6.9     cn-sz               554182
1607765069000000000      server2            8.1     cn-sz               630561
1607765075000000000      server2            4.6     cn-sz               369454

2) declaración WHERE

> select * from mem_usage where precent > 30
name: mem_usage
time                host_name precent region  value
----                --------- ------- ------  -----
1607764905000000000 server1   38.21   us-west 3068883
1607764977000000000 server1   42.66   us-west 3426290
> select * from mem_usage where host_name = 'server1'
name: mem_usage
time                host_name precent region  value
----                --------- ------- ------  -----
1607764824000000000 server1   26.79   us-west 2151672
1607764905000000000 server1   38.21   us-west 3068883
1607764977000000000 server1   42.66   us-west 3426290

La cláusula WHERE de la marca de tiempo admite el tiempo absoluto y el tiempo relativo

> select * from mem_usage where host_name = 'server1' and time > now() - 1d
name: mem_usage
time                host_name precent region  value
----                --------- ------- ------  -----
1607764824000000000 server1   26.79   us-west 2151672
1607764905000000000 server1   38.21   us-west 3068883
1607764977000000000 server1   42.66   us-west 3426290

3) AGRUPAR POR

La cláusula GROUP BY agrupa los datos del resultado de la consulta de acuerdo con la etiqueta o el intervalo de tiempo especificado por el usuario.

> select * from mem_usage where time > '2020-12-12 00:00:00' and time < '2020-12-12 23:59:59' group by host_name
name: mem_usage
tags: host_name=server1
time                precent region  value
----                ------- ------  -----
1607764824000000000 26.79   us-west 2151672
1607764905000000000 38.21   us-west 3068883
1607764977000000000 42.66   us-west 3426290

name: mem_usage
tags: host_name=server2
time                precent region value
----                ------- ------ -----
1607764983000000000 6.9     cn-sz  554182
1607765069000000000 8.1     cn-sz  630561
1607765075000000000 4.6     cn-sz  369454

4) PEDIR POR

> select * from mem_usage where time > '2020-12-12 00:00:00' and time < '2020-12-12 23:59:59' group by host_name order by time desc
name: mem_usage
tags: host_name=server2
time                precent region value
----                ------- ------ -----
1607765075000000000 4.6     cn-sz  369454
1607765069000000000 8.1     cn-sz  630561
1607764983000000000 6.9     cn-sz  554182

name: mem_usage
tags: host_name=server1
time                precent region  value
----                ------- ------  -----
1607764977000000000 42.66   us-west 3426290
1607764905000000000 38.21   us-west 3068883
1607764824000000000 26.79   us-west 2151672

5) LÍMITE

La cláusula LIMIT se utiliza para devolver los primeros N registros de datos de series temporales de la consulta especificada

> select * from mem_usage where host_name = 'server1' order by time desc limit 3
name: mem_usage
time                host_name precent region  value
----                --------- ------- ------  -----
1607764977000000000 server1   42.66   us-west 3426290
1607764905000000000 server1   38.21   us-west 3068883
1607764824000000000 server1   26.79   us-west 2151672

6) SLIMIT

GROUP BY <expression> SLIMIT <N>

El parámetro N significa devolver las primeras N líneas de series de tiempo, es decir, la primera N del grupo GROUP BY

GROUP BY <expression> LIMIT <M> SLIMIT <N>

Cuando SLIMIT y LIMIT se utilizan juntos, significa devolver los primeros N grupos de líneas de series de tiempo de los resultados de la consulta, y cada grupo devuelve los primeros M registros de datos de series de tiempo

> select * from mem_usage group by * limit 3
name: mem_usage
tags: host_name=server1, region=us-west
time                precent value
----                ------- -----
1607764824000000000 26.79   2151672
1607764905000000000 38.21   3068883
1607764977000000000 42.66   3426290

name: mem_usage
tags: host_name=server2, region=cn-sz
time                precent value
----                ------- -----
1607764983000000000 6.9     554182
1607765069000000000 8.1     630561
1607765075000000000 4.6     369454
> select * from mem_usage group by * limit 3 slimit 1
name: mem_usage
tags: host_name=server1, region=us-west
time                precent value
----                ------- -----
1607764824000000000 26.79   2151672
1607764905000000000 38.21   3068883
1607764977000000000 42.66   3426290

7) DESPLAZAMIENTO

LIMIT <M> OFFSET <N>

La cláusula OFFSET debe usarse junto con la cláusula LIMIT para indicar que los primeros M registros de datos de series de tiempo que comienzan con el N-ésimo registro de datos de series de tiempo se devuelven del resultado de la consulta.

> select * from mem_usage group by * limit 3
name: mem_usage
tags: host_name=server1, region=us-west
time                precent value
----                ------- -----
1607764824000000000 26.79   2151672
1607764905000000000 38.21   3068883
1607764977000000000 42.66   3426290

name: mem_usage
tags: host_name=server2, region=cn-sz
time                precent value
----                ------- -----
1607764983000000000 6.9     554182
1607765069000000000 8.1     630561
1607765075000000000 4.6     369454
> select * from mem_usage group by * limit 3 offset 1
name: mem_usage
tags: host_name=server1, region=us-west
time                precent value
----                ------- -----
1607764905000000000 38.21   3068883
1607764977000000000 42.66   3426290

name: mem_usage
tags: host_name=server2, region=cn-sz
time                precent value
----                ------- -----
1607765069000000000 8.1     630561
1607765075000000000 4.6     369454

8) SOFFSET

GROUP BY <expression> SLIMIT <M> SOFFSET <N>

La cláusula SOFFSET debe usarse junto con la cláusula SLIMIT para indicar que a partir de la agrupación de líneas de series de tiempo del resultado de la consulta, se devuelve el primer grupo de líneas de series de tiempo M comenzando por el grupo Nth

> select * from mem_usage group by * limit 3 offset 1
name: mem_usage
tags: host_name=server1, region=us-west
time                precent value
----                ------- -----
1607764905000000000 38.21   3068883
1607764977000000000 42.66   3426290

name: mem_usage
tags: host_name=server2, region=cn-sz
time                precent value
----                ------- -----
1607765069000000000 8.1     630561
1607765075000000000 4.6     369454
> select * from mem_usage group by * limit 3 offset 1 slimit 1
name: mem_usage
tags: host_name=server1, region=us-west
time                precent value
----                ------- -----
1607764905000000000 38.21   3068883
1607764977000000000 42.66   3426290
> select * from mem_usage group by * limit 3 offset 1 slimit 1 soffset 1
name: mem_usage
tags: host_name=server2, region=cn-sz
time                precent value
----                ------- -----
1607765069000000000 8.1     630561
1607765075000000000 4.6     369454

9) Gramática del tiempo

Tiempo absoluto :

> select * from mem_usage where time = '2020-12-12T09:23:03Z'
name: mem_usage
time                host_name precent region value
----                --------- ------- ------ -----
1607764983000000000 server2   6.9     cn-sz  554182
> select * from mem_usage where time = 1607764983000000000
name: mem_usage
time                host_name precent region value
----                --------- ------- ------ -----
1607764983000000000 server2   6.9     cn-sz  554182
> select * from mem_usage where time = 1607764983s
name: mem_usage
time                host_name precent region value
----                --------- ------- ------ -----
1607764983000000000 server2   6.9     cn-sz  554182

Hora UTC = hora de Beijing-8 horas

Tiempo relativo :

> select * from mem_usage where time > now() - 12h
name: mem_usage
time                host_name precent region value
----                --------- ------- ------ -----
1607817064475612800 server3   7.2     cn-sz  585271

10) Función

Función agregada :

  • COUNT(): Devuelve el número de valores de índice no vacíos, admite DISTINCT()cláusulas anidadas
  • DISTINCT(): Deduplica el valor de índice especificado y devuelve el número de valores de índice después de la deduplicación
  • INTEGRAL(): Devuelve el valor del índice al área debajo de la línea, es decir, la integral
  • MEAN(): Devuelve el valor medio del valor del indicador.
  • MEDIAN(): Devuelve la mediana de los valores de índice ordenados.
  • MODE(): Devuelve el valor del índice con la frecuencia más alta. Si hay dos o más valores que aparecen la mayoría de las veces, devuelva el valor del indicador con la marca de tiempo más antigua.
  • SPREAD(): Devuelve la diferencia entre el valor de índice máximo y el valor de índice mínimo
  • STDDEV(): Devuelve la desviación estándar del valor del indicador.
  • SUM(): Devuelve la suma de los valores del indicador.

Vea el valor de fluctuación del uso de memoria por hora de cada máquina:

> select SPREAD(precent) from mem_usage group by host_name , time(1h) limit 1
name: mem_usage
tags: host_name=server1
time                spread
----                ------
1607763600000000000 15.869999999999997

name: mem_usage
tags: host_name=server2
time                spread
----                ------
1607763600000000000 3.5

name: mem_usage
tags: host_name=server3
time                spread
----                ------
1607814000000000000 0

Función de selección :

  • BOTTOM(): Devuelve los valores de índice N más pequeños
  • FIRST(): Devuelve el valor del indicador con la marca de tiempo más antigua.
  • LAST(): Devuelve el último valor del indicador de la marca de tiempo.
  • MAX(): Devuelve el valor del indicador más grande
  • MIN(): Devuelve el valor del indicador más pequeño
  • PERCENTILE(): Devuelve el valor del índice con un percentil de N
  • SAMPLE(): Devuelve N valores de indicador muestreados aleatoriamente
  • TOP(): Devuelve los valores de campo N más grandes

Vea el uso de memoria más alto por hora para cada máquina:

> select max(precent) from mem_usage group by host_name , time(1h) limit 1
name: mem_usage
tags: host_name=server1
time                max
----                ---
1607763600000000000 42.66

name: mem_usage
tags: host_name=server2
time                max
----                ---
1607763600000000000 8.1

name: mem_usage
tags: host_name=server3
time                max
----                ---
1607814000000000000 7.2

3. Datos de consulta de la API de InfuxDB

Vea el uso de memoria más alto por hora para cada máquina :

Inserte la descripción de la imagen aquí

InfluxQL requiere codificación URLEncode

curl -G http://localhost:8086/query?db=devops_idc_sz --data-urlencode "q=select max(precent) from mem_usage group by host_name , time(1h) limit 1"

Devolver resultado:

{
    
    
    "results": [
        {
    
    
            "statement_id": 0,
            "series": [
                {
    
    
                    "name": "mem_usage",
                    "tags": {
    
    
                        "host_name": "server1"
                    },
                    "columns": [
                        "time",
                        "max"
                    ],
                    "values": [
                        [
                            "2020-12-12T09:00:00Z",
                            42.66
                        ]
                    ]
                },
                {
    
    
                    "name": "mem_usage",
                    "tags": {
    
    
                        "host_name": "server2"
                    },
                    "columns": [
                        "time",
                        "max"
                    ],
                    "values": [
                        [
                            "2020-12-12T09:00:00Z",
                            8.1
                        ]
                    ]
                },
                {
    
    
                    "name": "mem_usage",
                    "tags": {
    
    
                        "host_name": "server3"
                    },
                    "columns": [
                        "time",
                        "max"
                    ],
                    "values": [
                        [
                            "2020-12-12T23:00:00Z",
                            7.2
                        ]
                    ]
                }
            ]
        }
    ]
}

Ejecute múltiples consultas : consulte el valor del índice y la cantidad correspondiente al porcentaje del índice en el registro de datos de la serie temporal con la región de us-west

Inserte la descripción de la imagen aquí

curl -G http://localhost:8086/query?db=devops_idc_sz --data-urlencode "q=select precent from mem_usage where region = 'us-west';select count(precent) from mem_usage where region = 'us-west'"

Devolver resultado:

{
    "results": [
        {
            "statement_id": 0,
            "series": [
                {
                    "name": "mem_usage",
                    "columns": [
                        "time",
                        "precent"
                    ],
                    "values": [
                        [
                            "2020-12-12T09:20:24Z",
                            26.79
                        ],
                        [
                            "2020-12-12T09:21:45Z",
                            38.21
                        ],
                        [
                            "2020-12-12T09:22:57Z",
                            42.66
                        ]
                    ]
                }
            ]
        },
        {
            "statement_id": 1,
            "series": [
                {
                    "name": "mem_usage",
                    "columns": [
                        "time",
                        "count"
                    ],
                    "values": [
                        [
                            "1970-01-01T00:00:00Z",
                            3
                        ]
                    ]
                }
            ]
        }
    ]
}

Cuatro, diseño de esquema (elija etiqueta o campo)

Comparación de etiqueta y campo :

  • la etiqueta está indexada pero el campo no
  • La etiqueta es una cadena y el campo admite tipos de datos como int y float (los tipos numéricos usan el sufijo i como un número entero y el valor predeterminado es float)

Elija usar la etiqueta :

  • Metadatos consultados con frecuencia
  • Necesita GRUPO POR

Elija usar el campo :

  • Para el cálculo de funciones
  • Sin cuerda

Cinco, certificación

1. Cree un usuario y habilite la autenticación

Crear usuario administrador

> show users
user admin
---- -----
> create user "root" with password '123456' with all privileges
> show users
user admin
---- -----
root true

Busque el archivo de configuración de InfuxDB en el contenedor

root@31f5ad31806f:/# cd /etc/influxdb/
root@31f5ad31806f:/etc/influxdb# ls
influxdb.conf

Instalar vim

root@31f5ad31806f:/etc/influxdb# apt-get update
root@31f5ad31806f:/etc/influxdb# apt-get install vim

Edite el archivo de configuración para habilitar la autenticación

[http]
  auth-enabled=true

Reiniciar InfluxDB

root@31f5ad31806f:/etc/influxdb# service influxdb restart

Aquí, cuando reinicié InfluxDB, mostró que el inicio falló, así que reinicié directamente el contenedor

Después de reiniciar, la función de seriedad se activa, InfuxDB solo procesará solicitudes HTTP y HTTPS autenticadas

2. Solicitud de certificación

En este momento, se llama a la solicitud anterior y se solicita el error de autenticación.

Inserte la descripción de la imagen aquí

1) Autenticar a través de la autenticación básica HTTP

Inserte la descripción de la imagen aquí

curl -G http://localhost:8086/query?db=devops_idc_sz -u root:123456 --data-urlencode "q=select precent from mem_usage where region = 'us-west';select count(precent) from mem_usage where region = 'us-west'"

2) Coloque la información de la credencial del usuario en la URL para la autenticación

uEspecifique el nombre de usuario y la Pcontraseña a través de los parámetros de solicitud

Inserte la descripción de la imagen aquí

Información recomendada :

Documento chino de InfluxDB: https://jasper-zhang1.gitbooks.io/influxdb/content/

Supongo que te gusta

Origin blog.csdn.net/qq_40378034/article/details/111112737
Recomendado
Clasificación