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  2012-04-27 18:27:01

  desavil - Użytkownik

desavil
Użytkownik
Zarejestrowany: 2010-11-02

Backup logów połączeń

Witam,
Tworzę sobie logi połączeń za pomocą takiego skryptu:

Kod:

#!/bin/bash

killall tcpdump
log_dir='/home/logs'
log_name=tcpdump_`date '+%d'`-`date '+%m'`-`date '+%Y'`_`date '+%H'`-`date '+%M'`-`date '+%S'`
if [ ! -d $log_dir ]
then
mkdir $log_dir
fi
tcpdump -w $log_dir/$log_name.log -qn 'tcp[tcpflags] & (tcp-syn|tcp-fin|tcp-rst) != 0 or icmp[0] != 0' &
#tar -cjf TUTAJ PAKOWANIE

Skrypt jest uruchamiany w cron codziennie o północy oraz podczas każdego restartu/uruchomienia serwera.

Chciałbym w tym samym pliku najlepiej wykonać pakowanie do tar.bz2 pliku/plików z logami z całego dnia oraz aby nazwa archiwum była taka sama jak dzień, którego dotyczą logi.

Czyli np.
- O północy/przy restarcie serwer uruchamiany jest plik
- Tworzy się plik z logami
- Wykonuje się pakowanie logów jeżeli zaczął logować się już następny dzień
- Plik tekstowy z logami zostaje usunięty.

Pliki z danego dnia mają format:
tcpdump_D-M-Y_G-M-S.log
Czyli jeżeli w danym dniu niema żadnych restartów serwera jest tylko jeden plik z logami, jeżeli są to w zależności od ilości restartów tyle jest plików.

Teraz chodzi mi o to, aby podczas każdego uruchomieniu pliku ze skryptem była wykonywana archiwizacja tych plików (jeżeli są jakieś nie skompresowane) z dnia poprzedniego (ponieważ po killall tcpdump już wykonuje się logowanie na nowy dzień/wznowienie po restarcie serwera) oraz ew. nie skompresowanych plików wcześniej.

Podaję przykład:
Plik/i z logów z dnia 26.04.2012
tcpdump_26-04-2012_01-00-00.log
tcpdump_26-04-2012_06-10-00.log

Tworzy się z tego archiwum o nazwie: tcpdump_26-04-2012.tar.bz2 i zawiera te dwa pliki logów.
Jeżeli nie było żadnych restartów maszyny to jak wiadomo jest tylko jeden plik, który jest również kompresowany.

Oczywiście logi, które są tworzone obecnie na dany dzień nie są jeszcze kompresowane.

Ostatnio edytowany przez desavil (2012-04-27 20:24:19)

Offline

 

#2  2012-04-28 07:50:26

  andreq - Członek DUG

andreq
Członek DUG
Skąd: Nisko
Zarejestrowany: 2005-01-11

Re: Backup logów połączeń

Wyszukanie starszych niż 1 dzień:

Kod:

find $log_dir -name *.log -mtime +1

Offline

 

#3  2012-04-28 13:29:06

  rafal - Użytkownik

rafal
Użytkownik
Zarejestrowany: 2012-04-15

Re: Backup logów połączeń

Być może to przesada, ale możesz uruchamiać tcpdump przy starcie i logować cały czas do tego samego pliku. A do archiwizacji logów itp wykorzystać logrotate bo właśnie do takich rzeczy został stworzony. Możesz tak ustawić logrotate aby podczas uruchomienia zabił proces tcpdump, zarchiwizował logi i uruchomił go ponownie. Po więcej odsyłam do dokumentacji logrotate.

Offline

 

#4  2012-04-28 15:45:22

  desavil - Użytkownik

desavil
Użytkownik
Zarejestrowany: 2010-11-02

Re: Backup logów połączeń

Też myślałem o logrotate, ale nie umiałem tego skonfigurować.
Poza tym nie wyjdzie z logowaniem do jednego pliku, gdyż jeżeli nastąpi restart serwera i zostanie wykonane logowanie do tego samego pliku to poprzednia zawartość zostanie usunięta, co za tym idzie - stracę część logów.

Offline

 

#5  2012-04-28 16:18:51

  Jacekalex - Podobno człowiek...;)

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

Re: Backup logów połączeń

[quote=desavil]Też myślałem o logrotate, [b]ale nie umiałem tego skonfigurować[/b].
Poza tym nie wyjdzie z logowaniem do jednego pliku, gdyż jeżeli nastąpi restart serwera i zostanie wykonane logowanie do tego samego pliku to poprzednia zawartość zostanie usunięta, co za tym idzie - stracę część logów.[/quote]
Piszesz poważnie?

Kod:

cat /etc/logrotate.d/grsec
/var/log/grsec/*.log {
    daily
    rotate 3
    compress
    delaycompress
    missingok
    notifempty
    create 0640 root root
    sharedscripts
}

i dziala.

Czy taki konfig jest dużo trudniejszy od basha?

W

Kod:

man logrotate

masz kilka innych przykładów.

Pozdro
;-)


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

Offline

 

#6  2012-04-28 17:06:59

  desavil - Użytkownik

desavil
Użytkownik
Zarejestrowany: 2010-11-02

Re: Backup logów połączeń

Tak, ale jak to działa skoro wykonam sobie skrypt, który uruchomi tcpdumpa od nowa przed rotacją, to nowy plik z logami który będzie się tworzył również będzie archiwizowany... :/
Tak samo jak z nazwami archiwum, nie chcę aby w jednym archiwum były np. logi z kilku dni jeżeli serwer padł lub coś się stało i nie były w tym czasie wykonane przez logrotate.

Jak by to było takie proste nie pisał bym postu na tym forum..

Ostatnio edytowany przez desavil (2012-04-28 17:09:53)

Offline

 

#7  2012-04-28 17:07:37

  Piotr3ks - Też człowiek :-)

Piotr3ks
Też człowiek :-)
Skąd: Białystok
Zarejestrowany: 2007-06-24

Re: Backup logów połączeń

[quote=desavil]Też myślałem o logrotate, ale nie umiałem tego skonfigurować.
Poza tym nie wyjdzie z logowaniem do jednego pliku, gdyż jeżeli nastąpi restart serwera i zostanie wykonane logowanie do tego samego pliku to poprzednia zawartość zostanie usunięta, co za tym idzie - stracę część logów.[/quote]
Chyba, że sprawdzisz czy plik z logami już istnieje ... i wtedy utworzysz drugi plik z logami. Ale mimo wszystko rozwiązanie z logrotate jakby fajniejsze jest :-)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)

[ Generated in 0.007 seconds, 9 queries executed ]

Informacje debugowania

Time (s) Query
0.00012 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='3.21.246.53' WHERE u.id=1
0.00065 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.21.246.53', 1732448892)
0.00049 SELECT * FROM punbb_online WHERE logged<1732448592
0.00047 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=21171 AND t.moved_to IS NULL
0.00005 SELECT search_for, replace_with FROM punbb_censoring
0.00154 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=21171 ORDER BY p.id LIMIT 0,25
0.00083 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=21171
Total query time: 0.00518 s