Adott egy hosting site, 1000+ domainnel. Mindegyiknek kulon apache.log, 365 napra visszamenoen. A fonokom azt szeretne, hogy
1. toltsuk le az osszes logot, datummal ellatva es a domainnek megfeelo konyvtarba
2. a logrotate tovabbra is rotalja, egy ev utan kuka, de nalunk legyen meg a mentes.
Ha nem kellene a datum a logokba, akkor egyszerubb lenne, wget a kliensen es find a szerveren, ami kirakja egy kulon konyvtarba mondjuk.
Van valakinek otlete? Tehat, megegyszer
/host/xy.hu/log/*
/host/zx.hu/log/*
.
.
.
stb
A "log" konyvtarakban naponta valtozo logok, tehat a wget -c sem a legjobb. (masnap mar a log.100.gz ugye log.101.gz nevre fog hallgatni)
- 1571 megtekintés
Hozzászólások
Átirányítás nem megy wget-en keresztül?
...mert akkor lehetne egy php-val generált fájlt tölteni, ami átirányit
a dátum szerint és elnevezi a fájlt.
Pl.:
<html><head>
<title>Átirányítás</title>
<META http-equiv="refresh" content="0; url=http://111.222.333.444/valami.txt">
</head>
</html>
- A hozzászóláshoz be kell jelentkezni
logrotateben postrotate scriptbe cp domain.1.log domain.$(date +%Y%m%d).log ?
- A hozzászóláshoz be kell jelentkezni
Koszi, ez lesz. Addig is, a helyes find parancs:
for i in *
do
find /host/$i/logs -name "*.log.1" >> biba.txt
done
Aztan a biba txt-ben mar benne van eleresi uttal egyutt az osszes friss log (mar ha a logrotate utan futtatom)
Most megprobalom ezt feldolgoztatni, hogy a konyvtar nevebol (ami $i volt elobb) es a file datumabol vegye a file nevet....
- A hozzászóláshoz be kell jelentkezni
Javitom, ez a find helyes kimetet genereal :)
for i in *
do
find /host/$i/logs -name "*.log.1" -printf "%h/%f/%AY%Am%Ad\n" >> xx
done
Es igy ez lesz a kimenet:
/hosting/biba.hu/logs/naplo1-error.log.1/20080802
/hosting/biba.hu/logs/naplo1-access.log.1/20080806
/hosting/kisbiba.hu/logs/naplo1-error.log.1/20080805
/hosting/kisbiba/logs/naplo1-access.log.1/20080806
Bar, azt sose tudom, hogy a file 3 ideje kozul melyik a fontos.
Ezt most az Access, de lehetne Create vagy Modified is. Utananezek.
- A hozzászóláshoz be kell jelentkezni
Na, megint haladtam. Most mar viszont eros script gondom van. Megprobalom beidezni:
cd /host
for i in *
do
find /host/$i/logs -name "*.log.1" -printf "%h/%f/%CY%Cm%Cd\n" \
| cp $(awk -F/ {'print "/"$2"/"$3"/"$4"/"$5'}) /home/celtic/tmp/$(awk -F/ {'print $2".log"'})
done
Az elso awk jo, a masodik viszont nem...Egyszeruen a "/home/celtic/tmp/" konyvtarba pakolja, atnevezes nelkul, az elso awk-ban megadott nevvel...Ha kihagyom az eleresi utat, akkor meg felul akarja magat irni.
Otlet?
Update:
Egy regebbi topic alapjan volt eg yilyen otletem is:
while read
do
a=`awk -F/ {'print "/"$2"/"$3"/"$4'}`
b=`awk -F/ {'print $3"."$5"."$6".log"'}`
echo $a $b
done < /home/celtic/tmp/xx
Itt $a erteke megfelelo, de $b megint nem jo...
Hogyan lehetne megcsinalni, hoyg egy file tobb soran elvegezni ugyanazt az awk muveletet?
- A hozzászóláshoz be kell jelentkezni
Ehhez mit szolsz?
for lf in `find /host/ -name "*.log.1"`
do
cp $lf /home/celtic/tmp/`echo $lf | awk -F/ '{print $2}'`_`stat $lf | awk '/Change/ {print $2}'`.log
done
A tobb file-on xargs-al lehet vegigmenni, de a find-nak is van -exec kapcsoloja.
- A hozzászóláshoz be kell jelentkezni
Koszi, otletnek jo, de vmiert osszesen 27 darab file-on csinalta meg. Meg gondolkodok rajta. Biztos van valami megoldas.
- A hozzászóláshoz be kell jelentkezni
A jövőre nézve syslog-ng -t javaslom, azzal tök jól lehet bele dátumot tenni. A logolás mehet egy fileba, csak a logformattal tedd be a vhost nevet és utána szét lehet szedni.
- A hozzászóláshoz be kell jelentkezni
Énis ebbe az irányba indulnék el. És ugye syslog-ng-vel tök egyszerűen át lehet nyomni a(z új) logokat egy másik gépre...
- A hozzászóláshoz be kell jelentkezni
Koszi, az otlet jo, de jelenleg nem kivitelezheto. Jelenleg a rendelkezesemre allo eszkozokkel kellene ezt megoldani. Foleg, az eddigi site-onkent 365 (vagy van, ahol 2*365 vagy 3*365) log lementeset es egyertelmu (sitenev es datum) azonositasat.
- A hozzászóláshoz be kell jelentkezni
Miért nem oldható meg? A helyi gépen megy a syslog-ng és mondasz neki filenevet jól. Nagyon okos ám én adnék neki egy próbát, mert valszin a legkisebb szívást azzal fogod elérni és később is jól bővíthető. Nekünk alapjáraton kb. napi 2 millió hit megy (ha nincs vmi külön kampányos szezonális téma) syslog-ng-be, külön logszerverre.
- A hozzászóláshoz be kell jelentkezni
Mert nem en vagyok a szerver tulaja. Azaz, ha a tulaj ugy dont, hogy syslog-ng lesz, akkor az lesz. Ha ugy dont, hoyg marad a syslog, akkor marad.
- A hozzászóláshoz be kell jelentkezni
Syslog is át tudja küldeni másik gépre, ott meg már fel tudod dolgozni syslog-ng-vel:
www.oreillynet.com
- A hozzászóláshoz be kell jelentkezni
Node nem opció a másik gép perpill.
Celtic: annyira megmondja a megrendelő, hogy mivel menjen a dolog? Elég ritka az olyan. :)
- A hozzászóláshoz be kell jelentkezni
Nemnem. Ez ennel bonyolultabb. Tudod, a ket tuz esete:
A. fonok (mellesleg rendszergazda, en a beosztottja vagyok) azt mondja, hogy nem kell ilyen, nagy helyet foglal meg minden, tehat ne csinaljam.
B. fonok (ugyvezeto) meg azt mondja, hogy kell Neki, tehat csinaljam meg.
C. beosztott (en) pedig csinalna is meg nem is.
Ebbol kovetkezik, hoyg a logolasi mechanizmuson nem valtoztathatok, az marad ugy, ahoyg van, viszont az eddig elkeszult (es ezutan elkeszulo) logokat szepen lementem az eddigi formatumban.
- A hozzászóláshoz be kell jelentkezni
és olvasási jog a saját log könyvtárára, és egy sym link a mappájába? (nem értek hozzá, csak ötlet)
- A hozzászóláshoz be kell jelentkezni
Kicsit perverz modon, igy sikerult megoldani:
(Keretik nem karomkodni, tudom, nagyon csunya, de legalabb mukodik)
mkdir /tmp/celtic
cd /host
for i in *
do
find /host/$i/logs -name "*.log.1" -printf "%h/%f/%CY%Cm%Cd\n" 2>/dev/null | \
awk -F/ '{print $3"_"$5"_"$6}' >> /tmp/logkeszito1
done
awk -F_ '{print "cp -p /host/"$1"/logs/"$2 " /tmp/celtic/"$1"_"$3"_"$2}' \ /tmp/logkeszito1 > /tmp/log.sh
sh /tmp/log.sh
cd /tmp
tar -zcf `date +%y%m%d`log.tar.gz /tmp/celtic
rm /tmp/logkeszito1
rm /tmp/log.sh
rm -fr /tmp/celtic/*
rmdir /tmp/celtic
mv /tmp/`date +%y%m%d`log.tar.gz /home/celtic/logok
exit 0
Aztan onnan mar egy wget paranccsal leszedem.
Meglatom, mekkora lesz a merete, es egy masik find-dal torlom a "/home/celtic/logok" konyvtarbol az X napnal regebbi logokat, mondjuk egy hetig marad. Egy het alatt biztos, hogy leszedi a masik gep. (szabi, nethiany, anyamtyukja jon is kozbe).
A backup gepen meg maradhatnak korlatlan ideig, ha a wincsi birja.
Jo, hat 30M egy napi log tar.gz-ben, szoval elmegy :)
- A hozzászóláshoz be kell jelentkezni
Nem biztonságosabb ha a wget-es parancs (leszedő) gondoskodik a régiek törléséről? (ssh)
- A hozzászóláshoz be kell jelentkezni
Nem tudom. Jelenleg nekem megfelel, ha a szerveren egy find-xargs-rm trio letorli.
- A hozzászóláshoz be kell jelentkezni