我有關於程序體系結構的問題。 假設你有100種不同格式的日誌文件,你需要解析並將這些信息放入SQL數據庫中。 我的它的觀點是這樣的:解析Perl程序結構
使用一般的配置文件,如:
program1->name1("apache",/var/log/apache.log) (modulename,path to logfile1) program2->name2("exim",/var/log/exim.log) (modulename,path to logfile2) .... sqldb->configuration
使用類似的模塊(每個節目1個文件)type1.module(正則表達式,logstructure(somevariables) ,sql(表和函數))
對於不同的程序,fork或線程進程(不知道現在Linux上哪些更好)。
所以問題是,我認爲這是正確的?我應該爲每個程序使用一個模塊(web/MTA/iptablat) 或者有更好的方法?我認爲一些正則表達式會是一樣的,比如date/time/ip/url。該怎麼做?或者我錯過了什麼?
例如:MTA的exim4 mainlog
2011-04-28 13時16分24秒1QFOGm-0005nQ-Ig的 < = [email protected]** H =本地主機 (exim.mydomain.org.ua) [127.0.0.1]:51127 I = [127.0.0.1]:465 P = esmtpsa X = TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32 CV =無A = plain_server :垃圾郵件S = 763 = ID 1303985784.4db93e788cb5c @ mydomain.org.ua T = 從 < [email protected]>爲 [email protected] 「測試」
所有加粗的已經被解析並將被放入sqldb.incoming表中。現在即時通訊在Perl具有結構來保存每一個解析變量像$exim->{timstamp} or $exim->{host}->{ip}
我的計劃會做這樣的事情tail -f /file
和線
的flexability線分析它:讓說,我想supprot添加到Apache服務器(只時間戳USERIP和文件下載)。所有我需要知道什麼日誌文件解析,什麼正則表達式應該是什麼,什麼樣的SQL結構應該是。所以即時計劃有這樣一個模塊。只需使用參數(日誌文件,文件類型)對主進程進行分支或線程化即可。也許還我想補充一些選項有什麼不解析(也許有些日誌級別低,你只是沒有看到mutch有)
你想要什麼樣的數據有在數據庫畢竟是?你是否期望應用程序列表增長(例如,後綴)?您對靈活性有什麼期望? – Dallaylaen 2011-05-05 14:28:39
我更新了我的問題。現在是更清楚還是添加更多東西? – MealstroM 2011-05-05 14:57:24