Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Syslog-NG (nem csak) fejlesztőknek




 Molnár István (Kayapo)
Pásztor János (janoszen)




                              ...
A Docler Akadémia


●   A Docler Holding belső előadás-sorozataként jött létre.
●   Ez a második nyilvános előadás.
●   Mi...
Miért erről és miért nektek?



●   A logolás fontos, de sokszor elhanyagolt téma.
●   A logolás nem csak a rendszergazda ...
A logolásról általában




Avagy amit a témáról tudni érdemes




                                     4/40
Miért logolunk?



●   Működés monitorozása
●   Anomáliák felfedezése
●   Statisztikai adatgyűjtés




                   ...
A rossz logüzenet
●   Túlzott rövidség / érthetetlenség
    ●   „App start”
    ●   „Error 42”
    ●   „Exception thrown w...
A rossz logüzenet
●   Túlzott bőbeszédűség (zaj)
    ●   java.lang.NullPointerException
        at com.mysql.jdbc.Statemen...
A jó logüzenet
●   Tömör, de érthető.
●   Nem tartalmaz trace-jellegű adatot, hanem egy linket,
    ahonnan a trace letölt...
Hogyan ne logoljunk?




Hibás megoldások




                          9/40
Az alkalmazás fájlba ír
●   Jó, mert:
    ●   Van logolás
    ●   Mivel az alkalmazás saját mappáiban van, (általában) gyo...
Az alkalmazás STDERR-re ír
●   Jó, mert:
    ●   Van logolás.
    ●   Szabványos interfaceket használ.
●   Hibás, mert:
  ...
Az alkalmazás mailt, stb. küld
●   Jó, mert:
    ●   A fejlesztő azonnal értesül a problémáról.
●   Hibás, mert:
    ●   E...
Hogyan logoljunk?




Jó megoldások




                       13/40
Követelmények


