Simple Monitor Alert: Monitoriza tu GNU/Linux de forma fácil [v0.2.4]

Imagen
Simple Monitor Alert: Monitoriza tu sistema
Siempre me había preocupado que todo funcionase bien en mi sistema: que la temperatura no sea demasiado alta, que los discos duros no estén en llamas, que el SMART no esté fallando, que el RAID no se encuentre degradado... Pero nunca había dado con una buena solución para monitorizar todas estas cosas. Probé Nagios, y su configuración resultó ser un cristo, probé Shinken, e iba demasiado lento, probé Zabbix, daba problemas continuamente...

Harto, y preguntándome por qué debía instalar un servidor de monitorización para 2 o 3 máquinas que tengo, decidí hacer mi propia solución, sencilla, fácil, y que no requiera de servidor (la misma máquina monitorizada envía las alertas). Lo he hecho de forma que su instalación es sencilla y puede realizarse en 2 minutos:

sudo pip install simple-monitor-alert


Por supuesto, lo he hecho 100% software Libre, y el código puede encontrarse en Github :) El proyecto todavía requiere madurar un poco, pero estaré encantado de ayudar a cualquier y resolver los bugs que vayan surgiendo. Además, al ser ligero, es perfecto para tu Raspberry Pi. Algunas cosas que monitoriza hoy en día:

  • Porcentaje de CPU
  • Porcentaje de RAM
  • Porcentaje de SWAP
  • Servicios del sistema
  • SMART de disco
  • Páginas web (tiempo de carga, código de respuesta, texto en la página...)
  • Sensores de temperatura
  • Temperatura de los discos duros
  • Mdadm (Linux RAID)
  • Ping
  • Google Cloud Print
Por supuesto, estoy abierto a peticiones para añadir nuevas monitorizaciones que hiciesen falta.

Actívalo con:
Systemd: systemctl start sma
Init: /etc/init.d/sma.sh start


Puedes ver los últimos resultados con:
$ sudo -u sma sma results

Imagen

Para probar las alertas:
$ sudo -u sma alerts --test


También puede uno crear sus propios monitores. La sintaxis es MUY SENCILLA y es compatible con cualquier lenguaje. Un ejemplo sería el siguiente:

#!/usr/bin/env bash
echo "file_exists.expected = yes"
if [ -f "/path/to/file" ]; then value="yes"; else value="no"; fi
echo "file_exists.value = $value"


Si se ejecuta el anterior archivo, devolverá:
file_exists.expected = yes
file_exists.value = no

Simple Monitor Alert se encarga de ejecutar los monitores, y compara el valor de expected con el de value. Si no se cumple la regla, se enviará una alerta. Más información en: https://github.com/Nekmo/simple-monitor ... er/docs/es

Las alertas hoy en día pueden enviarse por estos medios:
  • Telegram
  • Email
  • Archivo en disco (log)
Acepto más sugerencias y nuevos medios de envío.

Espero que este proyecto pueda servir a más gente :D Me encuentro abierto a cualquier duda o petición.

¡Gracias!
Muchas gracias! lo probare con tiempo y ya comentare que tal va.
Gracias :D Ya lo ha probado un amigo en su Raspberry PI y parece funcionar, salvo un pequeño problema: si el directorio de servicios de Systemd no se encuentra disponible, no se completa correctamente la instalación y es necesario crear manualmente el archivo sma.ini:
/etc/simple-monitor-alert/sma.ini

(puede crearse un archivo vacío)

Este error será solucionado esta misma noche.

A parte, crearé un servicio para Init para aquellos sistemas que no usen Systemd.

EDIT: Parece que el problema por el cual no se crea el servicio en Debian para Systemd, es que su ruta es diferente. La ruta en ArchLinux es:
/usr/lib/systemd/system/

La ruta en Debian es:
/lib/systemd/system/


Esta noche se corregirá el fallo.
Si vuelto a meter mi raspberry con owncloud (o next cloud XD) lo provaré.
La nueva release v0.2.3 soluciona bastantes problemas de la instalación con Debian y con Python 2. He empezado a utilizar Docker para probar el proceso de instalación en otros sistemas al que utilizo (Arch Linux).

Tengo pensado ampliar el soporte oficial a otras distribuciones, empezando por Ubuntu y Fedora. Si hay alguna distro y versión que quieres que añada a la batería de tests, escribe un comentario :)

Imagen
CannonlakeEvo está baneado por "Troll"
Me gusta la idea, lo voy a descargar. Gracias.

Soporta datos de GPU? Temperaturas, frecuencias, memorias...
CannonlakeEvo escribió:Me gusta la idea, lo voy a descargar. Gracias.

Soporta datos de GPU? Temperaturas, frecuencias, memorias...

No tiene nada de momento para monitorización de GPU, pero puedo intentar sacarlo en una próxima release :)

Dime el modelo de tu tarjeta gráfica y me informo sobre cómo sacar los valores. En casa puedo probar con Nvidia e Intel. En el trabajo con AMD.

El proyecto está todavía un poco inmaduro porque es bastante reciente, pero es justamente con las pruebas y la gente que prueba que puedo solucionar los problemas ^^ A cualquier cosa sólo escribe un comentario.

¡Saludos!
CannonlakeEvo está baneado por "Troll"
capitanquartz escribió:
CannonlakeEvo escribió:Me gusta la idea, lo voy a descargar. Gracias.

Soporta datos de GPU? Temperaturas, frecuencias, memorias...

No tiene nada de momento para monitorización de GPU, pero puedo intentar sacarlo en una próxima release :)

Dime el modelo de tu tarjeta gráfica y me informo sobre cómo sacar los valores. En casa puedo probar con Nvidia e Intel. En el trabajo con AMD.

El proyecto está todavía un poco inmaduro porque es bastante reciente, pero es justamente con las pruebas y la gente que prueba que puedo solucionar los problemas ^^ A cualquier cosa sólo escribe un comentario.

¡Saludos!


GTX 950 (Maxwell 2° Gen.)

Sería un buen complemento a Conky

Lastima que MSI Afterburner no esté nativo Linux :/
CannonlakeEvo escribió:
capitanquartz escribió:
CannonlakeEvo escribió:Me gusta la idea, lo voy a descargar. Gracias.

Soporta datos de GPU? Temperaturas, frecuencias, memorias...

No tiene nada de momento para monitorización de GPU, pero puedo intentar sacarlo en una próxima release :)

Dime el modelo de tu tarjeta gráfica y me informo sobre cómo sacar los valores. En casa puedo probar con Nvidia e Intel. En el trabajo con AMD.

El proyecto está todavía un poco inmaduro porque es bastante reciente, pero es justamente con las pruebas y la gente que prueba que puedo solucionar los problemas ^^ A cualquier cosa sólo escribe un comentario.

¡Saludos!


GTX 950 (Maxwell 2° Gen.)

Sería un buen complemento a Conky

Lastima que MSI Afterburner no esté nativo Linux :/

En mi caso una GTX 550Ti. No creo que haya mucha diferencia en cuanto a monitorización.

