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/random
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!
Zespół Adwokacki Dyskrecja

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!
Zespół Adwokacki Dyskrecja

Offline

 

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

  Jacekalex - Podobno człowiek...;)

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

Re: bash - analizowanie logow w czasie rzeczywistym

Perl

Tu masz przykład parsowania loga Snorta, wystarczy zrobić uchwyt pliku dla pliku logu - żeby skrypt go czytał, funkcję warunkową if $regex =~/wartość/  then {akcja do wykonania}, i gotowe.

A tu przykład innego skrypta, 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!
Zespół Adwokacki Dyskrecja

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!
Zespół Adwokacki Dyskrecja

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!
Zespół Adwokacki Dyskrecja

Offline

 

Stopka forum

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