Tablero de Grafana para el sistema de cerveza BeerTender

Explicación BeerTender: un dispositivo para enfriar y embotellar cerveza de Krups y Heineken. Según los fabricantes, mantiene la calidad de la cerveza fresca durante 30 días después de la apertura del barril. Por supuesto, es conveniente para los administradores de sistemas y desarrolladores controlar la temperatura y el nivel de cerveza en su barril utilizando los paneles habituales en línea. El artículo anterior describía cómo conectar BeerTender a Warp 10 , y ahora configuraremos el panel de Grafana



OVHcloud, el proveedor de alojamiento y nube más grande de Europa, utiliza activamente la plataforma Warp 10. Todos sus datos de monitoreo fluyen en un clúster Warp 10. ¡Son 400,000 servidores, 27 centros de datos, un total de varios millones de métricas por segundo!

Tienen muchos paneles, y ahora OVHcloud es el encargado de mantener el plugin de código abierto Warp 10 Grafana , que comenzamos a desarrollar hace algún tiempo. Hablaremos de él. Si desea probarlo usted mismo, los datos están en el dominio público; puede copiar WarpScript a continuación.


Ya hablamos sobre cómo conectar BeerTender a Warp 10.

Instalación


Primero, instala Grafana. Siga las instrucciones en su sitio web .

Nos conectamos a la http://localhost:3000/ predeterminada http://localhost:3000/ , vaya a la contraseña predeterminada admin / admin, luego cambie la contraseña del administrador.

Para la última versión de Grafana, el complemento deberá instalarse manualmente. El método con grafana-cli no funcionará. Solo necesita clonar el repositorio de complementos en el directorio de complementos de Grafana y corregir los permisos en todas partes.

 sudo systemctl stop grafana-server.service sudo chown -R grafana:mygroup /var/lib/grafana/ sudo chmod g+rw /var/lib/grafana/plugins git clone git@github.com:ovh/ovh-warp10-datasource.git /var/lib/grafana/plugins/ovh-warp10-datasource sudo chown -R grafana:mygroup /var/lib/grafana/plugins sudo systemctl start grafana-server.service 

Configuracion


En la configuración de Grafana, vaya a la sección Fuentes de datos y agregue una fuente de datos de tipo Warp 10. Asegúrese de que apunte a la instancia requerida de Warp 10. Puede especificar la misma configuración que la nuestra:



Es hora de tomar datos del BeerTender ...

Visualización de la temperatura


Cree un nuevo panel de control, agregue un panel con el tipo de visualización Graph e ingrese al modo Consultas:


Temperatura inicial (valores enteros del sensor)

  • En la fuente de datos, seleccione Warp 10 (o el valor predeterminado)
  • Encienda el editor WarpScript
  • Copie WarpScript a continuación
  • En la esquina superior derecha, seleccione "Últimos 30 días"
  • Guarda el resultado

 "gCA1SVjbDkaxtmTx9ydI4TI2iGc5hFgcbCWnzMRZSt45XW8dZ53Z7VK_if28i0kXwNDLazXHgLrXUKgxLK0RbS79eJmBCpyBlIxw9US7bPfdWH4Fta51.kXN.D4Hsk5OZOwl.vLRBzMpP7F2pAMfclMXSGtCOT6F" 'rt' STORE [ $rt 'beertender.rawtemperature' {} NOW 30 d ] FETCH 0 GET 

Este script mostrará los valores iniciales del sensor ADC. Tenga en cuenta que el editor WarpScript en Grafana no es tan poderoso como antes, no hay más autocompletado aquí. Puede escribir un script en WarpStudio o VSCode, por lo que tendrá resaltado de sintaxis y documentación en línea, y luego copiará y pegará el resultado en Grafana.

Espaciado automático


En este ejemplo, seleccione el intervalo de 30 días y establezca el modo de visualización en gráfico durante los últimos 30 días. Si seleccionamos el modo de vista para el último día o año, WarpScript siempre solicitará datos cada 30 días. El complemento resuelve este problema: hay dos variables disponibles para usar en WarpScript: $end e $interval .

 [ $rt 'beertender.rawtemperature' {} $end $interval ] FETCH 0 

Temperatura de la cerveza


Tomé varias medidas de agua, hielo y agua caliente, comparándolas con un sensor de referencia ... El resultado fue el siguiente:

  T (° C) valor inicial
 18,3 680
 41,5 870
 37,6 841
 10 586
 11 596
 8 559
 1,467
 4,500
 6.5 535 

Inserte estos valores en la serie temporal de GTS y ordene el resultado por los valores iniciales del sensor:

 NEWGTS 'linearInterpolation' RENAME 680 NaN NaN NaN 18.3 ADDVALUE 870 NaN NaN NaN 41.5 ADDVALUE 841 NaN NaN NaN 37.6 ADDVALUE 586 NaN NaN NaN 10 ADDVALUE 596 NaN NaN NaN 11 ADDVALUE 559 NaN NaN NaN 8 ADDVALUE 467 NaN NaN NaN 1 ADDVALUE 500 NaN NaN NaN 4.5 ADDVALUE 535 NaN NaN NaN 6.5 ADDVALUE SORT 


