Toon posts:

[BASH] Tail, grep en Pushover

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hi,

Ik heb een logfile welke live moet worden uitgelezen en bij een match een Pushover melding versturen.
Het werkt, echter, het duurt lang voor de Pushover wordt verzonden. Waardoor zou dit komen en hoe kan ik het versnellen?

code:
1
2
3
#!/bin/bash
tail -n 0 -f /var/log/rfc/rfc.log | awk '
        /admin/ { system("curl -s -F \"token=TOKEN\" -F \"user=USER\" -F \"title=test\" -F \"message=bericht test\" https://api.pushover.net/1/messages.json") }'

Beste antwoord (via Verwijderd op 30-03-2020 09:09)


  • MartinMeijerink
  • Registratie: Juli 2008
  • Laatst online: 21-09 21:50

MartinMeijerink

Computerrorist

Verwijderd schreef op zondag 29 maart 2020 @ 10:12:
[...]


Ik zie nergens een match met keywords optie?
Ja, die moet je dan even greppen, deze stuurt elke nieuwe regel, maar met grep kun je dan filteren op keyword, het is ook meer als voorbeeld hoe het met een while read loop kan oplossen, dus dan maak je er dit bv. van:

code:
1
tail -fn0 /var/log/rfc/rfc.log|while read;do echo "$REPLY"|grep -q "user -  admin logged " && curl -s --form "token=$apptoken" --form "sound=siren" --form "user=$user" --form "message=$REPLY" https://api.pushover.net/1/messages.json;done


Ik grep dus niet slechts op admin, want dan zou "badminton" ook een match geven :)

An unbreakable toy is useful to break other toys

Alle reacties


Acties:
  • +1 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 21-09 18:18
Meten is weten, dus splits het geheel eens op in stappen en bepaal dan welke stap er lang over doet.
Ik zou van achter naar voren werken denk ik, aangezien die curl aanroep van een of andere API nog wel eens tegen kan vallen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heb er een echo tussen gezet maar dat duurde ruim 3 minuten:

code:
1
2
tail -n 0 -f /var/log/rfc/rfc.log | awk '
        /admin/ { system("echo \"test\" curl -s -F \"token=TOKEN\" -F \"user=USERr\" -F \"title=test\" -F \"message=bericht test\" https://api.pushover.net/1/messages.json") }'


Logfile zelf is maar 166K.

[ Voor 13% gewijzigd door Verwijderd op 28-03-2020 15:33 ]


Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
Misschien is de tail output gebufferd. Volgens internetbronnen kan je ‘stdbuf’ hiertegen gebruiken.

stdbuf -o0 tail -f logfile.log | ...

Of zoiets

tail -f logfile.log | stdbuf -o0 awk -F" " '{print $1, $2, $7, $8}'

[ Voor 22% gewijzigd door Sendy op 28-03-2020 15:33 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Sendy schreef op zaterdag 28 maart 2020 @ 15:32:
Misschien is de tail output gebufferd. Volgens internetbronnen kan je ‘stdbuf’ hiertegen gebruiken.

stdbuf -o0 tail -f logfile.log | ...

Of zoiets

tail -f logfile.log | stdbuf -o0 awk -F" " '{print $1, $2, $7, $8}'
Ok, ga ik proberen.

PS.:
Did you just scared me? Thanks for the heads up! _/-\o_

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
No luck:


code:
1
2
tail -n 0 -f /var/log/rfc/rfc.log | stdbuf -o0 awk '
        /admin/ { system("echo \"test\" curl -s -F \"token=WONTFOOLMETWICE\" -F \"user=WONTFOOLMETWICEr\" -F \"title=test\" -F \"message=bericht test\" https://api.pushover.net/1/messages.json") }'

[ Voor 3% gewijzigd door Verwijderd op 28-03-2020 15:38 ]


Acties:
  • 0 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 21-09 18:18
Geef nou eens de tijden in millies van alle subonderdelen ?

Acties:
  • 0 Henk 'm!

  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 09:28

The Eagle

I wear my sunglasses at night

Ik zou hier zelf iets als apache Flume voor gebruiken, icm een http sink. http://flume.apache.org/FlumeUserGuide.html#http-sink
Logfiles tailen zit er standaard in en er worden tig sinks ondersteund, dus kan ook nog naar andere of meerdere endpoints als je wilt :)

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