●   Legyen aszinkron!
●   Tudjon bufferelni!
●   Legyen skálázható több szerveren keresztül!
●   Ne a logo...
A Syslog protokoll
●   Az 1980-as évek óta létezik.
●   Eredetileg a Sendmailhez találták ki.
●   Szabályozza a logüzenete...
Syslog nyelvi támogatás
●   PHP: natív támogatás
●   Python: import syslog
●   Perl: Sys::Syslog
●   C/C++: #include <sysl...
Syslog szabályok fejlesztőknek
●   SOHA ne használd a LOG_CONS opciót, kivéve ha a
    rendszergazda kifejezetten kérte. (...
A Syslog-NG



●   Magyar termék. (A Balabit IT Security fejleszti.)
●   Robusztus és nagy teljesítményű.
●   Rendkívül jó...
A Syslog-NG config file
source s_log {                  destination d_kern {
     unix-stream("/dev/log");        file("/v...
Log source
●   A teljesség igénye nélkül:
    ●   Internal
    ●   TCP/UDP
    ●   Socket
    ●   File
    ●   Named pipe ...
Filterek
●   A teljesség igénye nélkül:
    ●   Logot küldő szerver
    ●   Logot fogadó szerver
    ●   Log level
    ●  ...
Log destination
●   Megint csak a teljesség igénye nélkül:
    ●   Program
    ●   SQLdb
    ●   Network (TCP/UDP)
    ●  ...
Log path


●   Tartalmaz:
    ●   Egy vagy több log source-t.
    ●   Egy vagy több destinationt.
    ●   Tartalmazhat fil...
Miért pont Syslog-NG?




Speciális lehetőségek, amiket a Syslog-NG kínál




                                            ...
Buffering
●   Megvéd az átmeneti szolgáltatás-kimaradás okozta
    logveszteségtől. (Pl. újraindítjuk a logszervert.)
●   ...
Regexp matching


●   Megadhatunk egy reguláris kifejezést, majd a match
    groupok eredményét felhasználhatjuk.
●   Filt...
Regexp match group felhasználás
●   Az előbb kapott részeket felhasználjuk, itt egy SQL
    táblába tesszük be:
      dest...
Logrotálás
●   Templatek alapjáni logfájlok, logtáblák.
●   Igen, a Syslog NG meg tudja csinálni magának az SQL
    táblák...
Message rewrite
●   Kicserélhetjük a logüzenet bizonyos részeit.
●   Például:
      rewrite r_myrewrite {
           subst...
Parserek
●   Az üzeneteket egy megadott struktúra (pl CSV) szerint
    szét lehet szabdalni megadott változó nevekre.
●   ...
Kreatív konfiguráció




Avagy a Tippek és Trükkök rész




                                  31/40
PHP loglevel változtatás
●   A PHP hibák súlyosságtól függetlenül notice szintű üzenetként
    érkeznek. Ez kevéssé prakti...
Syslog-NG failover

●   A megoldás viszonylag egyszerű: az üzeneteket két hostra
    küldjük, majd szükség esetén összefés...
Log gyűjtés és aggregálás
●   A feladat egyszerű: gyűjtsünk számszerű adatokat
    tartalmazó logokat és aggregáljuk őket....
Záró gondolatok




Avagy amit még hasznos tudni




                               35/40
Syslog-NG használat
●   Ha saját szerveren vagy virtuális gépen lakik a
    szolgáltatásotok, semmi akadálya a Syslog-NG
 ...
Mit kapunk a pénzünkért?


●   Ha a fizetős változatok valamelyike mellett döntünk,
    kapunk az ingyenes változaton felü...
További olvasmányok
●   Balabit weboldal:
    http://www.balabit.com/
●   Syslog-NG 3.1 Administrator Guide
    http://www...
Ti jöttök...




Kérdések?




                     39/40
Jövő héten...




        2010. december 7, kedd
         Kovács Ferenc (Tyrael)
Biztonságos webalkalmazások fejlesztése

...
Upcoming SlideShare
Loading in …5
×

Syslog-NG (nem csak) fejlesztőknek

1,793 views

Published on

Published in: Education
  • Be the first to comment

  • Be the first to like this

Syslog-NG (nem csak) fejlesztőknek

  1. 1. Syslog-NG (nem csak) fejlesztőknek Molnár István (Kayapo) Pásztor János (janoszen) 1/40
  2. 2. A Docler Akadémia ● A Docler Holding belső előadás-sorozataként jött létre. ● Ez a második nyilvános előadás. ● Minden kedden 18:30-tól várunk egy-egy érdekes témával. ● További infók a http://www.facebook.com/doclerakademia oldalon. 2/40
  3. 3. Miért erről és miért nektek? ● A logolás fontos, de sokszor elhanyagolt téma. ● A logolás nem csak a rendszergazda feladata! ● Ti tervezitek meg az alkalmazásokat, amik logolni fognak. 3/40
  4. 4. A logolásról általában Avagy amit a témáról tudni érdemes 4/40
  5. 5. Miért logolunk? ● Működés monitorozása ● Anomáliák felfedezése ● Statisztikai adatgyűjtés 5/40
  6. 6. A rossz logüzenet ● Túlzott rövidség / érthetetlenség ● „App start” ● „Error 42” ● „Exception thrown without a stack frame in Unknown on line 0” ● „Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in ...” 6/40
  7. 7. A rossz logüzenet ● Túlzott bőbeszédűség (zaj) ● java.lang.NullPointerException at com.mysql.jdbc.Statement.setMaxRows(Statement.java:2178) at coldfusion.server.j2ee.sql.JRunStatement.setMaxRows(JRunStatement.jav a:214) at coldfusion.sql.Executive.executeQuery(Executive.java:1229) at coldfusion.sql.Executive.executeQuery(Executive.java:1008) at coldfusion.sql.Executive.executeQuery(Executive.java:939) at coldfusion.sql.SqlImpl.execute(SqlImpl.java:325) at coldfusion.tagext.sql.QueryTag.executeQuery(QueryTag.java:831) at coldfusion.tagext.sql.QueryTag.doEndTag(QueryTag.java:521) at cfhetkoor2ecfm251397670.runPage(E:westlandkoorconcordia.nlwwwrooth etkoor.cfm:1) at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:192) at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:366) at coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65) ........... És így tovább hosszasan ...... 7/40
  8. 8. A jó logüzenet ● Tömör, de érthető. ● Nem tartalmaz trace-jellegű adatot, hanem egy linket, ahonnan a trace letölthető. ● Tartalmaz minden lényeges információt, amiből kideríthető, mi történt. ● De ennél semmivel sem többet. ● Például: ● User login gipszjakab from 127.0.0.1 ● Access denied to http://example.com/test user gipszjakab from 127.0.0.1 by access rule 62 8/40
  9. 9. Hogyan ne logoljunk? Hibás megoldások 9/40
  10. 10. Az alkalmazás fájlba ír ● Jó, mert: ● Van logolás ● Mivel az alkalmazás saját mappáiban van, (általában) gyorsan elérhető. ● Hibás, mert: ● Az alkalmazás törölni is tudja a logokat. ● A log file-ok nem rotálódnak, egyre nő a méretük. ● Egy idő múlva senki nem emlékszik, miért ilyenek a logfájlok. ● Nincs bufferelés, az üzenetek szinkron írása terheli a fájlrendszert. ● Konkurencia problémák léphetnek fel. ● Alkalmazás összeomláskor nem keletkezik log. 10/40
  11. 11. Az alkalmazás STDERR-re ír ● Jó, mert: ● Van logolás. ● Szabványos interfaceket használ. ● Hibás, mert: ● Nehezen kezelhető. ● Első sorban csak konzolos szoftvereknél működik. ● Csábító a 2>/dev/null használata. 11/40
  12. 12. Az alkalmazás mailt, stb. küld ● Jó, mert: ● A fejlesztő azonnal értesül a problémáról. ● Hibás, mert: ● Egy szerencsétlenül elkövetett végtelen ciklus beborítja a mailszervert. ● Az alkalmazás elhalálozása (PHP fatal error) nem jut el a fejlesztőig. ● Üzemeltetésileg a lehető legrosszabb megoldás. 12/40
  13. 13. Hogyan logoljunk? Jó megoldások 13/40
  14. 14. Követelmények ● Legyen aszinkron! ● Tudjon bufferelni! ● Legyen skálázható több szerveren keresztül! ● Ne a logolás legyen a szűk keresztmetszet! ● Legyen egyszerű használni! 14/40
  15. 15. A Syslog protokoll ● Az 1980-as évek óta létezik. ● Eredetileg a Sendmailhez találták ki. ● Szabályozza a logüzenetek formátumát. ● Szinte az összes rendszer eszközön keresztül működik. (Hálózat, Unix socket, stb) ● De facto szabvány a Unix világban. ● Kiforrott és jól működő nyílt forrású eszközök vannak rá. 15/40
  16. 16. Syslog nyelvi támogatás ● PHP: natív támogatás ● Python: import syslog ● Perl: Sys::Syslog ● C/C++: #include <syslog.h> ● Java: Syslog4j ● Ruby: require 'syslog' ● NodeJS: dgram 16/40
  17. 17. Syslog szabályok fejlesztőknek ● SOHA ne használd a LOG_CONS opciót, kivéve ha a rendszergazda kifejezetten kérte. (Ez ugyanis a szerver konzolra ír.) ● Mindig a megbeszélt log facilityt és program nevet használd! ● Készítsd föl a programodat, hogy development, testing / stage illetve éles környezetben más log opciókkal, program névvel és facilityvel működhessen. ● Tegyél különbséget a log levelek között! 17/40
  18. 18. A Syslog-NG ● Magyar termék. (A Balabit IT Security fejleszti.) ● Robusztus és nagy teljesítményű. ● Rendkívül jól dokumentált. ● Nagyon flexibilis. 18/40
  19. 19. A Syslog-NG config file source s_log { destination d_kern { unix-stream("/dev/log"); file("/var/log/kern.log"); }; }; filter f_kern { log { facility(kern); source(s_log); }; filter(f_kern); destination(d_kern); }; 19/40
  20. 20. Log source ● A teljesség igénye nélkül: ● Internal ● TCP/UDP ● Socket ● File ● Named pipe (FIFO) ● Itt adjuk meg a logüzenetek forrását. 20/40
  21. 21. Filterek ● A teljesség igénye nélkül: ● Logot küldő szerver ● Logot fogadó szerver ● Log level ● Log priority ● Log facility ● Log tag ● Üzenet tartalom ● Ezzel szűrhetjük meg az üzeneteket. 21/40
  22. 22. Log destination ● Megint csak a teljesség igénye nélkül: ● Program ● SQLdb ● Network (TCP/UDP) ● File ● Named pipe (FIFO) ● Itt adjuk meg a lehetséges log célpontokat. 22/40
  23. 23. Log path ● Tartalmaz: ● Egy vagy több log source-t. ● Egy vagy több destinationt. ● Tartalmazhat filtereket. ● Tartalmazhat parsereket és rewriteokat. (Ezekről mindjárt lesz szó.) ● Ez vezérli a logüzenetek útját. 23/40
  24. 24. Miért pont Syslog-NG? Speciális lehetőségek, amiket a Syslog-NG kínál 24/40
  25. 25. Buffering ● Megvéd az átmeneti szolgáltatás-kimaradás okozta logveszteségtől. (Pl. újraindítjuk a logszervert.) ● A bufferben tartott logsorok számát adhatjuk meg. ● Például: destination d_tcp { tcp("1.2.3.4"); log_fifo_size(2000); }; ● A Premium változatban van disk buffering is. Ezt a log_disk_fifo_size() opcióval állíthatjuk. 25/40
  26. 26. Regexp matching ● Megadhatunk egy reguláris kifejezést, majd a match groupok eredményét felhasználhatjuk. ● Filterezés: filter f_log { message("^([^t]+)t([^t]+)t([^t]+)t([^t]+)$" flags("store- matches")); }; 26/40
  27. 27. Regexp match group felhasználás ● Az előbb kapott részeket felhasználjuk, itt egy SQL táblába tesszük be: destination d_mysql { sql( type(mysql) host("localhost") username("syslog”) password("valamirandom") database("mylog”) table("logs") columns("logfield1 VARCHAR(24)", "logfield2 VARCHAR(24)", "logfield3 VARCHAR(24)", "logfield4 VARCHAR(24)") indexes("logfield1","logfield2","logfield3","logfield4") values("$1", "$2", "$3", "$4") ); } 27/40
  28. 28. Logrotálás ● Templatek alapjáni logfájlok, logtáblák. ● Igen, a Syslog NG meg tudja csinálni magának az SQL táblákat. ● Például: destination d_mysql { … table("log_${R_YEAR}_${R_MONTH}_$ {R_DAY}"); … }; 28/40
  29. 29. Message rewrite ● Kicserélhetjük a logüzenet bizonyos részeit. ● Például: rewrite r_myrewrite { subst("IP", "IP-Address", value("MESSAGE")); }; log { ... rewrite(r_myrewrite); ... }; 29/40
  30. 30. Parserek ● Az üzeneteket egy megadott struktúra (pl CSV) szerint szét lehet szabdalni megadott változó nevekre. ● Például: parser p_mydataparser { csv-parser( columns("SERVER.IP", "SERVER.NAME") ); }; destination d_file { file("/var/log/log-${SERVER.NAME}"); }; 30/40
  31. 31. Kreatív konfiguráció Avagy a Tippek és Trükkök rész 31/40
  32. 32. PHP loglevel változtatás ● A PHP hibák súlyosságtól függetlenül notice szintű üzenetként érkeznek. Ez kevéssé praktikus, ezért célszerű ezt megváltoztatni. ● A PHP üzenetet feldolgozzuk és újra beküldjük a Syslog-NG- nek: filter f_php_error { match("PHP Fatal error" value("MESSAGE")); }; destination d_php_error { program("/usr/bin/logger -p user.err -t php -u /var/run/php-log" template("$MSGONLYn")); }; log { source(src); filter(f_php_error); destination(d_php_error); }; source s_php {unix-stream("/var/run/php-log");}; log { source(s_php); destination(d_syslogserver); }; 32/40
  33. 33. Syslog-NG failover ● A megoldás viszonylag egyszerű: az üzeneteket két hostra küldjük, majd szükség esetén összefésüljük: destination d_syslog1 { tcp("syslog1.int.example.com"); } destination d_syslog2 { tcp("syslog2.int.example.com"); } log { source(s_all); destination(d_syslog1); destination(d_syslog2); }; ● Az összefésüléshez célszerű a forrásnál az üzeneteket egyedi azonosítóval ellátni. 33/40
  34. 34. Log gyűjtés és aggregálás ● A feladat egyszerű: gyűjtsünk számszerű adatokat tartalmazó logokat és aggregáljuk őket. ● A megoldáshoz használjuk a már említett tab szeparált formátumot (az adatainkat tabulátorokkal szeparáljuk), majd töltsük be SQL-be. ● A táblaformátumot adjuk meg úgy, hogy óránként más legyen a tábla neve. ● Futtassunk le óránként egy SQL lekérdezést, ami egy másik táblába aggregálja a logokat. Például BASH-ben: LASTHOUR_PARAM=$(date -d'1 hour ago' '+%Y-%m-%d %H:00:00') LASTHOUR_TABLE=$(date -d'1 hour ago' '+%Y_%m_%d_%H') mysql stat -e "INSERT INTO stat_hourly SELECT '${LASTHOUR_PARAM}' AS hour, COUNT(*) AS entries, SUM(field1) AS field1 FROM log_${LASTHOUR_TABLE}" 34/40
  35. 35. Záró gondolatok Avagy amit még hasznos tudni 35/40
  36. 36. Syslog-NG használat ● Ha saját szerveren vagy virtuális gépen lakik a szolgáltatásotok, semmi akadálya a Syslog-NG használatának! Üljetek le a rendszergazdával, beszéljétek meg, mire van szükségetek! ● Ha osztott tárhelyen vagytok, viszonylag kicsi az esélye, hogy működik az ilyen jellegű logolás, de: ● A DotRoll 2011-es fejlesztési tervében van egy fejlesztési projekt, aminek a célja, hogy a felhasználónként különálló /dev/log keletkezzen, az ebben gyűlő adatok pedig egy webes felületen elérhetőek legyenek. 36/40
  37. 37. Mit kapunk a pénzünkért? ● Ha a fizetős változatok valamelyike mellett döntünk, kapunk az ingyenes változaton felül: ● Windows log agentet. ● Titkosított, külső időpecséttel ellátott logstoret. ● Lemezre való bufferelési lehetőséget. ● Beépített HA támogatást. ● Webes felületet. ● És még sok más jó dolgot. 37/40
  38. 38. További olvasmányok ● Balabit weboldal: http://www.balabit.com/ ● Syslog-NG 3.1 Administrator Guide http://www.balabit.com/support/documentation/syslog- ng-ose-v3.1-guide-admin-en_0.pdf ● RFC-k: ● RFC 3164 - The BSD syslog protocol ● RFC 5424 - The Syslog Protocol ● RFC 5425 - Transport Layer Security (TLS) Transport Mapping for Syslog ● RFC 5426 - Transmission of Syslog Messages over UDP 38/40
  39. 39. Ti jöttök... Kérdések? 39/40
  40. 40. Jövő héten... 2010. december 7, kedd Kovács Ferenc (Tyrael) Biztonságos webalkalmazások fejlesztése 40/40

×