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.
Escritura de consultas de expresiones
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 los espacios de trabajo de Grafana que admiten la versión 9.x de Grafana, consulte Uso de la versión 9 de Grafana.
Para los espacios de trabajo de Grafana que admiten la versión 8.x de Grafana, consulte Uso de la versión 8 de Grafana.
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 los orígenes 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 los orígenes de datos, aparte de llevar a cabo 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 Grafana Alerting. El procesamiento se efectúa en el servidor, por lo que las expresiones pueden funcionar sin una sesión de navegador. Sin embargo, las expresiones también se pueden usar con visualizaciones y orígenes de datos de backend.
nota
Las expresiones no funcionan con las alertas de los paneles antiguos.
Las expresiones están diseñadas para aumentar los orígenes de datos, ya que permiten combinar consultas de diferentes orígenes de datos o proporcionan operaciones que no están disponibles en un origen de datos.
nota
Siempre que sea posible, debe procesar los datos dentro del origen de datos. Copiar datos del almacenamiento al servidor de 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 orígenes 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 etiquetas.
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 B
por defecto).
Para hacer referencia al resultado de una expresión individual o a una consulta de origen de datos en otra expresión, este identificador se utiliza como variable.
Tipos de expresiones
Las expresiones funcionan con dos tipos de datos.
-
Una 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 origen 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 al origen de datos
Las expresiones del lado del servidor solo admiten consultas de orígenes de datos para orígenes de datos de backend. Por lo general, se supone que los datos están etiquetados como datos de serie temporal.
Las consultas al origen 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 un origen 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 serie temporal (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: matemática, reducción y remuestreo.
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.
Se hace referencia a los datos de otras consultas o expresiones con el prefijo RefID con un signo de dólar, por ejemplo, $A
. Si el nombre de la variable tiene espacios, puede 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 izquierda, como 072
) o hexadecimales (con un 0x a la izquierda, como 0x2A
). También se admiten exponenciales y signos (por ejemplo, -0.8e-2
).
Operadores
Se admiten los operadores aritméticos (+
, binarios y unarios -
, *
, /
, %
, exponentes **
), 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 serie temporal.
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
$A
y$B
son números, la operación se lleva a cabo entre los dos números. -
Si una variable es un número y la otra es una serie temporal, se lleva a cabo la operación entre el valor de cada punto de la serie temporal y el número.
-
Si
$A
y$B
son datos de serie temporal, la operación entre cada valor de las dos series se lleva a cabo para cada marca temporal que exista en$A
y$B
. La operaciónResample
se puede utilizar para alinear las marcas de tiempo.
Resumen:
-
Número <Operación> número = número
-
Número <Operación> serie = serie
-
Serie <Operación> serie = serie
Como las expresiones funcionan con varias series o números representados por una sola variable, las operaciones binarias también llevan a cabo una 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}
en $A
y otro número en $B
con las mismas etiquetas, la operación se lleva a cabo 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 elemento sin etiquetas se unirá a cualquier cosa.
-
Si
$A
y$B
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 como{host=A,dc=MIA}
y otro elemento$B
está etiquetado como{host=A}
, se unirán. -
Si dentro de una variable, como
$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 similares a los símbolos u 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 lleva a cabo para el valor de cada punto de la serie.
abs
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
para valores Inf
(negativos o positivos) y 0
para otros valores. Por ejemplo, is_inf($A)
.
nota
Si tiene que comprobar específicamente el infinito negativo, por ejemplo, puede hacer una comparación, como $A == infn()
.
is_nan
is_nan toma un número o una serie y devuelve 1
para valores NaN
y 0
para otros valores. Por ejemplo, is_nan($A)
. Esta función es necesaria para esta comprobación porque NaN
no es igual a NaN
.
is_null
is_null toma un número o una serie y devuelve 1
para valores null
y 0
para otros valores. Por ejemplo, is_null($A)
.
is_number
is_number toma un número o una serie y devuelve 1
para todos los valores numéricos reales y 0
para los demás valores (que son null
, Inf+
, Inf-
y NaN
). Por ejemplo, is_number($A)
.
log
Log devuelve el logaritmo natural de su argumento, que puede ser un número o una serie. Si el valor es inferior a 0, se devuelve NaN
. 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 efectuar pruebas. Ejemplo:null()
.
round
Redondear 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 al valor entero más cercano. Por ejemplo, floor(3.123
devuelve 3
.
Reducir
Reduce 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 (nulo, 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 el modo strict
, si algún valor de la serie es nulo o NaN, o si la serie está vacía, se devuelve NaN.
Min y Max
Min y Max devuelven el valor más pequeño o más alto de la serie, respectivamente. En el modo strict
, 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 el modo strict
, si algún valor de la serie es NaN o nulo, 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.
Eliminación de los valores no numéricos
En este modo, todos los valores no numéricos (nulo, NaN o +-Inf) de la serie de entrada se filtran antes de ejecutar la función de reducción.
Sustitución de los valores no numéricos
En este modo, todos los valores no numéricos se sustituyen por un valor predefinido.
Remuestreo
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 llevar a cabo operaciones matemáticas entre ellas. Para hacerlo, puede volver 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 serie temporal (refID, como
A
) que se va a volver a muestrear. -
Remuestreo a: el tiempo que se va a volver a muestrear, por ejemplo,
10s
. Las unidades pueden sers
para segundos,m
para minutos,h
para horas,d
para días,w
para semanas yy
para 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.
-
Aumento de muestreo: 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.
-
backfill con el siguiente valor conocido.
-
fillna para llenar ventanas de muestra vacías con NaN.
-
Escritura de una expresión
Si el origen de datos las admite, Grafana muestra el botón Expresión y muestra todas las expresiones existentes en la lista del editor de consultas.
Escritura de una expresión
-
Abra el panel.
-
Debajo de la consulta, seleccione Expresión.
-
En el campo Operación, seleccione el tipo de expresión que desee escribir.
-
Escriba la expresión.
-
Seleccione Apply.
Casos especiales
Cuando un origen de datos consultado no devuelve series ni números, el motor de expresiones devuelve NoData
. Por ejemplo, si una solicitud contiene dos consultas de origen de datos que se combinan mediante una expresión, si NoData
devuelve al menos una de las consultas de origen de datos, el resultado devuelto para toda la consulta es NoData
. Para obtener más información sobre cómo Grafana Alerting procesa los resultados de NoData
, consulte Configuración de las reglas de alertas administradas por 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 utilizan SELECT NOW() AS "time"
, la expresión solo funcionará si todas las consultas dan como resultado NOW()
para una marca de tiempo idéntica, lo que no siempre ocurre. Para resolver este problema, puede sustituir NOW()
por una hora arbitraria, como SELECT 1 AS "time"
, o por cualquier otra marca de tiempo válida de UNIX.