[nekmo@homura ~]$ nvidia-smi
Sat Jun  4 20:56:18 2016       
+------------------------------------------------------+                       
| NVIDIA-SMI 352.30     Driver Version: 352.30         |                       
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 550 Ti  Off  | 0000:01:00.0     N/A |                  N/A |
| 23%   57C    P0    N/A /  N/A |    858MiB /  1020MiB |     N/A      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    0                  Not Supported                                         |
+-----------------------------------------------------------------------------+


Entiendo que de aquí es interesante analizar la temperatura y tal vez el ventilador por si estuviese al 100% demasiado tiempo. No veo nada sobre la frecuencia. También sería conveniente un método para saber cual es la temperatura máxima recomendada para la GPU.

Investigaré sobre el tema. A cualquier cosa dime.

Sobre lo de Conky, ya lo había pensado, aunque todavía no tengo claro cómo enfocarlo. Tal vez podría hacer que Conky muestre los últimos resultados de los monitores.
Hola, estuve probando y al habilitar el email me da errores de cabezeras, segun veo en el journal.

Por cierto, muy buen programa.

Ahhh, tendra que ver, que mi clave es aleatoria y tiene numeros y simbolos raros???

Este es el error que muestra.

jun 04 20:21:33 speed sh[10971]:   File "/usr/lib/python3.5/smtplib.py", line 720, in login
jun 04 20:21:33 speed sh[10971]:     initial_response_ok=initial_response_ok)
jun 04 20:21:33 speed sh[10971]:   File "/usr/lib/python3.5/smtplib.py", line 641, in auth
jun 04 20:21:33 speed sh[10971]:     raise SMTPAuthenticationError(code, resp)
jun 04 20:21:33 speed sh[10971]: smtplib.SMTPAuthenticationError: (534, b'5.7.9 Application-specific password required. Learn more at\n5.7.9  https://support.google.com/accounts/answer/185833 j131sm1971223vkd.20 - gsmtp')
jun 04 20:21:33 speed systemd[1]: sma.service: Main process exited, code=exited, status=1/FAILURE
jun 04 20:21:33 speed systemd[1]: sma.service: Unit entered failed state.
jun 04 20:21:33 speed systemd[1]: sma.service: Failed with result 'exit-code'.
1985a escribió:Hola, estuve probando y al habilitar el email me da errores de cabezeras, segun veo en el journal.

Por cierto, muy buen programa.

Ahhh, tendra que ver, que mi clave es aleatoria y tiene numeros y simbolos raros???

Por favor, cópiame el error y la configuración que estás usando para enviar las alertas :) También ponme por favor la versión de Python que estás usando.

Puedes probar a enviar una alerta de prueba con:
sudo -u sma sma alerts --test


Sobre la contraseña, imagino que no debería tener que ver, siempre que no tenga salto de línea.

Saludos
capitanquartz escribió:
1985a escribió:Hola, estuve probando y al habilitar el email me da errores de cabezeras, segun veo en el journal.

Por cierto, muy buen programa.

Ahhh, tendra que ver, que mi clave es aleatoria y tiene numeros y simbolos raros???

Por favor, cópiame el error y la configuración que estás usando para enviar las alertas :) También ponme por favor la versión de Python que estás usando.

Puedes probar a enviar una alerta de prueba con:
sudo -u sma sma alerts --test


Saludos


En el mensaje anterior copie el error. La configuracion es la que viene de fabrica, solo habilite el uso de correo.

Esta es la configuracion del correo, obiamente quitando los datos criticos
# Gmail example
[mail]
from = w*******@gmail.com
to = d********@hotmail.com
host = smtp.gmail.com
port = 587
user = w********@gmail.com
password = ***************
start-tls = yes



Este comando me da error

sudo -u sma sma alerts --test

pd: estoy usando actualmente python 3.5
1985a escribió:
capitanquartz escribió:
1985a escribió:Hola, estuve probando y al habilitar el email me da errores de cabezeras, segun veo en el journal.

Por cierto, muy buen programa.

Ahhh, tendra que ver, que mi clave es aleatoria y tiene numeros y simbolos raros???

Por favor, cópiame el error y la configuración que estás usando para enviar las alertas :) También ponme por favor la versión de Python que estás usando.

Puedes probar a enviar una alerta de prueba con:
sudo -u sma sma alerts --test


Saludos


En el mensaje anterior copie el error. La configuracion es la que viene de fabrica, solo habilite el uso de correo.

Esta es la configuracion del correo, obiamente quitando los datos criticos
# Gmail example
[mail]
from = w*******@gmail.com
to = d********@hotmail.com
host = smtp.gmail.com
port = 587
user = w********@gmail.com
password = ***************
start-tls = yes



Este comando me da error

sudo -u sma sma alerts --test

pd: estoy usando actualmente python 3.5

Ya he encontrado el problema.

Tienes activada la autenticación en 2 pasos de Google, por lo que necesitas crear una contraseña específica para la aplicación. Aquí dicen más al respecto:
https://support.google.com/accounts/answer/185833

Lamentablemente no puedo probarlo yo mismo porque no tengo activada la autenticación en 2 pasos, y de activarla estaría rompiendo el soporte con varios scripts (incluyendo cosas de trabajo).

Si lo acabas probando, te agradecería que me contases qué tal va :)

Gracias.

EDIT: ¿Qué distribución usas, por curiosidad?
@capitanquartz
Se me paso mencionarte eso.

Estoy en archlinux :)

ok, voy a crear una contraseña y luego probare y te cuento. [beer]
1985a escribió:@capitanquartz
Se me paso mencionarte eso.

Estoy en archlinux :)

ok, voy a crear una contraseña y luego probare y te cuento. [beer]

Ok, gracias :)

Aquí otro con Arch Linux [beer]

Preguntaba por saber qué distros son las más demandadas para hacer paquetes. Imagino que el primero lo haré para Arch en AUR ^^

Por favor, siéntete libre de pedir de pedir lo que sea. Mi intención es ir mejorando el programa en función de lo que pida la gente.

EDIT:
@CannonlakeEvo ya he abierto una tarea para lo de la gráfica.
https://github.com/Nekmo/simple-monitor-alert/issues/21

Sobre lo de usarlo en conjunto con Conky, estoy valorando todavía cómo hacerlo, porque los resultados están protegidos y sólo son accesibles por el usuario "sma".

Mi solución será seguramente añadir un nuevo grupo "sma", y que los archivos creados estén como solo lectura para el grupo. Así podrá accederse a los datos si se pertenece al grupo.
@capitanquartz

Listo, ya he generado y colocado la clave al programa. Ahora no me arroja problemas en el journal y tampoco este comando
sudo -u sma sma alerts --test


Solo me queda esperar a que me envie un informe.

Por cierto, como funciona eso, diariamente, semanalmente o por hora???
1985a escribió:@capitanquartz

Listo, ya he generado y colocado la clave al programa. Ahora no me arroja problemas en el journal y tampoco este comando
sudo -u sma sma alerts --test


Solo me queda esperar a que me envie un informe.

