Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2014-09-07 14:49:36

  DeWu - Użytkownik

DeWu
Użytkownik
Zarejestrowany: 2013-03-26

bash - analizowanie logow w czasie rzeczywistym

Witam
Szukam prostego skryptu, który na żywo będzie analizował powiedzmy plik /var/log/aplikacja.log i jeśli tylko pojawi się w nim słowo "error" wykona polecenie killall aplikacja. Googlowałem, próbowałem samodzielnie coś skleić z while i tail -f /var/log/aplikacja.log ale nic mi nie wychodziło.
Z góry dzięki za pomoc

Offline

 

#2  2014-09-07 15:05:26

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: bash - analizowanie logow w czasie rzeczywistym

Failban? jest od tego między innymi.

Skrypcio?
Ja bym raczej próbował w Perlu, jest bardziej elastyczny pod względem np regexu.


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#3  2014-09-07 15:06:55

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: bash - analizowanie logow w czasie rzeczywistym

a to musi być koniecznie bash? bo mam parę takich domorosłych skryptów, ale w pythonie...
btw. a aplikacja to się sama nie może grzecznie skończyć jak ma errora?


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#4  2014-09-07 15:48:49

  DeWu - Użytkownik

DeWu
Użytkownik
Zarejestrowany: 2013-03-26

Re: bash - analizowanie logow w czasie rzeczywistym

Niestety aplikacja nie moja ani nie mam dostepu do kodu źrodlowego.

o fail2ban slyszalem ale tylko ze potrafi analizowac logi papache'a i zakladac regulki w iptables. O ile przed chwila przeczytalem, ze mozna mu wbic dowolnego regexpa to nie wiem, jak ustawic mu akcje jak ma wykonywac czyli amiast iptables xxx killall aplikacja.

Moze byc i python. Pewnie w jednym jak i drugim jezyku ten skrypt nie zajmie wiecej niz kilka linijek

Offline

 

#5  2014-09-08 08:45:33

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: bash - analizowanie logow w czasie rzeczywistym

Python:

Kod:

#!/usr/bin/env python
import sys
while True:
   a=sys.stdin.readline()
   if !a:
       break
   if 'error' in a:
       akcja()

gdzie zamiast "akcja()" możesz zrobić sobie cokolwiek, np. (importując subprocess):

Kod:

    subprocess.call(["killall","aplikacja"])

W bashu masz do tego jedną linijkę:

Kod:

tail -F /var/log/aplikacja.log | python moj_program.py

Może być?


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#6  2014-09-08 09:13:08

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: bash - analizowanie logow w czasie rzeczywistym

Perl

Tu masz [url=http://forum.dug.net.pl/viewtopic.php?id=22977]przykład[/url] parsowania loga Snorta, wystarczy zrobić uchwyt pliku dla pliku logu - żeby skrypt go czytał, funkcję warunkową [b]if $regex =~/wartość/  then {akcja do wykonania}[/b], i gotowe.

A tu przykład innego [url=http://jacekalex.sh.dug.net.pl/rssperl]skrypta[/url], gdzie ładnie widać akcje warunkowe.

Pozdro
;-)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#7  2014-09-08 10:40:10

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: bash - analizowanie logow w czasie rzeczywistym

jednak zamiast uchwytu do pliku wolę follow name - rozwiązanie sprawdzone i odporne na logrotate.


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#8  2014-09-08 11:28:14

  DeWu - Użytkownik

DeWu
Użytkownik
Zarejestrowany: 2013-03-26

Re: bash - analizowanie logow w czasie rzeczywistym

To rozwiazanie ze stdout  pałeczką jest dla mnie idealne bo tak naprawdę plik /var/log/aplikacja.log tworze ja właśnie zapisujac tam stdout :)  Spróbowałem uruchomić skrypt ale dostaję Syntax error przy !a: Proszę o pomoc bo nie znam Pythona totalnie.

Offline

 

#9  2014-09-08 11:39:53

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: bash - analizowanie logow w czasie rzeczywistym

przepraszam najmocniej ale to przed kawą było.

Kod:

if not a:

i jeszcze jeśli chcesz użyć subprocess:

Kod:

import sys, subprocess

(to już znajdziesz gdzie masz podmienić)

Ostatnio edytowany przez ethanak (2014-09-08 11:42:29)


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

#10  2014-09-08 14:24:01

  DeWu - Użytkownik

DeWu
Użytkownik
Zarejestrowany: 2013-03-26

Re: bash - analizowanie logow w czasie rzeczywistym

Dzięki, to jest to co potrzebowałem, browar.

Jeszcze tylko pytanie jak zmodyfikować ten warunek, jeżeli w stdout pojawia się 'ERROR' jak i 'error' (oba stanowią tylko fragment stringa) ?

Ostatnio edytowany przez DeWu (2014-09-08 15:14:32)

Offline

 

#11  2014-09-09 09:34:59

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: bash - analizowanie logow w czasie rzeczywistym

np.

Kod:

if 'error' in a.lower():

Przy czymś bardziej skomplikowanym trzeba się bawić w regexpy, np.:

Kod:

if re.search(r'\berror\b',a,re.I):

uprzednio dodając 're' do importu, czyli:

Kod:

import sys, subprocess, re

we właściwym miejscu - znajdzie napis 'error' niezależnie od wielkości znaków, ale tylko jeśli stanowi pełne słowo.

Ostatnio edytowany przez ethanak (2014-09-09 09:35:20)


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)

[ Generated in 0.011 seconds, 13 queries executed ]

Informacje debugowania

Time (s) Query
0.00015 SET CHARSET latin2
0.00005 SET NAMES latin2
0.00098 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.219.47.239' WHERE u.id=1
0.00062 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.219.47.239', 1732572484)
0.00040 SELECT * FROM punbb_online WHERE logged<1732572184
0.00069 DELETE FROM punbb_online WHERE ident='18.116.85.108'
0.00067 DELETE FROM punbb_online WHERE ident='3.14.135.82'
0.00067 SELECT topic_id FROM punbb_posts WHERE id=275054
0.00148 SELECT id FROM punbb_posts WHERE topic_id=26370 ORDER BY posted
0.00058 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=26370 AND t.moved_to IS NULL
0.00005 SELECT search_for, replace_with FROM punbb_censoring
0.00086 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=26370 ORDER BY p.id LIMIT 0,25
0.00072 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=26370
Total query time: 0.00792 s