Home Linux Site24x7 Plugin to measure Internet bandwidth

Site24x7 Plugin to measure Internet bandwidth

Plugin para medir ancho de banda en PY para Site24x7

by José Luis Sánchez Borque
speedtest-cli-site24x7

Implantar un sistema de monitorización de servidores, sistemas y servicios es muy importante. Te comento algunas de las principales razones por las que la monitorización de sistemas 24×7 es un elemento imprescindible al servicio de administración de sistemas:

  1. Notificación de anomalías y errores
  2. Conocimiento detallado del rendimiento.
  3. Sistema centralizado de logs.
  4. Detección de incidencias.
  5. Optimización de los sistemas.

Tanto las plataformas gestionadas internamente mediante plataformas gratuitas del tipo Zabbix, como otras que función en el Cloud, permitirán sacar ventaja de todas las características que os he mencionado anteriormente. Al final se trata de ser PROACTIVO, e intentar evitar el desastre.

En varios clientes estoy implementando una solución que por precio, facilidad de uso y funcionalidades cumple con mis requisitos y los de mis clientes: Site24x7.

No voy a hablaros de la plataforma, para eso solo tenéis que visitar la Web, sino añadiros un pequeño programa en Python que es capaz de medir el ancho de banda de la red. Solo es necesario:

Conocimientos básicos de Python

Una máquina Linux con el sensor Site24x7 instalado, o el On Premise Poller. Ambas sirven para añadir el plugin

Tener instalada en la máquina Linux el programa speedtest-cli. Lo podéis descargar en el siguiente enlace, o instalarlo siguiendo las instrucciones de vuestra distribución linux favorita:

https://github.com/sivel/speedtest-cli

Cómo la entrada está pensada para quien ya dispone de la plataforma y sabe como utilizarla, no me alargo en  muchas explicaciones, solo os añado el código del archivo al que he llamado: testspeed.py

#!/usr/bin/python3

import subprocess 
import json

PLUGIN_VERSION = "1"
HEARTBEAT="true"
METRIC_UNITS = {'Download': 'Mbp', 'Upload': 'Mbp'}

def metricCollector():
  data = {}
  data['plugin_version'] = PLUGIN_VERSION
  data['heartbeat_required']= HEARTBEAT 
  data["units"] = METRIC_UNITS
  command = "speedtest-cli" 
  options = "--json" 
  args=[] 
  args.append(command) 
  args.append(options) 
  # Run subprocess.run and save output object 
  output = subprocess.run(args,capture_output= True ) 
  if (output.returncode == 0):
    # Si no hay error
    datos = json.loads(output.stdout.decode( "utf-8"))
    data["Download"] = datos["download"]
    data["Upload"] = datos["upload"]
    data["Status"] = 0
  else:
    data["Download"] = 0
    data["Upload"] = 0
    data["Status"] = output.returncode
  return data

if __name__ == "__main__":
  result = metricCollector()
  print(json.dumps(result, indent=4, sort_keys=True))

El funcionamiento es muy sencillo. La siguiente orden genera un json con los datos de la medición del ancho de banda.

└─# speedtest-cli --json 
{"download": 317120050.04999614, "upload": 503291002.1904283, "ping": 28.624, "server": {"url": "http://speedtestpuigcerda.infocelra.com:8080/speedtest/upload.php", "lat": "42.4403", "lon": "1.9085", "name": "Puigcerd\u00e0", "country": "Spain", "cc": "ES", "sponsor": "Inforcelra S.L.U.", "id": "37417", "host": "speedtestpuigcerda.infocelra.com:8080", "d": 119.10496151549553, "latency": 28.624}, "timestamp": "2023-01-30T10:18:15.201772Z", "bytes_sent": 151519232, "bytes_received": 396426327, "share": null, "client": {"ip": "98.55.37.30", "lat": "41.387", "lon": "2.1701", "isp": "Jazztel", "isprating": "3.7", "rating": "0", "ispdlavg": "0", "ispulavg": "0", "loggedin": "0", "country": "ES"}}

Lo único que hago es recoger esa información y generar un nuevo json con tres métricas: Download, Upload y Status. Por cierto, Status vale 0 si no hay error, y mayor que cero si hay error. Aquí os pongo un ejemplo de la salida al ejecutar el archivo speedtest.py :

└─# ./speedtest.py 
{
"Download": 413182015.680588,
"Status": 0,
"Upload": 453774864.02445275,
"heartbeat_required": "true",
"plugin_version": "1",
"units": {
"Download": "Mbp",
"Upload": "Mbp"
}
}

La ruta /usr/bin/python3 es posible que la tengáis que adaptar a vuestro servidor.

Os dejo un par de link de la plataforma donde podéis obtener más información del diseño de plugin y cómo introducirlos en el cliente o en el on premiso poller.

Os añado un pantallazo del resultado:

speedtest-cli-site24x7

Cualquier duda, podéis comentar o vía formulario.

You may also like

Leave a Comment