Por cierto, como funciona eso, diariamente, semanalmente o por hora???

Teóricamente debería enviarte un email nada más usar el modo test (¿?), así que es posible que haya entrado a spam, algo en la configuración no esté bien, u otra cosa. Yo lo tengo probado con gmail también, y me funciona sin problemas. Prueba sino cambiando el destinatario.

Cuando el servicio está activado (usando systemd o init) el programa se ejecuta a cada minuto, pero no se ejecutan todos los monitores cada vez: hay un parámetro que establece cual es la frecuencia de los monitores.

La cabecera encargada es:
X-Run-Every-Seconds: <seconds>

https://github.com/Nekmo/simple-monitor ... a-x-tiempo

Puedes ver los últimos resultados con:
sudo -u sma sma results

Ahí te dirá cual fue la última vez que se ejecutaron y el resultado, para saber que todo esté bien. Las alertas sólo se envían la primera vez mientras se mantenga el error. Es decir, que si algo estaba bien, pero ahora no, envía email, pero si en la siguiente ejecución sigue estando mal y ya se había enviado email, no vuelve a enviarlo.
@capitanquartz

Ok, ahora revise mi cuenta en gmail y me ha generado algunos correos, mas no se enviaron a mi otra cuenta. Voy a mirar eso ahora.

Tengo algunos mensajes aqui, que solo dicen "message body" al parecer son generados al hacer el test con el programa.

Veo otros mensajes que son los sensores que tengo activos actualmente, o los que vienen de fabrica que vigilan algunas de las particiones que tengo en mi sistema.

Veo que me envio de las siguientes particiones:
/    /home     /var


Por lo que veo, esta funcionando todo bien por ahora.
Si mañana tengo tiempo, activare algunos sensores para medir la temperatura, que supongo que se podra hacer???

Pues ya ire contando mis inquietudes por aqui.
1985a escribió:@capitanquartz

Ok, ahora revise mi cuenta en gmail y me ha generado algunos correos, mas no se enviaron a mi otra cuenta. Voy a mirar eso ahora.

Tengo algunos mensajes aqui, que solo dicen "message body" al parecer son generados al hacer el test con el programa.

Veo otros mensajes que son los sensores que tengo activos actualmente, o los que vienen de fabrica que vigilan algunas de las particiones que tengo en mi sistema.

Veo que me envio de las siguientes particiones:
/    /home     /var


Por lo que veo, esta funcionando todo bien por ahora.
Si mañana tengo tiempo, activare algunos sensores para medir la temperatura, que supongo que se podra hacer???

Pues ya ire contando mis inquietudes por aqui.

Todos los monitores disponibles se encuentran en el directorio:
/etc/simple-monitor-alert/monitors-available


Para activarlos, crea un enlace simbólico a:
/etc/simple-monitor-alert/monitors-enabled


Por ejemplo:
cd /etc/simple-monitor-alert/monitors-enabled
ln -s ../monitor-available/<monitor>


Eso sí, te recomiendo leer las primeras líneas del archivo del monitor (documentación), porque algunos requieren pasos extra para funcionar :)

Además, hay algunos monitores que además no están del todo documentados. Esto lo iré solucionado en los próximos días. A cualquier duda dime.
Ok, le hechare un vistaso mas tranquilo, aparte para aprender algunos trucos que vea en tus scripts XD

Lo que dices, ya encontre uno que me interesa mucho, solo tengo que agregar lo que dice al archivo sudoers.
La izquierda abajo.
Imagen
La autentificación en dos pasos se puede ignorar cuando se añade el dispositivo a la lista de confianza.

Imagen

Se podría hacer que al inicio, ejecutase la autentificación, el usuario la pusiera y luego ya no hiciera falta nunca más.
CannonlakeEvo está baneado por "Troll"
@capitanquartz

Mil Gracias !!

Lástima que no sé programar, para contribuir con la comunidad con cositas así. ¿Recomendáis alguna guía ultra básica ?

A modo de sugerencia, y con la idea de aportar, diré que cualquier persona que estime su hardware debería monitorizar. En mi caso, me es imprescindible lo siguiente, y muchas variables ya las recojes en tu aplicación.

Uso en OSD / On Screen.
CPU: Uso Núcleos / Hilos y Temperaturas
RAM: Uso de RAM (Opcion: Que usa la RAM)
HDD: Temperatura y Tasa W/R
GPU: Temperatura, Uso Núcleo/Memoria, Frecuencias Memoria/Núcleo, Ventiladores, Watt.


Saludos!!
Quiza te facilitaria la tarea fijarte en como hace Monitorix el trabajo.

Creo que usa rrdtool para generar graficos, pero debe tener tambien monitores para recolectar la informacion.
@capitanquartz Muy buena herramienta. Yo tengo un proyecto que es hacer un monitor de sistema en una pantalla LCD, en principio lo voy a hacer con Arduino (aunque en una RPI se podría hacer en la propia RPI conectándole una pantalla en los GPIO, pero al final preferí hacerlo con el arduino de por medio, no me gustaba cómo quedaban los cables de la lcd saliendo de la pi [+risas] ). La idea es que hasta 2 equipos le envíen información a una RPI, y que ésta, estando conectada a un Arduino, reciba esas informaciones y se las pase, junto a la información propia, al Arduino (por serial) de forma que el Arduino recibe los datos y los imprime en pantalla. Todavía está verde el proyecto pero igual esta herramienta podría servirme mejor (aunque uno de los equipos en ocasiones estaría funcionando con Windows, pero bueno, es lo de menos).

Se me está ocurriendo que podría escribir los logs que saca tu herramienta en la RPI u otro equipo de la red (incluso hacer una ramdisk para tal hecho), y que la rpi lea esa información y luego se la envíe al arduino por serial. Por ahora probaré esta herramienta en local a ver qué tal [360º]
amchacon escribió:La autentificación en dos pasos se puede ignorar cuando se añade el dispositivo a la lista de confianza.

Imagen


Se podría hacer que al inicio, ejecutase la autentificación, el usuario la pusiera y luego ya no hiciera falta nunca más.