Interpolación esperada

La fuente de datos del sensor viene en forma de enteros. La forma más fácil de interpolar es construir primero la curva, y luego usar la función ATTICK para leer los valores en grados.

La interpolación en WarpScript es fácil. Hacemos un cubo para establecer el período deseado, y luego comenzamos la interpolación, completando los valores faltantes.

 [ $linearInterpolation bucketizer.last 0 1 0 ] BUCKETIZE 0 GET INTERPOLATE 'truthtableGTS' STORE 




Genial Ahora debe escribir su propio mapeador para reemplazar cada valor del sensor con un valor real de temperatura física y llevar el resultado al formato utilizado por el grafano.

Advertencia : los valores llegan cada 10 segundos. En tres meses, se acumularán 270 mil valores. Demasiado para Grafana ... Solo mantén el valor máximo de cada hora. En WarpScript, esto es BUCKETIZE con el bucketizer.max bucketizer .

Puede copiar este WarpScript en Grafana:

 // raw value interpolation "gCA1SVjbDkaxtmTx9ydI4TI2iGc5hFgcbCWnzMRZSt45XW8dZ53Z7VK_if28i0kXwNDLazXHgLrXUKgxLK0RbS79eJmBCpyBlIxw9US7bPfdWH4Fta51.kXN.D4Hsk5OZOwl.vLRBzMpP7F2pAMfclMXSGtCOT6F" 'rt' STORE NEWGTS 'linearInterpolation' RENAME 680 NaN NaN NaN 18.3 ADDVALUE 870 NaN NaN NaN 41.5 ADDVALUE 841 NaN NaN NaN 37.6 ADDVALUE 586 NaN NaN NaN 10 ADDVALUE 596 NaN NaN NaN 11 ADDVALUE 559 NaN NaN NaN 8 ADDVALUE 467 NaN NaN NaN 1 ADDVALUE 500 NaN NaN NaN 4.5 ADDVALUE 535 NaN NaN NaN 6.5 ADDVALUE SORT 'linearInterpolation' STORE [ $linearInterpolation bucketizer.last 0 1 0 ] BUCKETIZE 0 GET INTERPOLATE 'truthtableGTS' STORE [ $rt 'beertender.rawtemperature' {} NOW $end $interval ] FETCH // subsampling, keep max of every hour [ SWAP bucketizer.max 0 1 h 0 ] BUCKETIZE UNBUCKETIZE // do not try to interpolate missing buckets. // interpolation [ SWAP <% 'l' STORE [ $l 0 GET //same tick NaN NaN NaN //no latitude/longitude/elevation $truthtableGTS $l 7 GET 0 GET ATTICK 4 GET //take the interpolated value ] %> MACROMAPPER 0 0 0 ] MAP 'temperature (°C)' RENAME 


5 ° C, normal para cerveza


Tablero BeerTender, primera versión

Nivel de barril


El medidor de tensión mide el nivel en el barril ... Pero este es un sensor de tres cables barato en un soporte de metal oxidado. No es posible obtener información precisa de dicho equipo. Por lo tanto, no es sorprendente que la salida sea realmente un resultado ruidoso y que no se pueda confiar en los valores absolutos. Para nuestro BeerTender, encontré una fórmula experimental para Grafana para mostrar el nivel actual como un porcentaje.

Consejo: El complemento Warp 10 solo recupera datos de GTS. Incluso si desea mostrar un solo valor, debe presentarlo en un punto de los datos GTS.

Aquí está WarpScript, que toma el último punto de datos y lo convierte en un valor porcentual, y también crea una serie de tiempo con un punto:

 "gCA1SVjbDkaxtmTx9ydI4TI2iGc5hFgcbCWnzMRZSt45XW8dZ53Z7VK_if28i0kXwNDLazXHgLrXUKgxLK0RbS79eJmBCpyBlIxw9US7bPfdWH4Fta51.kXN.D4Hsk5OZOwl.vLRBzMpP7F2pAMfclMXSGtCOT6F" 'rt' STORE //read for beer level [ $rt 'beertender.rawvalue' {} NOW -1 ] FETCH 0 GET VALUES 0 GET 'rawSensorValue' STORE //raw correction: // empty: 30.8e6 // full (and cold): 30.5e6 30.8e6 $rawSensorValue - 0 MAX 2800 / 100 MIN 'beerlevelPercent' STORE $beerlevelPercent NEWGTS 'Barre Level (%25)' RENAME 1 NaN NaN NaN $beerlevelPercent ADDVALUE 

Utilice este WarpScript como solicitud de un panel con un tipo de visualización de indicador:


Buen indicador

Si está interesado, puede consultar los datos de origen ... ¡Ahora tenemos un token para acceder a estadísticas únicas sobre el consumo de cerveza!

Conclusiones



Source: https://habr.com/ru/post/477870/


All Articles