我正在爲日誌分析系統工作,它讀取tomcat的日誌並通過網頁中的圖表/表格顯示它們。我知道有一些日誌分析系統,我正在重新創建輪子,但這是我的工作,我的老闆想要它。)尋找一個數據庫設計相關的方式
我們的tomcat日誌在白天保存。例如:
2011-01-01.txt
2011-01-02.txt
......
以下是我的方式出口日誌DB和閱讀:
1 DB結構
我有三個表: 1) log_current:保存今天生成的日誌。
2)log_past:保存今天之前生成的日誌。
上述兩個表擁有SAME模式。
+-------+-----------+----------+----------+--------+-----+----------+----------+--------+---------------------+---------+----------+-------+
| Id | hostip | username | datasend | method | uri | queryStr | protocol | status | time | browser | platform | refer |
+-------+-----------+----------+----------+--------+-----+----------+----------+--------+---------------------+---------+----------+-------+
| 44359 | 127.0.0.1 | - | 0 | GET |/ | | HTTP/1.1 | 404 | 2011-02-17 08:08:25 | Unknown | Unknown | - |
+-------+-----------+----------+----------+--------+-----+----------+----------+--------+---------------------+---------+----------+-------+
3)log_record:保存log_past的信息,它記錄其日誌已出口到log_past表的日子。
+-----+------------+
| Id | savedDate |
+-----+------------+
| 127 | 2011-02-15 |
| 128 | 2011-02-14 |
..................
+-----+------------+
該表顯示2011-02-15的日誌已導出。
2出口(到DB)
我有兩個時間表的工作。
1)日常工作。
00:05:00,檢查Tomcat的日誌目錄(/ tomcat的/日誌)找到所有的近30日日誌文件(當然也包括昨天的日誌
檢查log_record表看看是否有一天原木出口,例如2011-02-16在log_record沒有找到,所以我會讀2011-02-16.txt,並導出他們log_past。
昨天的出口日誌之後,我啓動了今天的日誌(2011-02-17.txt)的文件監視器,不管它是否存在。
2)文件監控
一旦監控啓動時,它會按小時讀取該文件小時。它讀取的每個日誌都將保存在log_current表中。
3 tomcat服務器重啓。
有時我們不得不重新啓動Tomcat,所以一旦Tomcat啓動時,我會刪除log_current的所有日誌,然後做日常工作。
4我的問題
1)2表(log_current和log_past)。
因爲如果我救了今天的日誌log_past,我不能確保所有的日誌文件(XXXX-XX-xx.txt)遠銷分貝。因爲我會每天在00:05:00進行檢查,確保今天之前的日誌必須導出。
但是,這使得很難查詢日誌accros yestersay和今天。
例如,查詢從2011-02-14 00:00:00到2011-02-15 00:00:00,這些日誌必須在log_past。
但如何從2011-02-14 00:00:00至08:00:00 2011-02-17?(假設它2011-02-17 09:00:00現在) 。
跨表查詢非常複雜。
而且,我一直認爲我的表和工作方式德興(出口的日程工作/讀取)是不完美的,所以任何人都可以給一個很好的建議?
我只需要導出和讀取日誌,並可以做幾乎實時的分析,其中實時意味着我必須作出由圖/表當天visiable的日誌等
插入與文件監視器的工作,它按小時讀取文件,所以如果它讀取一些日誌,但這些日誌不會導出到數據庫然後服務器由於某種原因關閉?它會錯過這些日誌。 – hguser 2011-02-17 05:42:37