Me temo que no es tan fácil porque no es igual que cuando te autenticas vía web: en este caso se utiliza SMTP y no te permite saltar la autenticación en 2 pasos :( Pero gracias por el consejo.

CannonlakeEvo escribió:Lástima que no sé programar, para contribuir con la comunidad con cositas así. ¿Recomendáis alguna guía ultra básica ?

A modo de sugerencia, y con la idea de aportar, diré que cualquier persona que estime su hardware debería monitorizar. En mi caso, me es imprescindible lo siguiente, y muchas variables ya las recojes en tu aplicación.

Uso en OSD / On Screen.
CPU: Uso Núcleos / Hilos y Temperaturas
RAM: Uso de RAM (Opcion: Que usa la RAM)
HDD: Temperatura y Tasa W/R
GPU: Temperatura, Uso Núcleo/Memoria, Frecuencias Memoria/Núcleo, Ventiladores, Watt.

Puess... sobre aprender a programar, yo me especializo en Python. Es un buen lenguaje y fácil de aprender. Te diría qué manual usé yo, pero no podría porque aprendí a golpes leyendo código :P hay una guía por ahí, a la que le eché un vistazo, llamada Python para Todos, pero no la recomendaría para comenzar porque presupone que ya sabes programar.

En estos momentos SMA ya controla el porcentaje de CPU, temperatura, uso de RAM y temperatura HDD. Quedaría la GPU y el uso de R/W de HDD (muy buena, no me acordaba). Sobre el OSD, no tiene y la verdad es que no se me había ocurrido. Para ello, ya hay otros monitores muy buenos como Monitorix, que ya lo ha dicho @sodark, o Conky. Con este programa he querido centrarme en una faceta que les suele faltar: la de enviar alertas. Por supuesto, acabará teniendo visualización con gráficas, aunque para eso todavía falta un poco. La pregunta es: ¿cómo verías bien esas gráficas? ¿En algo tipo Conky? ¿En el propio Conky? ¿Interfaz web? :) Estoy abierto a sugerencias.

sodark escribió:Quiza te facilitaria la tarea fijarte en como hace Monitorix el trabajo.

Creo que usa rrdtool para generar graficos, pero debe tener tambien monitores para recolectar la informacion.

Gracias por el consejo :D Me interesa sobre todo ver cómo recolectan la información, porque se hace pesadísimo el programar los monitores :( He estado pensando en las gráficas, y es probable que usase Matplotlib, ya que estoy usando Python. Si acabo añadiendo gráficas vía web, también he pensado en hacer algo dinámico con Javascript.

noentiendero escribió:@capitanquartz Muy buena herramienta. Yo tengo un proyecto que es hacer un monitor de sistema en una pantalla LCD, en principio lo voy a hacer con Arduino (aunque en una RPI se podría hacer en la propia RPI conectándole una pantalla en los GPIO, pero al final preferí hacerlo con el arduino de por medio, no me gustaba cómo quedaban los cables de la lcd saliendo de la pi [+risas] ). La idea es que hasta 2 equipos le envíen información a una RPI, y que ésta, estando conectada a un Arduino, reciba esas informaciones y se las pase, junto a la información propia, al Arduino (por serial) de forma que el Arduino recibe los datos y los imprime en pantalla. Todavía está verde el proyecto pero igual esta herramienta podría servirme mejor (aunque uno de los equipos en ocasiones estaría funcionando con Windows, pero bueno, es lo de menos).

Se me está ocurriendo que podría escribir los logs que saca tu herramienta en la RPI u otro equipo de la red (incluso hacer una ramdisk para tal hecho), y que la rpi lea esa información y luego se la envíe al arduino por serial. Por ahora probaré esta herramienta en local a ver qué tal [360º]

Me encanta la idea de tu proyecto :D Según entiendo, aquí SMA sería el encargado de recolectar la información en los equipos para enviárselo a la RPI, y que ésta imprima los resultados en la pantalla a través del Arduino, ¿no? El único problema insalvable que se me ocurre, es que Simple Monitor Alert no está pensado para Windows. Simplemente, no tengo monitores. En teoría, al ser Python multiplataforma, debería funcionar, pero habría que programar monitores.

A parte, los 3 únicos métodos de envío que tengo para enviar los datos son: Telegram, email y archivo. Habría que hacer un nuevo sistema que envíe los logs, preferiblemente en JSON o algo así, a la RPI.

Me interesa tu proyecto así que espero poder estar al tanto de las novedades :) Si quieres dame una forma de contactar por si quieres que mantengamos el contacto. Si tienes Github, puedes agregarme.

¡Gracias a todos por vuestros comentarios!
Creo que lo mejor que podrais hacer es que se pudiera obtener el output via JSON / XML, de esta forma a ti tambien te sera luego mas sencillo crear nuevos sistemas de alerta.

Ademas, siempre se puede hacer que luego un servidor web , al recibir la petición directamente escupa el JSON que ha generado tu aplicación.

Yo este verano terminare unas practicas que tengo para la universidad y mirare a ver como puedo ayudarte con tema de los monitores, ya que me interesa bastante.
sodark escribió:Creo que lo mejor que podrais hacer es que se pudiera obtener el output via JSON / XML, de esta forma a ti tambien te sera luego mas sencillo crear nuevos sistemas de alerta.

Ademas, siempre se puede hacer que luego un servidor web , al recibir la petición directamente escupa el JSON que ha generado tu aplicación.

Yo este verano terminare unas practicas que tengo para la universidad y mirare a ver como puedo ayudarte con tema de los monitores, ya que me interesa bastante.

En realidad, la salida de los monitores ya se almacena en un JSON :)

[root@homura /home/nekmo]# cat /var/lib/simple-monitor-alert/results.json
{
    "monitors": {
        "hdds": {
            "pcnt_use(md0)": {
                "alerted": [
                    "telegram"
                ],
                "executions": 2226,
                "fail": true,
                "since": "2016-05-03T00:41:30.388937+02:00",
                "updated_at": "2016-06-05T05:19:40.752888+02:00"
            },
            "pcnt_use(sda1)": {
                "alerted": [
                    "telegram"
                ],
                "executions": 2232,
                "fail": true,
                "since": "2016-05-03T00:41:30.389135+02:00",
                "updated_at": "2016-06-05T05:19:40.752369+02:00"
            },
            "pcnt_use(sdc1)": {
                "alerted": [
                    "telegram"
                ],
                "executions": 2233,
                "fail": true,
                "since": "2016-05-03T00:41:30.388813+02:00",
                "updated_at": "2016-06-05T05:19:40.752674+02:00"
            },
            "pcnt_use(sdc2)": {
                "alerted": [],
                "executions": 2233,
                "fail": false,
                "since": "2016-05-03T00:41:30.388599+02:00",
                "updated_at": "2016-06-05T05:19:40.752196+02:00"
            },
            "pcnt_use(sdc3)": {
                "alerted": [],
                "executions": 2233,
                "fail": false,
                "since": "2016-05-03T00:41:30.389049+02:00",
                "updated_at": "2016-06-05T05:19:40.751958+02:00"
            }
        },
        "mdadm": {
            "mdadm(md0)": {
                "alerted": [],
                "executions": 9572,
                "fail": false,
                "since": "2016-05-25T15:37:07.865808+02:00",
                "updated_at": "2016-06-05T05:19:40.442957+02:00"
            }
        },
        "smart": {
            "smart_status": {
                "alerted": [],
                "executions": 49,
                "fail": false,
                "since": "2016-05-03T00:53:27.493226+02:00",
                "updated_at": "2016-05-03T01:29:12.851040+02:00"
            }
        },
        "system": {
            "cpu": {
                "alerted": [],
                "executions": 9947,
                "fail": false,
                "since": "2016-05-03T00:41:30.223221+02:00",
                "updated_at": "2016-06-05T05:19:40.482914+02:00"
            },
            "ram": {
                "alerted": [],
                "executions": 9947,
                "fail": false,
                "since": "2016-05-03T00:41:30.223398+02:00",
                "updated_at": "2016-06-05T05:19:40.483150+02:00"
            }
        }
    },
    "version": "0.1.0"
}[root@homura /home/nekmo]#