Acties:
  • 0 Henk 'm!

  • ShitHappens
  • Registratie: Juli 2008
  • Laatst online: 20-09 19:09
Weten we zeker dat met awk genoeg tijd heeft de entry te vinden met -n 0? Duurt het ook 3 minuten als je handmatig een curl doet om een notificatie te sturen?

Persoonlijk zou ik trouwens iets als log monitoring overlaten aan een tool als Datadog, maar dat zou hier misschien een beetje overkill kunnen zijn :p

Acties:
  • 0 Henk 'm!

  • aawe mwan
  • Registratie: December 2002
  • Laatst online: 21-09 20:59

aawe mwan

Wat ook leuk is:

Ik ben er ook eens mee bezig geweest; volgens mij heeft awk zelf ook nog een buffer, die je zelf elke regel met fflush() leeg moet maken als je meteen output wilt zien.

Waar ik verder nog last van had is dat de buffering bij elk nieuw stukje pipe opnieuw weer op "groot" komt te staan, ik mijn geval heb ik dat niet met stdbuf opgelost (dat commando kende ik nog niet), maar door voor elk commando op te zoeken hoe je de buffering op "line buffering" moet zetten, want dat werkte het best.

[ Voor 28% gewijzigd door aawe mwan op 28-03-2020 17:03 ]

„Ik kan ook ICT, want heel moeilijk is dit niet”


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Waar hoort mijn topic?
DEV >> NOS

