# Instalación de telegram en una beagle Instalar telegram haciendo: ``` # influxdata-archive_compat.key GPG Fingerprint: 9D539D90D3328DC7D6C8D3B9D8FF8E1F7DF8B07E curl -s https://repos.influxdata.com/influxdata-archive_compat.key > influxdata-archive_compat.key echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list sudo apt-get update && sudo apt-get install telegraf ``` También se pueden seguir las instrucciones de instalación en el siguiente enlace: https://docs.influxdata.com/telegraf/v1/install/ Vamos a configurar `telegraf` para que recoja cada una de las líneas que se vayan añadiendo a uno archivo de texto. En el caso de SAS, el plugin de entrada supervisará todos los archivos del directorio `/root/datos/*.txt`. A continuación se puede ver una muestra del contenido del archivo: ``` 1659,12174,8304,1735,2024-02-16 22:15 1732,12163,8461,1804,2024-02-16 22:16 1693,12104,8393,1756,2024-02-16 22:17 1719,12263,8473,1779,2024-02-16 22:18 1619,12042,8315,1696,2024-02-16 22:19 1766,12386,8417,1838,2024-02-16 22:20 1626,12104,8183,1704,2024-02-16 22:21 1630,11836,8324,1697,2024-02-16 22:22 1736,12153,8255,1797,2024-02-16 22:23 1740,12225,8408,1806,2024-02-16 22:24 ``` A partir de este contenido vamos a extraer, por cada línea, una métrica. En influxdb una métrica es un conjunto de medidas de algo, junto a una serie de etiquetas. Por ejemplo, las métricas de SAS las denominaremos `sas-counts`. Todas las métricas en nuestras estaciones tienen dos etiquetas obligatorias, que son `station` y `experiment`. La primera puede vale `orca`, `icaro` o `calma`. La segunda por ahora puede vales `nemo`, `sas` o `aracne`. A partir de ahí, cada experimento puede poner sus propias etiquetas. Cuidado de no abusar del número de etiquetas, ya que cada etiqueta implica un índice en la base de datos, y por lo tanto son computacionalmente caras. Un esquema de etiquetado correcto nos permitiría obtener todas las cuentas del canal1 de todas las estaciones que tengan el experimento `nemo`, limitadas a aquellos canales que son de `counter_family` tipo BP28. En el caso de SAS, la métrica está compuesta de los campos (fields, en terminología de influx): `c8`, `top`, `bottom`, `free`, `date`. Este último campo, `date` es muy importante porque es la marca de tiempo que se debe utilizar cuando se registre la medida. Si no es especifica que este es la referencia de tiempo, influx asume que la muestra se tomó en el momento en el que se recibió, lo que generalmente no es correcto. Para indicar el formato del CSV de entrada se pueden seguir las [instrucciones del fabricante](https://docs.influxdata.com/telegraf/v1/data_formats/input/csv/). Como referencia, el archivo de configuración de SAS, que colocamos en `/etc/telegraf/telegraf.d/counts.conf`, tendría una sección de entrada para la que usaremos el plugin `inputs.tail`, y tres salidas que explicaremos a continuación ``` [[inputs.tail]] files = ["/root/datos/????????????.txt"] name_override = "sas-counts" from_beginning = false watch_method = "inotify" path_tag = "" data_format = "csv" csv_delimiter = "," csv_column_names = ["c8", "top", "bottom", "free", "timestamp"] csv_column_types = ["int", "int", "int", "int", "string"] csv_timestamp_column = "timestamp" csv_timestamp_format = "2006-01-02 15:04" ``` Del plugin de entrada es importante resaltar que usamos el patrón `????????????.txt` para discriminar los archivos que queremos inspeccionar. En particular queremos excluir los archivos con 13 caracteres. En el caso de SAS, los archivos con esas características tienen un alto volumen de datos. Este patrón habrá que adaptarlo a las necesidades de cada sistema. Un error habitual en este punto es no asegurar que el usuario `telegram` tiene acceso de lectura a esos archivos. También se puede ver cómo se definen los campos a los que corresponde cada columna del archivo CSV, su tipo, y qué columna será la que actúe como marca de tiempo, que en este caso particular es la quinta, la que hemos denominado `timestamp`. Por último se indica cuál es el formato de esta marca de tiempo. Cuidado que el formato parece una fecha concreta, pero es realmente el formato que utiliza GO para estas cosas. La primera salida que se va a generar a partir de esta entrada es otro archivo pero con formato JSON. Esta salida realmente solo sirve para depurar, ya que permite ver que todos los campos del CSV se están procesando correctamente. ``` [[outputs.file]] namepass = ["sas-counts"] files = ["/tmp/metrics.out"] data_format = "json" ``` Teniendo una entrada y una salida ya se pueden hacer las primeras pruebas. Pero antes, en el archivo de configuración global `/etc/telegraf/telegraf.conf` añadiremos dos etiquetas obligatorias para todos los experimentos: ``` [global_tags] station = "orca" experiment = "sas" ``` Ahora podemos intentar arrancar el servicio haciendo: ``` sudo systemctl restart telegraf ``` Para ver si todo ha arrancado bien se puede hacer: ``` sudo systemctl status telegraf ``` Y por último, si queremos inspeccionar el log de salida de `telegraf` para depurar posibles errores, podemos hacer: ``` sudo journalctl --unit=telegraf -n 100 --no-pager ``` Añadiendo el flag `-f` al final, la orden se detiene a la espera de nuevas líneas, lo que puede ser útil para depuración. La siguiente salida se va a utilizar para comunicar la métrica a la máquina `cosmic-eye`, con la idea de que sea esta quien la envíe a la máquina `neutron-gu` en Guadalajara. Se podría enviar directamente desde aquí, pero en su momento pensé que si se enviara a través de `cosmic-eye` podríamos tener métricas de la cantidad de tráfico de red que se genera (muy discutible). ``` [[outputs.socket_writer]] namepass = ["sas-counts"] ## URL to connect to address = "tcp://192.168.1.5:9997" keep_alive_period = "5m" data_format = "influx" ``` La siguiente será publicar los datos en el bus de la estación, concretamente en el topic `orca/sas/count`. El nombrado de los topics sigue el mismo esquema `station/experiment/#`. Así es fácil etiquetarlos si se obtuvieran desde dicho topic. ``` # Configuration for MQTT server to send metrics to [[outputs.mqtt]] namepass = ["sas-counts"] servers = ["192.168.1.5:1883", ] ## Protocol can be `3.1.1` or `5`. Default is `3.1.1` # protocol = "3.1.1" topic = "orca/sas/count" data_format = "json" ``` Para probar si funciona necesitamos tener instalado un cliente de mqtt, como por ejemplo `mosquitto`. Si tenemos conectada la VPN, podemos suscribir el bus de eventos de orca, en el topic `orca/sas/count` haciendo: ``` mosquitto_sub -h 10.9.0.74 -p 1883 -t 'orca/sas/count' | jq . ``` La orden `jq` del final es opcional, solo sirve para formatear de forma legible por humanos la salida JSON que se ha publicado. El resultado será algo similar a lo siguiente: ```json { "fields": { "bottom": 8327, "c8": 1749, "free": 1827, "top": 12328 }, "name": "sas-counts", "tags": { "experiment": "sas", "station": "orca" }, "timestamp": 1708134540 } ``` Como curiosidad, se puede suscribir a todos los eventos emitidos en la estación `orca` usando la `#` como carácter comodín: ``` mosquitto_sub -h 10.9.0.74 -p 1883 -t 'orca/#' | jq . ``` Pero la orden anterior genera mucho tráfico y es dudosamente útil. En la fecha de redacción de este documento, los topics disponibles son: - `orca/nemo/bp28-nemo/detect` Evento de detección de un pulso en `nemo` en alguno de los contadores `BP28`. - `orca/nemo/lnd-nemo/detect` Evento de detección de un pulso en `nemo` en alguno de los contadores `LND`. - `orca/nemo/bp28-nemo/pcnt` Cuentas del último minuto de `nemo` en los contadores `BP28` - `orca/nemo/lnd-nemo/pcnt` Cuentas del último minuto de `nemo` en los contadores `LND` - `orca/nemo/bp28-nemo/pulse` Evento de detección de un pulso en `nemo` procesado para obtener duración y separación, en los contadores de tipo `BP28` - `orca/nemo/lnd-nemo/pulse` Evento de detección de un pulso en `nemo` procesado para obtener duración y separación, en los contadores de tipo `LND` - `orca/power` Información sobre consumo eléctrico - `orca/sas/count` Cuentas de SAS (Sindulfo, completar) - `orca/vaisala` Información meteorológica procedente de la estación Vaisala Tened paciencia si os suscribís a alguno de los topics, ya que muchos tienen un periodo de publicación de un minuto. Si este fuera el caso, telegraf está configurado para que el periodo coincida con el segundo cero de cada minuto.