Muchas de las métricas que se pueden recolectar de un sistema operativo o servicio suelen ser contadores. Por ejemplo cantidad de bytes enviados, cantidad de bytes recibidos, tiempo total de uso de CPU de un proceso, bytes leídos, bytes escritos, etc. Estos valores representan totales acumulados en lugar de mediciones puntuales (gauges). Es decir, se trata de métricas que representan un valor acumulado en lugar de una medida de una variable en un cierto instante de tiempo, y no representan lo que está sucediendo en el momento en que se leen.

Haciendo una analogía con el mundo real, se podría comparar con el tablero de un automóvil. El velocímetro es un dispositivo de medición (gauge) que indica la velocidad a la que se mueve el vehículo, mientras que el odómetro indica los kilómetros totales recorridos. Por su naturaleza, al ser un valor total acumulado, el odómetro no dice nada acerca de cuántos kilómetros recorrió el vehículo en el último período de tiempo.

Los contadores son valores que comienzan en cero y aumentan a medida que pasa el tiempo. Con lo cual, al tomar muestras y graficar se obtiene siempre una curva ascendente. Sin embargo se dificulta discriminar períodos de tiempo en los que el contador aumentó significativamente, por ejemplo. Volviendo al ejemplo del automóvil, digamos que sería más útil medir cuántos kilómetros se acumularon desde la última medición, en lugar que desde que el vehículo salió de la fábrica. Esto equivale a medir deltas en lugar del total acumulado, información que se pierde al mantener un sistema un único contador que se va sobrescribiendo en cada medición.

Este artículo explica cómo graficar deltas (o diferencias) en lugar de totales de contadores en grafana cuando se visualizan datos de una serie de tiempo InfluxDB.

Quienes cuenten con conocimientos matemáticos básicos sabrán que transformar una función cualquiera a deltas o diferencias a lo largo de un período es lo que hace precisamente la derivada de una función.

Definición de derivada de Wikipedia en español:

En matemáticas, la derivada de una función mide la rapidez con la que cambia el valor de dicha función matemática, según cambie el valor de su variable independiente.

En el ejemplo del tablero del automóvil, la derivada del odómetro según el tiempo equivale a la velocidad con la que se mueve el vehículo. Nuestro objetivo sería entonces graficar la velocidad, pero el "tablero de instrumentos" de nuestro sistema sólo nos ofrece el odómetro, no hay velocímetro.

Afortunadamente, cuando se almacena una medición en una serie de tiempo InfluxDB, el lenguaje InfluxQL permite calcular la derivada sobre los valores obtenidos en una consulta.

Veamos directamente un ejemplo. Un caso típico de métricas en forma de contadores son precisamente los contadores de iptables. El kernel Linux lleva la cuenta de cuántos paquetes y cuantos bytes han sido procesados por cada regla del firewall. Si se toman muestras periódicas de estos contadores y se genera una grafica a lo largo del tiempo, se obtiene una curva ascendente.

Por ejemplo, si se cuenta la cantidad de paquetes procesados relacionados a conexiones establecidas:

La consulta que genera esta gráfica es la siguiente:

Se observa que se está seleccionando la media para cada valor del campo "value" y se agrupa según el intervalo de tiempo especificado por Grafana.

Con este tipo de gráfica se dificulta ver picos de conexiones establecidas en intervalos de tiempo. Habría que tratar de identificar rampas pronunciadas en la curva ascendente, pero no es algo comprensible ni fácilmente identificable a simple vista.

Para convertir el contador a diferencias a lo largo del tiempo, aplicar la transformación de derivada provista por el lenguaje InfluxQL. En la cláusula SELECT aplicar "Transformations > derivative":

Esta función toma como parámetro una unidad de tiempo que determina la duración de las diferencias. En este caso se calculan las diferencias del contador cada 10 segundos.

El resultado de aplicar esta transformación es la siguiente gráfica:

Así es posible visualizar las conexiones establecidas según las métricas de iptables de forma elegante.

Referencias


Tal vez pueda interesarte


Compartí este artículo