- IT Blog – Linux & Windows - https://it.naxoblog.hu -

Példák: statisztika a hibás címre érkező levelekről

A levelező szerverünk által kezelt domainek száma folyamatosan nő a növekvő ügyfelek számával arányosan, de ez nem okoz fennakadást. Azonban az egyik nap érzékelhető volt egy kisebb késleltetés a levelek kézbesítésében.

Az okozta a késleltetést, hogy rengetek SPAM ömlött be nem létező e-mail címekre. A levelező szerver megpróbált mindegyikre egy visszautasító (bounce) levelet küldeni, csak az volt a baj, hogy a feladó címek sem léteztek, így ezek a bounce üzenetek felhalmozódtak a kézbesítési sorban (queue). (A feladó e-mail cím valódiságának ellenőrzését sajnos ki kellett kapcsolni, máskülönben sok ügyfél nem kapna meg jópár hírlevelet.)

Pár parancs összekapcsolásával készíthetünk egy olyan statisztikát a hibás címekre érkező levelekről, amely elárulja, hogy domainenként mennyi ilyen levél fordult elő:

   2450 domain2.tld
     54 domain1.tld
     26 domain3.tld
     ... ...

Ehhez az alábbi parancsot kell kiadni:

1. $ grep 'user unknown' /var/log/mail.log 
2.   | awk '{print $7}' 
3.   | sed -e 's/^[^@]+@//' -e 's/>.*//' 
4.   | sort -f 
5.   | uniq -c 
6.   | sort -nr

Nézzük végig a parancsot soronként!

  1. sorban leszűrjük a user unknown kifejezésre illeszkedő sorokat a /var/log/mail.log fájlból
    Aug 7 12:07:29 mail postfix/pipe[20825]: 40F3A25DDE: to=<hibas.cim@domain1.tld>, relay=maildrop, delay=0.07, delays=0.04/0.01/0/0.02, dsn=5.1.1, status=bounced (user unknown. Command output: Invalid user specified. )
  2. sorban kihasználva, hogy alapesetben az awk whitespace-ek (szőköz, tabulátor, stb.) mentén felszabdalja a sort, kiszűrjük vele a 7. oszlopba került adatot
    to=<hibas.cim@domain1.tld>,
  3. sorban levágunk minden járulékos karaktert a domainről
    domain1.tld
  4. paranccsal névsor szerint rendeztetjük a domain listát, hogy a következő paranccsal eltávolíthassuk a duplikációkat (ezt a sort is tudná [sort -u], de nem tudja kiírni az előfordulások számát)
  5. paranccsal megszüntetjük a duplikációkat és egyben lekérdezzük az előfordulások számát is
    54 domain1.tld
  6. sorban pedig az előfordulások száma szerint csökkenő sorrendbe rendeztetjük az egész listát