[root@homura /home/nekmo]# cat /var/lib/simple-monitor-alert/monitors.json
{                                                                                                                                                                                                                                                   
    "hdds": {                                                                                                                                                                                                                                       
        "headers": {                                                                                                                                                                                                                               
            "X-Run-Every-Seconds": 300                                                                                                                                                                                                             
        },                                                                                                                                                                                                                                         
        "last_execution": "2016-06-05T05:19:40.750821+02:00"                                                                                                                                                                                       
    },                                                                                                                                                                                                                                             
    "mdadm": {                                                                                                                                                                                                                                     
        "headers": {},                                                                                                                                                                                                                             
        "last_execution": "2016-06-05T05:19:40.431666+02:00"                                                                                                                                                                                       
    },                                                                                                                                                                                                                                             
    "system": {                                                                                                                                                                                                                                     
        "headers": {},                                                                                                                                                                                                                             
        "last_execution": "2016-06-05T05:19:40.477583+02:00"                                                                                                                                                                                       
    }                                                                                                                                                                                                                                               
}[root@homura /home/nekmo]#


Pero por supuesto, los mensajes de alerta se envían para que lo lea un humano :P :P :P

Como en ese caso tendría que enviarlo SMA a la RPI, tendrían que enviarse como el JSON generado.

Una cosa que no estoy haciendo ahora, y que tengo que hacer con urgencia, es almacenar los valores (seguramente en una db) para generar más adelante gráficas. En estos momentos sólo estoy almacenando lo básico para poder tener alertas.

Lo que no usa JSON es la salida de los propios scripts de los monitores. Utilizo en su lugar una sintaxis propia similar a un archivo ini:

[root@homura /home/nekmo]# /etc/simple-monitor-alert/monitors-enabled/hdds.sh
X-Run-Every-Seconds: 300
pcnt_use(sdc1).name = 'Percentage of space used in sdc1 (/)'
pcnt_use(sdc1).expected = <= 80
pcnt_use(sdc1).value = 84
pcnt_use(sdc1).extra_info = 'Space: 20G/25G'
pcnt_use(sda1).name = 'Percentage of space used in sda1 (/media/datos)'
pcnt_use(sda1).expected = <= 80
pcnt_use(sda1).value = 91
pcnt_use(sda1).extra_info = 'Space: 826G/917G'
pcnt_use(sdc2).name = 'Percentage of space used in sdc2 (/home)'
pcnt_use(sdc2).expected = <= 80
pcnt_use(sdc2).value = 76
pcnt_use(sdc2).extra_info = 'Space: 51G/70G'
pcnt_use(sdc3).name = 'Percentage of space used in sdc3 (/boot/efi)'
pcnt_use(sdc3).expected = <= 80
pcnt_use(sdc3).value = 67
pcnt_use(sdc3).extra_info = 'Space: 42M/63M'
pcnt_use(md0).name = 'Percentage of space used in md0 (/media/nekraid01)'
pcnt_use(md0).expected = <= 80
pcnt_use(md0).value = 100
pcnt_use(md0).extra_info = 'Space: 5,4T/5,5T'

La razón tras esto, es facilitar la lectura a las personas (y por tanto, hacerlo más fácil de depurar), simplificar la creación de monitores mediante bash, y hacerlo más sencillo en general. Hay otro motivo tras esto y el más importante: todos los parámetros de esta salida, se pueden sobrescribir en el archivo sma.ini. Esto significa, que por ejemplo puedo cambiar el porcentaje a partir del cual se produce alerta en un monitor.

[hdds]
pcnt_use(sdc1).expected = <= 95
pcnt_use(sda1).expected = <= 95
pcnt_use(md0).expected = <= 100

Y como se puede ver, se mantiene una sintaxis común, lo cual lo hace más intuitivo. Por supuesto, acepto sugerencias para mejorar esto.

Cuando acabes con las prácticas sería genial poder tener un poco de ayuda :D El proyecto está en Github, así que cualquiera puede colaborar.
capitanquartz escribió:
noentiendero escribió:@capitanquartz Muy buena herramienta. Yo tengo un proyecto que es hacer un monitor de sistema en una pantalla LCD, en principio lo voy a hacer con Arduino (aunque en una RPI se podría hacer en la propia RPI conectándole una pantalla en los GPIO, pero al final preferí hacerlo con el arduino de por medio, no me gustaba cómo quedaban los cables de la lcd saliendo de la pi [+risas] ). La idea es que hasta 2 equipos le envíen información a una RPI, y que ésta, estando conectada a un Arduino, reciba esas informaciones y se las pase, junto a la información propia, al Arduino (por serial) de forma que el Arduino recibe los datos y los imprime en pantalla. Todavía está verde el proyecto pero igual esta herramienta podría servirme mejor (aunque uno de los equipos en ocasiones estaría funcionando con Windows, pero bueno, es lo de menos).
Se me está ocurriendo que podría escribir los logs que saca tu herramienta en la RPI u otro equipo de la red (incluso hacer una ramdisk para tal hecho), y que la rpi lea esa información y luego se la envíe al arduino por serial. Por ahora probaré esta herramienta en local a ver qué tal [360º]

Me encanta la idea de tu proyecto :D Según entiendo, aquí SMA sería el encargado de recolectar la información en los equipos para enviárselo a la RPI, y que ésta imprima los resultados en la pantalla a través del Arduino, ¿no? El único problema insalvable que se me ocurre, es que Simple Monitor Alert no está pensado para Windows. Simplemente, no tengo monitores. En teoría, al ser Python multiplataforma, debería funcionar, pero habría que programar monitores.
A parte, los 3 únicos métodos de envío que tengo para enviar los datos son: Telegram, email y archivo. Habría que hacer un nuevo sistema que envíe los logs, preferiblemente en JSON o algo así, a la RPI.
Me interesa tu proyecto así que espero poder estar al tanto de las novedades :) Si quieres dame una forma de contactar por si quieres que mantengamos el contacto. Si tienes Github, puedes agregarme.
¡Gracias a todos por vuestros comentarios!


Correcto, es lo que tenía pensado. Ahora mismo, lo que tengo hecho, es un script en Python que coge del ordenador donde se ejecuta ese script el uso de CPU (con la librería psutil) y se lo manda al Arduino por serial (usando pyserial) - aunque hay algunas limitaciones, por ahora me encontré con que si lo mando con una frecuencia mayor que una vez cada 1,5 segundos el arduino recibe los valores pero no los saca en pantalla... he de ver por qué sucede. Para enviar más datos al arduino todavía no sé cómo haré, imagino que enviando una ristra de datos y diciéndole al arduino que coja cierto número de caracteres fijo en X posición podría funcionar XD

Para coger datos de otros equipos, había preguntado hace unas semanas en Reddit y me dijeron de crear un servidor HTTP o usar Node.js y algunas ideas mas. En Windows había probado el script python que hice para linux y no conseguí hacerlo funcionar, pero bueno, eso tendré que verlo con más calma.

