logrotate subfolderekkel egyutt

 ( GergA84 | 2019. június 18., kedd - 9:41 )

Sziasztok, Az van hogy vagy egy nagy halom log file egy nagy halom folderben.
A syslog a virtualis gepekrol egy kozponti syslog szerverre tolja a logokat az alabbi strukturaban
/coollect/log/gepnev.internal/syslog,cron,messages,user.log
Namost ezt kellene rotalni es feltolteni s3 ra. Az s3 feltoltessel nincs is gond de a rotalassal igen.
Probaltam az alabbi konfigot

/srv/log/testfolder/*/* {
notifempty
missingok
copytruncate
dateext
size 1M
compress
nosharedscripts
endscript

a cel az lenne hogy a log nevebe beletegye a gepnevet es a datumot.

CEL: Az lenne hogy rotalja a logokat a folderben datummal

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

A fentiek alapjan rotalod a mar rotalt allomanyokat is, majd azokat a rotalt rotalt allomanyokat is, stb. Sajna a csillag itt elegge rossz megoldas.

en felsorolnam az osszes log-ot szepen egymas mellett, de specifikalva a nevet szepen

/coollect/log/**/syslog /coollect/log/**/cron /coollect/log/**/messages /coollect/log/**/user.log {
....
}

Csak a man-t futottam át talán ez még segíthet mint opció:
noolddir
Logs are rotated in the same directory the log normally resides in (this overrides the olddir option).

Ilyenkor lehet nem forgatja meg többször a csillag miatt amit már megforgatott, egy próbát/tesztet megér, bár lehet a legjobb tényleg a per könyvtár felsorolás lenne ha nincs kismillió könyvtár.

A "**" szepen illeszkedik az osszes "gepnev.intenal"-ra. A vege a lenyeg, hogy ott ne hasznaljunk csillagot. Szoval lehet kismillio konyvtar, de ne legyen kismillio log a vegen. Ha tudjuk, hogy mik a log allomanyok es azoknak nagyjabol kezelheto szama van, akkor a fenti megoldasom tokeletes a "millio subfolder, de kisszamu log bennuk" esetre.

A noolddir itt semmikepp sem jo, mivel az pont azt mondja, hogy ugyanott rotaljuk az allomanyokat, ahol azok vannak. Pont az olddir lenne a megoldas, azaz valahova mashova tenni a rotalt allomanyokat. Igy az uj logok mindig szepen a konyvtarakba keletkeznenek, majd a rotalas miatt el lesznek mozgatva az olddir-be, ahol rotalva lesznek. Igy nem szamitana a vegen a csillag, mivel nem ugyanott lennenek a regi rotalt allomanyok, mint az ujonan letrehozott logok. Persze ebben az esetben viszont problema, hogy minden allomany ugyanoda kerul, igy nem lehet tudni, hogy mi volt a host. Azaz lenne jo sok ugyanolyan auth.log (vagy nem, mert felulirna a gecibe). Lehet mondjuk akkor elotte egy pre script, ami atnevezi az allaomanyt gepnev.intenal_logfile-ra es igy mar mehet majd az olddir-be rotalodni.

erre gondoltam

postrotate
test -f "$1.1" || exit 0

logname="$(/bin/basename "$1")"
# name of the log file - mail.log

dirpath="$(/usr/bin/dirname "$1")"
folder="$(basename $dirpath)"
# name of the log folder name

appname=${folder%%-*}
# name of the application

namewith_id=${folder%%.*}
# app name with instance id

logfilename="$logname-$(date +'%Y%m%d.%H%M%S')-$namewith_id"
mv "$1.1" $dirpath/$logfilename
gzip $dirpath/$logfilename

# upload log file to s3 bucket

# remove rotated log package
rm $dirpath/$logfilename

endscript

Vegulis minden rendben van csak az amazonos feltoltes akad el a SELinuxban.
Az audit logbol ennyit kihamoztam

type=AVC msg=audit(1562162502.670:101127): avc: denied {
name_connect } for pid=21146 comm="aws" dest=3129
scontext=system_u:system_r:logrotate_t:s0-s0:c0.c1023
tcontext=system_u:object_r:netport_port_t:s0 tclass=tcp_socket

Meg utana az audit2allow kidobta ezt

allow logrotate_t http_port_t:tcp_socket name_connect;
allow logrotate_t netport_port_t:tcp_socket name_connect;

De most annyira nem vilagos hogy mi van.

- Most hozza kellene adnom a 3129-et a http portokhoz?
- Vagy a logrotate-hez kellene valahogy hozzaraknom a 3129-et?

seamanage port -a -t logrotate_t -p tcp 3129 -tal nem sikerult elernem semmit.