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:
- Notificación de anomalías y errores
- Conocimiento detallado del rendimiento.
- Sistema centralizado de logs.
- Detección de incidencias.
- 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:
Cualquier duda, podéis comentar o vía formulario.