Te agregué a Jabber :p (de hecho te tenía ya agregado a tu cuenta de jabberes.org hace tiempo, ahora te agregué también a la de tu servidor).

Salud!
CannonlakeEvo está baneado por "Troll"
@capitanquartz

Soy mas bien espartano. Personalmente, prefiero gráficas simples , numeros simples o porcentajes. El mínimo consumo de recursos maximizando la info.
noentiendero escribió:
capitanquartz escribió:
noentiendero escribió:@capitanquartz Muy buena herramienta. Yo tengo un proyecto que es hacer un monitor de sistema en una pantalla LCD, en principio lo voy a hacer con Arduino (aunque en una RPI se podría hacer en la propia RPI conectándole una pantalla en los GPIO, pero al final preferí hacerlo con el arduino de por medio, no me gustaba cómo quedaban los cables de la lcd saliendo de la pi [+risas] ). La idea es que hasta 2 equipos le envíen información a una RPI, y que ésta, estando conectada a un Arduino, reciba esas informaciones y se las pase, junto a la información propia, al Arduino (por serial) de forma que el Arduino recibe los datos y los imprime en pantalla. Todavía está verde el proyecto pero igual esta herramienta podría servirme mejor (aunque uno de los equipos en ocasiones estaría funcionando con Windows, pero bueno, es lo de menos).
Se me está ocurriendo que podría escribir los logs que saca tu herramienta en la RPI u otro equipo de la red (incluso hacer una ramdisk para tal hecho), y que la rpi lea esa información y luego se la envíe al arduino por serial. Por ahora probaré esta herramienta en local a ver qué tal [360º]

Me encanta la idea de tu proyecto :D Según entiendo, aquí SMA sería el encargado de recolectar la información en los equipos para enviárselo a la RPI, y que ésta imprima los resultados en la pantalla a través del Arduino, ¿no? El único problema insalvable que se me ocurre, es que Simple Monitor Alert no está pensado para Windows. Simplemente, no tengo monitores. En teoría, al ser Python multiplataforma, debería funcionar, pero habría que programar monitores.
A parte, los 3 únicos métodos de envío que tengo para enviar los datos son: Telegram, email y archivo. Habría que hacer un nuevo sistema que envíe los logs, preferiblemente en JSON o algo así, a la RPI.
Me interesa tu proyecto así que espero poder estar al tanto de las novedades :) Si quieres dame una forma de contactar por si quieres que mantengamos el contacto. Si tienes Github, puedes agregarme.
¡Gracias a todos por vuestros comentarios!


Correcto, es lo que tenía pensado. Ahora mismo, lo que tengo hecho, es un script en Python que coge del ordenador donde se ejecuta ese script el uso de CPU (con la librería psutil) y se lo manda al Arduino por serial (usando pyserial) - aunque hay algunas limitaciones, por ahora me encontré con que si lo mando con una frecuencia mayor que una vez cada 1,5 segundos el arduino recibe los valores pero no los saca en pantalla... he de ver por qué sucede. Para enviar más datos al arduino todavía no sé cómo haré, imagino que enviando una ristra de datos y diciéndole al arduino que coja cierto número de caracteres fijo en X posición podría funcionar XD

Para coger datos de otros equipos, había preguntado hace unas semanas en Reddit y me dijeron de crear un servidor HTTP o usar Node.js y algunas ideas mas. En Windows había probado el script python que hice para linux y no conseguí hacerlo funcionar, pero bueno, eso tendré que verlo con más calma.

Te agregué a Jabber :p (de hecho te tenía ya agregado a tu cuenta de jabberes.org hace tiempo, ahora te agregué también a la de tu servidor).

Salud!

Raro que la frecuencia sea de 1,5 segundos... Pero si es así, cosa que para este uso no es el fin del mundo, tal vez habría que omitir los resultados que estén de por medio :/

Por lo de usar un servidor HTTP, lo veo una buena idea. Estaba pensando en montar un servidor centralizado para SMA en un futuro, como algo opcional (aunque seguiría funcionando autónomo). Si te urge, puedo ir haciendo ya algo para que aunque sea te entregue los valores.

Si sólo estás monitorizando cosas como uso de CPU, se podrían crear los monitores que falten para Windows.

Gracias por agregarme ^^ Hazlo también si puedes a nekmo@nekmo.org que lo uso más. Si usas Jabber, puedes encontrarnos también en la sala: eolfansub@salas.nekmo.org

@sodark lo que no usa JSON es la salida de los propios scripts de los monitores. Utilizo en su lugar una sintaxis propia similar a un archivo ini:

[root@homura /home/nekmo]# /etc/simple-monitor-alert/monitors-enabled/hdds.sh
X-Run-Every-Seconds: 300
pcnt_use(sdc1).name = 'Percentage of space used in sdc1 (/)'
pcnt_use(sdc1).expected = <= 80
pcnt_use(sdc1).value = 84
pcnt_use(sdc1).extra_info = 'Space: 20G/25G'
pcnt_use(sda1).name = 'Percentage of space used in sda1 (/media/datos)'
pcnt_use(sda1).expected = <= 80
pcnt_use(sda1).value = 91
pcnt_use(sda1).extra_info = 'Space: 826G/917G'
pcnt_use(sdc2).name = 'Percentage of space used in sdc2 (/home)'
pcnt_use(sdc2).expected = <= 80
pcnt_use(sdc2).value = 76
pcnt_use(sdc2).extra_info = 'Space: 51G/70G'
pcnt_use(sdc3).name = 'Percentage of space used in sdc3 (/boot/efi)'
pcnt_use(sdc3).expected = <= 80
pcnt_use(sdc3).value = 67
pcnt_use(sdc3).extra_info = 'Space: 42M/63M'
pcnt_use(md0).name = 'Percentage of space used in md0 (/media/nekraid01)'
pcnt_use(md0).expected = <= 80
pcnt_use(md0).value = 100
pcnt_use(md0).extra_info = 'Space: 5,4T/5,5T'

La razón tras esto, es facilitar la lectura a las personas (y por tanto, hacerlo más fácil de depurar), simplificar la creación de monitores mediante bash, y hacerlo más sencillo en general. Hay otro motivo tras esto y el más importante: todos los parámetros de esta salida, se pueden sobrescribir en el archivo sma.ini. Esto significa, que por ejemplo puedo cambiar el porcentaje a partir del cual se produce alerta en un monitor.

[hdds]
pcnt_use(sdc1).expected = <= 95
pcnt_use(sda1).expected = <= 95
pcnt_use(md0).expected = <= 100

Y como se puede ver, se mantiene una sintaxis común, lo cual lo hace más intuitivo. Por supuesto, acepto sugerencias para mejorar esto. :)

@CannonlakeEvo ¿qué tal te iría Conky para visualizar los datos?
No si no digo que debas cambiarlo, sino que puedas enviarle como parametro algo tipo -format JSON y te devuelva el json, total es hacer un switch a la hora de presentar la informacion.