[ Voor 53% gewijzigd door RobIII op 28-03-2020 17:00 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • MartinMeijerink
  • Registratie: Juli 2008
  • Laatst online: 21-09 21:50

MartinMeijerink

Computerrorist

Ik doe het gewoon zo, altijd meteen resultaat:

code:
1
tail -fn0 /var/log/rfc/rfc.log|while read;do curl -s --form "token=$apptoken" --form "sound=siren" --form "user=$user" --form "message=$REPLY" https://api.pushover.net/1/messages.json;done

An unbreakable toy is useful to break other toys


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
MartinMeijerink schreef op zaterdag 28 maart 2020 @ 18:24:
Ik doe het gewoon zo, altijd meteen resultaat:

code:
1
tail -fn0 /var/log/rfc/rfc.log|while read;do curl -s --form "token=$apptoken" --form "sound=siren" --form "user=$user" --form "message=$REPLY" https://api.pushover.net/1/messages.json;done
Ik zie nergens een match met keywords optie?

Acties:
  • 0 Henk 'm!

  • aawe mwan
  • Registratie: December 2002
  • Laatst online: 21-09 20:59

aawe mwan

Wat ook leuk is:

Deze licht aangepaste versie van jouw code draait bij mij onder Ubuntu gewoon zoals bedoeld:

code:
1
tail -n 0 -f /var/log/auth.log | awk '/systemd-logind/ { system("echo \"test\" curl -s -F \"token=WONTFOOLMETWICE\" -F \"user=WONTFOOLMETWICEr\" -F \"title=test\" -F \"message=bericht test\" https://api.pushover.net/1/messages.json") }'


Dit geeft direct een regel bij inloggen en bij uitloggen.

Krijg je wel meteen wat te zien als je een kale tail -f op je logfile gebruikt?

„Ik kan ook ICT, want heel moeilijk is dit niet”


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
aawe mwan schreef op zondag 29 maart 2020 @ 10:42:
Deze licht aangepaste versie van jouw code draait bij mij onder Ubuntu gewoon zoals bedoeld:

code:
1
tail -n 0 -f /var/log/auth.log | awk '/systemd-logind/ { system("echo \"test\" curl -s -F \"token=WONTFOOLMETWICE\" -F \"user=WONTFOOLMETWICEr\" -F \"title=test\" -F \"message=bericht test\" https://api.pushover.net/1/messages.json") }'


Dit geeft direct een regel bij inloggen en bij uitloggen.

Krijg je wel meteen wat te zien als je een kale tail -f op je logfile gebruikt?
Deze lijkt niet te reageren op een match:

code:
1
2
3
#!/bin/bash

tail -n 0 -f /var/log/rfc/rfc.log | awk '/systemd-logind/ { system("echo \"admin\" curl -s -F \"token=token\" -F \"user=user\" -F \"title=NOC\" -F \"message=KEYWORD DETECTED: admin\" https://api.pushover.net/1/messages.json") }'



Sample log:

code:
1
2
3
Mar 29 11:01:00 - XX.XXX.21X.7X - MT_RFC_ - user -  admin logged in from 10.13.13.15 via winbox
Mar 29 11:01:05 - 127.0.0.1 - noc - kernel: - [ 3149.250117] [UFW BLOCK] IN=ens3 OUT= MAC=52:54:XX:XX:18:47:84:c1:c1:00:37:00:08:00 SRC=195.XX.XX.181 DST=136.XX.XXX.198 LEN=40 TOS=0x00 PREC=0x00 TTL=245 ID=47744 PROTO=TCP SPT=49294 DPT=61118 WINDOW=1024 RES=0x00 SYN URGP=0
Mar 29 11:01:08 - XX.XXX.21X.7X - MT_RFC_ - user -  admin logged out from 10.13.13.15 via winbox

Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • MartinMeijerink
  • Registratie: Juli 2008
  • Laatst online: 21-09 21:50

MartinMeijerink

Computerrorist

Verwijderd schreef op zondag 29 maart 2020 @ 10:12:
[...]


Ik zie nergens een match met keywords optie?
Ja, die moet je dan even greppen, deze stuurt elke nieuwe regel, maar met grep kun je dan filteren op keyword, het is ook meer als voorbeeld hoe het met een while read loop kan oplossen, dus dan maak je er dit bv. van:

code:
1
tail -fn0 /var/log/rfc/rfc.log|while read;do echo "$REPLY"|grep -q "user -  admin logged " && curl -s --form "token=$apptoken" --form "sound=siren" --form "user=$user" --form "message=$REPLY" https://api.pushover.net/1/messages.json;done


Ik grep dus niet slechts op admin, want dan zou "badminton" ook een match geven :)

An unbreakable toy is useful to break other toys


Acties:
  • +1 Henk 'm!

Verwijderd

Topicstarter
MartinMeijerink schreef op zondag 29 maart 2020 @ 21:46:
[...]

Ja, die moet je dan even greppen, deze stuurt elke nieuwe regel, maar met grep kun je dan filteren op keyword, het is ook meer als voorbeeld hoe het met een while read loop kan oplossen, dus dan maak je er dit bv. van:

code:
1
tail -fn0 /var/log/rfc/rfc.log|while read;do echo "$REPLY"|grep -q "user -  admin logged " && curl -s --form "token=$apptoken" --form "sound=siren" --form "user=$user" --form "message=$REPLY" https://api.pushover.net/1/messages.json;done


Ik grep dus niet slechts op admin, want dan zou "badminton" ook een match geven :)
Yes! dit werkt!

Voor de volledigheid:
code:
1
2
3
!/bin/bash

tail -fn0 /var/log/rfc/rfc.log|while read;do echo "$REPLY"|grep -q "user -  admin logged\|changed by admin" && curl -s --form "sound=cosmic" --form "token=TOKEN" --form "user=USER" --form "title=LOG CHECKER" --form "message=$REPLY" https://api.pushover.net/1/messages.json;done
Pagina: 1