Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Escribe consultas de expresión
Este tema de documentación está diseñado para los espacios de trabajo de Grafana que admiten la versión 10.x de Grafana.
Para ver los espacios de trabajo de Grafana que admiten la versión 9.x de Grafana, consulte. Trabajando en Grafana versión 9
Para ver los espacios de trabajo de Grafana que admiten la versión 8.x de Grafana, consulte. Trabajando en Grafana versión 8
Las expresiones del lado del servidor permiten manipular los datos devueltos por las consultas mediante operaciones matemáticas y de otro tipo. Las expresiones crean datos nuevos y no manipulan los datos devueltos por las fuentes de datos.
Acerca de las expresiones
Las expresiones del lado del servidor permiten manipular los datos devueltos por las consultas mediante operaciones matemáticas y de otro tipo. Las expresiones crean datos nuevos y no manipulan los datos devueltos por las fuentes de datos, aparte de realizar una pequeña reestructuración de los datos para convertirlos en una entrada aceptable para las expresiones.
Uso de expresiones
Las expresiones son las más utilizadas por las alertas de Grafana. El procesamiento se realiza en el lado del servidor, por lo que las expresiones pueden funcionar sin una sesión de navegador. Sin embargo, las expresiones también se pueden usar con fuentes de datos y visualizaciones de backend.
nota
Las expresiones no funcionan con las alertas de los tableros de mandos antiguos.
Las expresiones están diseñadas para aumentar las fuentes de datos, ya que permiten combinar consultas de diferentes fuentes de datos o proporcionan operaciones que no están disponibles en una fuente de datos.
nota
Siempre que sea posible, debe procesar los datos dentro de la fuente de datos. Copiar datos del almacenamiento al servidor Grafana para su procesamiento es ineficiente, por lo que las expresiones están destinadas a un procesamiento de datos ligero.
Las expresiones funcionan con consultas de fuentes de datos que devuelven series temporales o datos numéricos. También funcionan con datos multidimensionales. Por ejemplo, una consulta que devuelve varias series, donde cada serie se identifica mediante rótulos o rótulos.
Una expresión individual toma una o más consultas u otras expresiones como entrada y agrega datos al resultado. Cada expresión o consulta individual se representa mediante una variable que es un identificador denominado refID (por ejemplo, la letra A
o por defectoB
).
Para hacer referencia al resultado de una expresión individual o a una consulta de fuente de datos en otra expresión, este identificador se utiliza como variable.
Tipos de expresiones
Las expresiones funcionan con dos tipos de datos.
-
Colección de series temporales.
-
Una colección de números, donde cada número es un elemento.
Cada colección se devuelve a partir de una única consulta o expresión de fuente de datos y se representa mediante el ReFid. Cada colección es un conjunto, en el que cada elemento del conjunto se identifica de forma única por sus dimensiones, que se almacenan como etiquetas o pares clave-valor.
Consultas a la fuente de datos
Las expresiones del lado del servidor solo admiten consultas de fuentes de datos para fuentes de datos de back-end. Por lo general, se supone que los datos están etiquetados como datos de series temporales.
Las consultas a la fuente de datos, cuando se utilizan con expresiones, las ejecuta el motor de expresiones. Cuando lo hace, reestructura los datos para que sean una serie temporal o un número por marco de datos. Por ejemplo, si utiliza una fuente de datos que devuelve varias series en un fotograma en la vista de tabla, puede que observe un aspecto diferente cuando se ejecuta con expresiones.
Actualmente, el único formato que no es de series temporales (número) que se admite cuando se utilizan marcos de datos es si se tiene una respuesta de tabla que devuelve un marco de datos sin hora, columnas de cadenas y una columna numérica:
La siguiente tabla de ejemplo produce un número que funciona con expresiones. Las columnas de cadenas se convierten en etiquetas y la columna numérica en el valor correspondiente. Por ejemplo, {"Loc": "MIA", "Host": "A"}
con un valor de 1.
Loc | Host | AVG_CPU |
---|---|---|
MIA |
A |
1 |
NYC |
B |
2 |
Operaciones
Puede usar las siguientes operaciones en las expresiones: matematizar, reducir y remuestrear.
Math (Matemática)
Las matemáticas son para fórmulas matemáticas de formato libre sobre series temporales o datos numéricos. Las operaciones matemáticas toman números y series temporales como entrada y los cambian por números y series temporales diferentes.
Por ejemplo, se hace referencia a los datos de otras consultas o expresiones con el prefijo RefID con un signo de dólar. $A
Si el nombre de la variable tiene espacios, puedes usar una sintaxis de corchetes similar a la siguiente. ${my
variable}
Las constantes numéricas pueden estar en decimal (2.24
), octal (con un cero a la izquierda072
) o hexadecimales (con un 0x a la izquierda). 0x2A
También se admiten exponenciales y signos (por ejemplo,). -0.8e-2
Operadores
Se admiten los operadores aritméticos (+
binarios y unarios -
*
,/
,%
,, exponente**
), relacionales (<
,>
,, ==
!=
>=
,<=
) y lógicos (&&
||
, y unarios). !
El comportamiento de la operación con los datos depende de si se trata de datos numéricos o de series temporales.
En las operaciones binarias, como $A + $B
o$A || $B
, el operador se aplica de las siguientes maneras según el tipo de datos:
-
Si ambos
$A
y$B
son números, la operación se realiza entre los dos números. -
Si una variable es un número y la otra es una serie temporal, se realiza la operación entre el valor de cada punto de la serie temporal y el número.
-
Si ambos
$A
y$B
son datos de series temporales, la operación entre cada valor de las dos series se realiza para cada marca temporal que exista en ambos$A
y$B
. LaResample
operación se puede utilizar para alinear las marcas de tiempo.
Resumen:
-
Número <Operation>número = número
-
<Operation>Serie numérica = serie
-
Serie <Operation>serie = serie
Como las expresiones funcionan con varias series o números representados por una sola variable, las operaciones binarias también realizan una unión (unión) entre las dos variables. Esto se hace en función de las etiquetas de identificación asociadas a cada serie o número individual.
Por lo tanto, si tiene números con etiquetas como «{host=web01}
in» $A
y otro número «IN» $B
con las mismas etiquetas, la operación se realiza entre esos dos elementos dentro de cada variable y el resultado compartirá las mismas etiquetas. Las reglas para el comportamiento de esta unión son las siguientes:
-
Un artículo sin etiquetas se unirá a cualquier cosa.
-
Si
$B
ambos$A
contienen solo un elemento (una serie o un número), se unirán. -
Si las etiquetas coinciden exactamente, se unirán.
-
Si las etiquetas son un subconjunto de las demás, por ejemplo, si un elemento
$A
está etiquetado{host=A,dc=MIA}
y otro elemento$B
está etiquetado, se{host=A}
unirán. -
Si dentro de una variable, por ejemplo,
$A
hay diferentes claves de etiqueta para cada elemento, el comportamiento de unión no está definido.
Los operadores lógicos y relacionales devuelven 0 si es falso y 1 si es verdadero.
Funciones matemáticas
Si bien la mayoría de las funciones se encuentran en las propias operaciones de expresión, la operación matemática tiene algunas funciones que son similares a los símbolos o operadores matemáticos. Cuando las funciones pueden tomar números o series, se devolverá el mismo tipo que el argumento. Cuando se trata de una serie, la operación se realiza para el valor de cada punto de la serie.
abdominales
abs devuelve el valor absoluto de su argumento, que puede ser un número o una serie. Por ejemplo, abs(-1)
o abs($A)
.
is_inf
is_inf toma un número o una serie y devuelve 1
Inf
valores (negativos o positivos) y 0
otros valores. Por ejemplo, is_inf($A)
.
nota
Si necesitas comprobar específicamente el infinito negativo, por ejemplo, puedes hacer una comparación como: $A == infn()
is_nan
is_nan toma un número o una serie y devuelve valores y 1
0
otros NaN
valores. Por ejemplo, is_nan($A)
. Esta función es necesaria para esta comprobación porque no NaN
es igual a. NaN
es_null
is_null toma un número o una serie y devuelve valores y 1
0
otros null
valores. Por ejemplo, is_null($A)
.
es_número
is_number toma un número o una serie y devuelve todos 1
los valores numéricos reales y 0
los demás valores (que sonnull
,Inf+
, Inf-
y). NaN
Por ejemplo, is_number($A)
.
registro
Log devuelve el logaritmo natural de su argumento, que puede ser un número o una serie. Si el valor es menor que 0, NaN
se devuelve. Por ejemplo, log(-1)
o log($A)
.
inf, infn, nan y null
Todas las funciones inf, infn, nan y null devuelven un único valor del nombre. Existen principalmente para realizar pruebas. Ejemplo:null()
.
round
Round devuelve un valor entero redondeado. Por ejemplo, round(3.123)
o round($A)
.
ceil
Ceil redondea el número al valor entero más cercano. Por ejemplo, ceil(3.123)
devuelve 4
.
floor
Floor redondea el número hacia abajo al valor entero más cercano. Por ejemplo,floor(3.123
) devuelve3
.
Reducir
Reducir toma una o más series temporales devueltas por una consulta o expresión y convierte cada serie en un único número. Las etiquetas de la serie temporal se mantienen como etiquetas en cada número reducido generado.
Campos:
-
Función: la función de reducción que se va a utilizar
-
Entrada: la variable (RefID (como
A
)) que se va a volver a muestrear -
Modo: permite controlar el comportamiento de la función de reducción cuando una serie contiene valores no numéricos (null, NaN, +-Inf)
Funciones de reducción
Recuento
El recuento devuelve el número de puntos de cada serie.
Mean
La media devuelve el total de todos los valores de cada serie dividido por el número de puntos de esa serie. En strict
modo, si algún valor de la serie es nulo o nan, o si la serie está vacía, se devuelve NaN.
Mín y máximo
Mín y Max devuelven el valor más pequeño o más alto de la serie, respectivamente. En strict
modo, si algún valor de la serie es nulo o nan, o si la serie está vacía, se devuelve NaN.
Sum (Suma)
La suma devuelve el total de todos los valores de la serie. Si la serie tiene una longitud cero, la suma será 0. En strict
el modo, si hay valores NaN o Null en la serie, se devuelve NaN.
Último
Last devuelve el último número de la serie. Si la serie no tiene valores, devuelve NaN.
Modos de reducción
Estricto
En el modo estricto, la serie de entrada se procesa tal cual. Si algún valor de la serie no es numérico (null, NaN o +-Inf), se devuelve NaN.
Elimine los valores no numéricos
En este modo, todos los valores no numéricos (null, NaN o +-Inf) de la serie de entrada se filtran antes de ejecutar la función de reducción.
Sustituya los no numéricos
En este modo, todos los valores no numéricos se sustituyen por un valor predefinido.
Remuestrear
El remuestreo cambia las marcas de tiempo de cada serie temporal para tener un intervalo de tiempo coherente. El caso de uso principal es volver a muestrear series temporales que no comparten las mismas marcas temporales para poder realizar operaciones matemáticas entre ellas. Esto se puede hacer volviendo a muestrear cada una de las dos series y, a continuación, mediante una operación matemática que haga referencia a las variables remuestreadas.
Campos:
-
Entrada: la variable de los datos de series temporales (RefID (como
A
)) que se va a volver a muestrear -
Remuestrear a: el tiempo que se va a volver a muestrear, por ejemplo.
10s
Las unidades pueden sers
m
segundos, minutos,h
horas,d
días,w
semanas yy
años. -
Reducción de muestreo: función de reducción que se utiliza cuando hay más de un punto de datos por muestra de ventana. Consulte la operación de reducción para obtener detalles sobre el comportamiento.
-
Upsample: el método que se utiliza para rellenar una muestra de ventana que no tiene puntos de datos.
-
pad se rellena con el último valor conocido
-
rellenar con el siguiente valor conocido
-
rellene para llenar las ventanas de muestra vacías con NaNs
-
Escribe una expresión
Si su fuente de datos las admite, Grafana muestra el botón Expresión y muestra todas las expresiones existentes en la lista del editor de consultas.
Para escribir una expresión
-
Abre el panel.
-
Debajo de la consulta, selecciona Expresión.
-
En el campo Operación, seleccione el tipo de expresión que desee escribir.
-
Escribe la expresión.
-
Seleccione Apply.
Casos especiales
Cuando una fuente de datos consultada no devuelve series ni números, vuelve NoData
el motor de expresiones. Por ejemplo, si una solicitud contiene dos consultas de fuente de datos que se combinan mediante una expresión, si NoData
la devuelve al menos una de las consultas de fuente de datos, el resultado devuelto para toda la consulta esNoData
. Para obtener más información sobre cómo Grafana Alerting procesa los NoData
resultados, consulte. Configurar las reglas de alertas gestionadas de Grafana
En el caso de utilizar una expresión en varias consultas, el motor de expresiones requiere que todas las consultas devuelvan una marca de tiempo idéntica. Por ejemplo, si se utilizan las matemáticas para combinar el resultado de varias consultas SQL que utiliza cada una de ellasSELECT NOW() AS "time"
, la expresión solo funcionará si todas las consultas dan como resultado NOW()
una marca de tiempo idéntica, lo que no siempre ocurre. Para resolver este problema, puede sustituirla por NOW()
una hora arbitraria, por ejemploSELECT 1 AS "time"
, o por cualquier otra marca de tiempo válida de UNIX.