BandaAncha.eu

Comunidad de usuarios
de fibra, móvil y ADSL

Aplicación que conecte periódicamente por SSH y analice logs del server

Josh

Estoy buscando una app que periódicamente conecte por ssh con mi server, lea el contenido de unos logs y si dan positivo ciertas expresiones regulares, que me avise de alguna forma.

Se que es muy específico lo que pido y no se si existe, pero me resultaría muy útil para la administración de BA 😉

En escritorio utilizo macOS.

rbetancor

Tienes varias opciones de mas simples a mas complejas ...

puedes usar logwatch y que te mande un aviso cuando los patrones se cumplan, puedes hacerte un playbook en ansible que se ejecute desde un cron, puedes usar monit ... vamos ... que tienes donde elegir.

Lo más lógico sería usar logwatch

BocaDePez
BocaDePez

Es mejor lo contrario, que configures algo en tu server para que te envíe un email o un SMS.

NetVicious

O lo que dice rbetancor con logwatch o logcheck que además te permitiría controlar logs de sistema y ver otras cosas.

O un simple crontab con un grep (sintaxis de Linux, no sé si servirá para Mac OS X):

grep -v -f fichero_con_varias_expresiones_regulares.regex fichero_log.txt | mail -E -s 'Asunto del correo' direccion_de_correo_destino
BocaDePez
BocaDePez

el propio rsyslog puede hacer lo que dices.

Defines qué expresión regular de qué fichero quieres buscar, y le dices la acción que quieres (ejecutar un script/aplicacion, mandar un trap snmp, un mail, enviar el evento a un sql ...)

Josh

Lo que busco es algo tipo app de escritorio, no un script que se ejecute cada X, busco tener datos en tiempo real. Ahora mismo tengo un terminal con tail -f activity.log. Sobre lo que me muestra me gustaría aplicar ciertas expresiones regulares que me lancen alertas por nuevo post o envíos spam, etc.

W, [2018-07-23T11:46:54.891228 #3027]  WARN -- : Validator: '//5.45.207.x' ha FALLADO la validación El tema "seguro-ayuda-1731639" no existe
W, [2018-07-23T11:46:59.862142 #3027]  WARN -- : CommentsValidator: '//82.213.215.x'. Envío RECHAZADO por baneado
W, [2018-07-23T11:46:59.862510 #3027]  WARN -- : Validator: '//82.213.215.x' ha FALLADO la validación No es posible enviar más mensajes en este momento (x). Por favor, inténtalo más tarde.
I, [2018-07-23T12:12:43.730792 #3027]  INFO -- : CommentsController: '18/NetVicious/62.43.x.x' ha RESPONDIDO con 'Forum::Reply/2601542'
I, [2018-07-23T12:12:57.978383 #3027]  INFO -- : CommentsController: '//212.170.x.x' ha RESPONDIDO con 'Forum::Reply/2601543'
I, [2018-07-23T12:13:02.285634 #3027]  INFO -- : CommentsController: '18/NetVicious/62.43.x.x' ha EDITADO 'Forum::Reply/2601542'
I, [2018-07-23T12:13:03.292728 #3034]  INFO -- : CommentsController: '567/sjlopezb/176.83.x.x' ha RESPONDIDO con 'Forum::Reply/2601544'
W, [2018-07-23T12:13:37.755562 #3027]  WARN -- : Validator: '//35.187.96.x' ha FALLADO la validación La categoría "operadores/telefonica" no existe
I, [2018-07-23T12:17:11.071068 #3034]  INFO -- : CommentsController: '2/Josh/88.24.x.x' ha RESPONDIDO con 'Forum::Reply/2601545'
I, [2018-07-23T12:33:22.322095 #3027]  INFO -- : StopForumSpam: '//46.229.168.83'. Rechazada la IP '46.229.168.83' no española con actividad en los últimos 365 días: Confianza: 31%, Country: NL, Frecuencia: 2, Último: 21/7/18 05:49
W, [2018-07-23T12:33:22.322470 #3027]  WARN -- : CommentsValidator: '//46.229.168.83'. Envío RECHAZADO por IP en StopForumSpam
W, [2018-07-23T12:33:22.322774 #3027]  WARN -- : Validator: '//46.229.168.83' ha FALLADO la validación No es posible enviar más mensajes en este momento (x). Por favor, inténtalo más tarde.
🗨️ 10
rbetancor
1

¿que hay de malo en un tail -n 1 -f fichero.log | grep -f expresiones.regex? ... lo ejecutas en una consola y listo.

Ya si quieres algo mas 'cool' ... había un log-console hecho en Angular, que te permitía definir tus filtros y te permitía incluso colorear las salidas ... pero me parece un poco rizar-el-rizo

🗨️ 9
Josh
1

No sabía lo del -f para grep, exploraré por ahí. Thanks

🗨️ 5
NetVicious
2

Te lo puse yo más arriba, pero pensado para enviar reportes por correo. 😉

🗨️ 4
sjlopezb
🗨️ 3
sjlopezb

Podía quedarte así:

tail -n 1 -f fichero.log | grep --color=auto -f expresiones.regex? ...

Te muestra el color automáticamente, cuando salta en el log.

Yo lo hago así directamente, sin el '-n 1' en el tail. Es mucho mejor, te lo da en tiempo real.

NetVicious

El tail -n 1 sólo saca la última línea del log. Si te entran dos eventos, no verás el primero de ellos.

Hay que usar tail -f para que tail esté consultando todo el rato si el log tiene nuevas líneas.

🗨️ 1
rbetancor

el -n1 no hace eso, si se producen más de un evento simultáneo, te salen, te lo aseguro .. ;)

el -n1 es que solo quieres que muestre una línea, cuando arranca, en vez del default 10 ... cuando lo usas con -f solo tiene el efecto de 'empezar mostrandote la última línea' en vez de las 10 últimas.

BocaDePez
BocaDePez

Puedes tener datos en tiempo real ejecutando un script cada minuto.

Al tail le puedes poner un grep para filtrar por expresiones regulares.

Y si quieres algo un poquito más fino, te haces un script en python o php.

Pero toda la lógica debe estar en el servidor. Pensar en una app para esto es poner el carro delante de los bueyes.

🗨️ 2
rbetancor

+1 ... también está la típica aproximación 'enterprise' ... osea server rsyslog-ng centralizado y filtros para aburrir, con el logwatch ahí corriendo o algún tipo de correlator de eventos. Todo depende de lo que se quiera uno complicar la vida.

🗨️ 1
sjlopezb

En Debian, tenemos el syslog-ng, que va haciendo ese trabajo, tiene un buen rendimiento para estas cosas. Funciona muy bien bajo la rama estable.

BocaDePez
BocaDePez

Para la parte del aviso si usas Telegram echa un vistazo a su API de bots. Con un curl puedes enviarte a ti mismo un mensaje, ideal para meter en scripts de bash y además te llevas el aviso en móvil y escritorio sin configurar nada más.