El default seria el que usas , y si te viene un JSON lo generas como tal, no se si me explico.

Yo en algunas aplicaciones web lo hago cuando tengo que presentar la informacion, a veces la informacion me viene solicitada por un AJAX, otras es el propio PHP/Java de backend quien lo obtiene para cargarlo en la web.

   public String generaComboPersones(String Usuari,int format) throws Exception {
      StringBuilder HTMLcode = new StringBuilder("");
      String query = "select distinct pr.* from tabla1 pr, tabla2 si WHERE pr.campo1=si.campo2 ";
      
      ResultSet cursor = funcions_globals.abre(query,false);
      switch (format) {
         case FORMAT_JSON:
            HTMLcode.append("\"persones\":[");
            if ( funcions_globals.esConsultaValida(cursor) ) {
               do {
                  String field1 = this.Res_getString(cursor.getString("field1"),false,-1);
                  String field2 = this.Res_getString(cursor.getString(field2),false,-1);
                  String field3 = this.cleanNullString(this.Res_getString(cursor.getString("field3"),false,-1));
                  String field4 = this.cleanNullString(this.Res_getString(cursor.getString("field4"),false,-1));
                  HTMLcode.append("{\"campo1\":\""+field1+"\",");
                  HTMLcode.append("\"campo2\":\""+field2+" "+field3+", "+field4+"\"");
                  HTMLcode.append("}");
                  if ( !cursor.isLast() ) { HTMLcode.append(","); }
               } while ( cursor.next() );   
            }
            HTMLcode.append("]");   
         break;
         default:
            if ( funcions_globals.esConsultaValida(cursor) ) {
               do {
                  String field1 = this.Res_getString(cursor.getString("field1"),false,-1);
                  String field2 = this.Res_getString(cursor.getString("field2"),false,-1);
                  String field3 = this.cleanNullString(this.Res_getString(cursor.getString("field3"),false,-1));
                  String field4 = this.cleanNullString(this.Res_getString(cursor.getString("field4"),false,-1));
                  HTMLcode.append("<option value='"+field1+"'>"+field2+" "+field3+", "+field4+"</option>");
               } while ( cursor.next() );   
            }
         break;
      }
      funcions_globals.cierra(cursor,true);
      return HTMLcode.toString();
   }


PD: Si genero el JSON a manija, debido a que mi jefe no ha importado la libreria de Json al servidor ...xD
sodark escribió:No si no digo que debas cambiarlo, sino que puedas enviarle como parametro algo tipo -format JSON y te devuelva el json, total es hacer un switch a la hora de presentar la informacion.

El default seria el que usas , y si te viene un JSON lo generas como tal, no se si me explico.

Yo en algunas aplicaciones web lo hago cuando tengo que presentar la informacion, a veces la informacion me viene solicitada por un AJAX, otras es el propio PHP/Java de backend quien lo obtiene para cargarlo en la web.

   public String generaComboPersones(String Usuari,int format) throws Exception {
      StringBuilder HTMLcode = new StringBuilder("");
      String query = "select distinct pr.* from tabla1 pr, tabla2 si WHERE pr.campo1=si.campo2 ";
      
      ResultSet cursor = funcions_globals.abre(query,false);
      switch (format) {
         case FORMAT_JSON:
            HTMLcode.append("\"persones\":[");
            if ( funcions_globals.esConsultaValida(cursor) ) {
               do {
                  String field1 = this.Res_getString(cursor.getString("field1"),false,-1);
                  String field2 = this.Res_getString(cursor.getString(field2),false,-1);
                  String field3 = this.cleanNullString(this.Res_getString(cursor.getString("field3"),false,-1));
                  String field4 = this.cleanNullString(this.Res_getString(cursor.getString("field4"),false,-1));
                  HTMLcode.append("{\"campo1\":\""+field1+"\",");
                  HTMLcode.append("\"campo2\":\""+field2+" "+field3+", "+field4+"\"");
                  HTMLcode.append("}");
                  if ( !cursor.isLast() ) { HTMLcode.append(","); }
               } while ( cursor.next() );   
            }
            HTMLcode.append("]");   
         break;
         default:
            if ( funcions_globals.esConsultaValida(cursor) ) {
               do {
                  String field1 = this.Res_getString(cursor.getString("field1"),false,-1);
                  String field2 = this.Res_getString(cursor.getString("field2"),false,-1);
                  String field3 = this.cleanNullString(this.Res_getString(cursor.getString("field3"),false,-1));
                  String field4 = this.cleanNullString(this.Res_getString(cursor.getString("field4"),false,-1));
                  HTMLcode.append("<option value='"+field1+"'>"+field2+" "+field3+", "+field4+"</option>");
               } while ( cursor.next() );   
            }
         break;
      }
      funcions_globals.cierra(cursor,true);
      return HTMLcode.toString();
   }

No es mala idea, me lo apunto :D Aunque de dicho trabajo tendría que encargarse Simple Monitor Alert. Los monitores sólo son scripts y hacer que fuesen éstos los que generasen el JSON, sería complicarlos. Te muestro unos ejemplos de monitores para que veas de qué hablo:

#!/usr/bin/env bash
echo "file_exists.expected = yes"
if [ -f "/path/to/file" ]; then value="yes"; else value="no"; fi
echo "file_exists.value = $value"


#!/usr/bin/env bash
# Smartctl monitor
# Add to sudoers:
# sma ALL= (ALL) NOPASSWD: /usr/sbin/smartctl
# No arguments required.

echo "X-Run-Every-Seconds: 43200"

for disk in `lsblk -d -o name | tail -n +2`; do
    status=`sudo smartctl -H /dev/$disk | grep -e 'overall-health' | awk '{print $NF}'`
    if [[ $? != 1 && $status ]]; then
        echo "smart_status($disk).name = 'SMART test result on /dev/$disk'"
        echo "smart_status($disk).expected = 'PASSED'"
        echo "smart_status($disk).value = '$status'"
    fi
done


#!/usr/bin/env bash
# System monitor. Includes:
# - CPU
# - RAM
# - SWAP
# No parameters required.

echo "cpu.name = 'CPU percentage usage'"
echo "cpu.expected= <= 80"
echo "cpu.seconds = 500"
echo "cpu.value = "`grep 'cpu ' /proc/stat | awk '{ print ($2+$4)*100/($2+$4+$5)}'`

echo "ram.name = 'RAM memory usage'"
echo "ram.expected= <= 85"
echo "ram.seconds = 120"
echo "ram.value = "`free | grep Mem | awk '{print $3/$2 * 100.0}'`

if [[ `free | grep Swap | awk '{print $2}'` != '0' ]]; then
    echo "swap.name = 'SWAP memory usage'"
    echo "swap.expected= <= 80"
    echo "swap.seconds = 120"
    echo "swap.value = "`free | grep Swap | awk '{print $3/$2 * 100.0}'`
fi


La solución podría ser tener algo tipo:
sma --json

Y que dicho parámetro haga que la información obtenida se muestre como un JSON (en realidad, la sintaxis de los monitores ya se convierte a JSON).
CannonlakeEvo está baneado por "Troll"
@capitanquartz
Sin ningún problema. Me ha ido excelente hasta ahora, con el set a mi gusto.

Lástima lo del MSI Afterburner. Es de lo poco que echo de menos en Linux.
capitanquartz escribió:Raro que la frecuencia sea de 1,5 segundos... Pero si es así, cosa que para este uso no es el fin del mundo, tal vez habría que omitir los resultados que estén de por medio :/

Por lo de usar un servidor HTTP, lo veo una buena idea. Estaba pensando en montar un servidor centralizado para SMA en un futuro, como algo opcional (aunque seguiría funcionando autónomo). Si te urge, puedo ir haciendo ya algo para que aunque sea te entregue los valores.

Si sólo estás monitorizando cosas como uso de CPU, se podrían crear los monitores que falten para Windows.

Gracias por agregarme ^^ Hazlo también si puedes a nekmo@nekmo.org que lo uso más. Si usas Jabber, puedes encontrarnos también en la sala: eolfansub@salas.nekmo.org


No, no urge para nada, es uno de los muchos proyectos que tengo pensado hacer ahora en vacaciones. De todas formas igual me convenía mejor dejar el Arduino y conectar la pantalla directamente a la RPI, porque pensándolo bien es algo tontería tener Arduino de por medio, si pongo la pantalla en la RPI directamente sería más fácil y más estable seguramente. La única razón por la que tengo el Arduino es porque tenía pensado tener más cosillas por ahí, como relés, detectores de cosas y demás, pero siempre puedo hacerlo con la rpi. Pensaré a ver cómo hago finalmente.

El arduino tendría más sentido si fuese conectado a algo que no tuviese puertos GPIO, o si estuviese por ahí sin conectar a nada, por tanto recibiendo los datos él (mediante un Ethernet Shield o algo así).
CannonlakeEvo escribió:@capitanquartz
Sin ningún problema. Me ha ido excelente hasta ahora, con el set a mi gusto.

Lástima lo del MSI Afterburner. Es de lo poco que echo de menos en Linux.

¿Entonces te parecería bien que comenzase con Conky? :) Aunque no sería algo inmediato.

noentiendero escribió:
capitanquartz escribió:Raro que la frecuencia sea de 1,5 segundos... Pero si es así, cosa que para este uso no es el fin del mundo, tal vez habría que omitir los resultados que estén de por medio :/

Por lo de usar un servidor HTTP, lo veo una buena idea. Estaba pensando en montar un servidor centralizado para SMA en un futuro, como algo opcional (aunque seguiría funcionando autónomo). Si te urge, puedo ir haciendo ya algo para que aunque sea te entregue los valores.

Si sólo estás monitorizando cosas como uso de CPU, se podrían crear los monitores que falten para Windows.

Gracias por agregarme ^^ Hazlo también si puedes a nekmo@nekmo.org que lo uso más. Si usas Jabber, puedes encontrarnos también en la sala: eolfansub@salas.nekmo.org


No, no urge para nada, es uno de los muchos proyectos que tengo pensado hacer ahora en vacaciones. De todas formas igual me convenía mejor dejar el Arduino y conectar la pantalla directamente a la RPI, porque pensándolo bien es algo tontería tener Arduino de por medio, si pongo la pantalla en la RPI directamente sería más fácil y más estable seguramente. La única razón por la que tengo el Arduino es porque tenía pensado tener más cosillas por ahí, como relés, detectores de cosas y demás, pero siempre puedo hacerlo con la rpi. Pensaré a ver cómo hago finalmente.

El arduino tendría más sentido si fuese conectado a algo que no tuviese puertos GPIO, o si estuviese por ahí sin conectar a nada, por tanto recibiendo los datos él (mediante un Ethernet Shield o algo así).

Creo que va a ir mejor con la RPI directamente, además de que te quitas un componente de por medio.
CannonlakeEvo está baneado por "Troll"
@capitanquartz
Estaré encantado de probarlo y muy agradecido.
Acabo de lanzar la nueva versión de v0.2.4 la cual se centra en solucionar fallos, mayor compatibilidad entre sistemas, y documentar monitores...

La nueva versión incluye los siguientes cambios:

Podéis instalar la nueva versión con:
pip install -U simple-monitor-alert


Habrá al menos una release más antes de la versión 0.3.0, la cual tendrá muchos cambios entre los que se incluye cambiar la los parámetros de los observables con una nueva forma que sustituya al actual expected. La lista completa de cambios puede verse aquí.

Más información en: http://nekmo.com/es/blog/release-v0-2-4 ... tor-alert/

@CannonlakeEvo a cualquier cosa dime ;-)
@1985a ya empieza a estar en pruebas el paquete y repositorio de Arch Linux [360º] [360º] [360º]

Versión en AUR: https://aur.archlinux.org/packages/simp ... tor-alert/

Repositorio propio:
[nekmo]
Server = https://repos.nekmo.org/archlinux/


Añadir firma:
pacman-key -r FC4498F5 && pacman-key --lsign-key FC4498F5


Fingerprint para verificar:
F865 CCCC 8AD2 393B DDCF  E2A2 A485 D679 FC44 98F5
@capitanquartz
Esta tarde lo probare cuando tenga un poco de tiempo libre, ya que estoy en el trabajo y no tengo equipo de prueba aquí disponible.
Gracias por el aviso.

edit: Listo, ya esta todo verificado y funcionando
Imagen
Probaste monit y munin ? Igual te has pegao un curro para nada. Se instalan facilmente desde gestor de paquetes.

Miralos, igual te interesan, sobretodo munin, tal vez para complementar tu monitorización con graficas, tal vez para añadir nueva funcionalidad a tu "simple monitor alert".

Voy a instalarlo y probarlo a ver que tal.


Edito: Joder que currada, no me esperaba algo tan cañero vieniendo así de un foro, de un usuario que se ha hecho una app ... :O

Cuando ejecuto el comando sma results, me sale todo OK en verde, menos la RAM, que sale FAIL en rojo. ¿ Que significa un fallo en la RAM ?
cercata escribió:Probaste monit y munin ? Igual te has pegao un curro para nada. Se instalan facilmente desde gestor de paquetes.

Miralos, igual te interesan, sobretodo munin, tal vez para complementar tu monitorización con graficas, tal vez para añadir nueva funcionalidad a tu "simple monitor alert".

Voy a instalarlo y probarlo a ver que tal.


Edito: Joder que currada, no me esperaba algo tan cañero vieniendo así de un foro, de un usuario que se ha hecho una app ... :O

Cuando ejecuto el comando sma results, me sale todo OK en verde, menos la RAM, que sale FAIL en rojo. ¿ Que significa un fallo en la RAM ?

Monit, Munin y ese tipo de aplicaciones suelen servir para monitorizar, no para alertas. Mi programa se encarga de cubrir ese hueco :D

Lo del fallo de la RAM puede significar que está demasiado llena. Pero puedes cambiar los niveles de alerta si crees que no es un problema.
40 respuestas