利用log4j+mongodb實現分散式系統中日誌統一管理
背景
在分散式系統當中,我們有各種各樣的WebService,這些服務可能分別部署在不同的伺服器上,並且有各自的日誌輸出。為了方便對這些日誌進行統一管理和分析。我們可以將日誌統一輸出到指定的資料庫系統中,而再由日誌分析系統去管理。而這個儲存日誌的資料庫目前最適合的還是mongodb,一是因為它輕便、簡單,與log4j整合方便,對系統的侵入性低。二是因為它與大型的關係型資料庫相比有不少優勢,比如查詢快速、儲存結構(json)利於擴充套件、免費等。
log4j與mongodb整合
1、首先安裝mongodb資料庫,具體安裝方法請百度;
2、在你的應用程式中引用以下類庫:
Mongo Java driver jar包
Log4J jar包 注意版本,一定要1.2.16及以上。
log4mongo-java jar包
3、在你的web專案中建立log4j.properties檔案。
4、配置log4j.properties檔案,使之整合mongodb:
1: log4j.rootLogger=INFO,stdout,MongoDB
2:
3: log4j.appender.MongoDB=org.log4mongo.MongoDbAppender
4: log4j.appender.MongoDB.databaseName=logs
5: log4j.appender.MongoDB.collectionName=log
6: log4j.appender.MongoDB.hostname=ubuntu
7: log4j.appender.MongoDB.port=27017
8:
9: log4j.appender.stdout=org.apache.log4j.ConsoleAppender
10: log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
11: log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n
5、配置應用的日誌輸出格式:
1: log4j.logger.com.cnblogs.leefreeman.servlet=INFO,action
2: log4j.appender.action.Threshold = INFO
3: log4j.appender.action=org.apache.log4j.DailyRollingFileAppender
4: log4j.appender.action.encoding=utf8
5: log4j.appender.action.File=/opt/logs/action.log
6: log4j.appender.action.DatePattern = '_'yyyy-MM-dd'.log'
7: log4j.appender.action.layout=org.apache.log4j.PatternLayout
8: log4j.appender.action.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n
6、在應用程式中使用日誌:
1: public class IndexServlet extends HttpServlet {
2: private static Logger logger = Logger.getLogger(IndexServlet.class);
3: private static final long serialVersionUID = -5244922269946905057L;
4:
5: @Override
6: protected void doGet(HttpServletRequest req, HttpServletResponse resp)
7: throws ServletException, IOException {
8: logger.info("hello log4j+mongodb");
9: PrintWriter out = resp.getWriter();
10: out.print("hello world");
11: out.flush();
12: out.close();
13: }
14: }
7、透過Mongodb客戶端系統,檢視日誌情況:
日誌成功寫入mongdb資料庫,可以看到在資料庫中日誌的結構相當清晰。
使用日誌系統管理mongodb的日誌
可以開發一個日誌系統連線mongodb資料庫,進行日誌資料的管理和分析。你也可以使用mongodb目前有的一些Web客戶端來管理,下面介紹兩個mongodb常用的Web客戶端:
mongovision:使用extjs作為前端,體驗較好,但需要java7。
rock_mongo:基於php的MongoDB管理工具。
mongodb的部署方式
在我們資料量不是太大的情況下,並且日誌資料的重要性不是太強的時候,我們可以快速搭建出最簡單的mongodb單例項模式,來儲存日誌資料。這種方式最簡單最快速。
當我們考慮到安全、災備等因素時,我們一般可以考慮主-從模式搭建mongodb伺服器。
採用主-從模式後主節點掛掉了後從節點可以接替主機繼續服務。這種模式比單節點的高可用性要好很多。
如果有一天資料越來越多,你發現mongodb處理它們越來越吃力,你就得想辦法怎麼讓它減壓。一般的做法是,部署多個從節點,來分擔主節點壓力。在這裡我們可以想到Mysql的讀寫方案,同樣也適合Mongodb。
你可以讓主節點用於寫入,而從節點用於讀操作(根據你的應用讀和寫操作的比例來分配)。這樣讀寫分離,主從分擔資料庫操作壓力。
關於mongodb各種模式的具體部署配置方法,在這不再介紹有興趣可以查下資料。此外在面對海量資料時,還有很多針對性較強的叢集方案,希望有經驗的朋友介紹一下。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9399028/viewspace-1821136/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一種分散式預寫日誌系統分散式
- 日誌系統實戰(三)-分散式跟蹤的Net實現分散式
- 分散式日誌傳輸系統Databus(一)--系統介紹分散式
- 打造高效的分散式爬蟲系統:利用Scrapy框架實現分散式爬蟲框架
- 分散式系統Session 實現方式分散式Session
- 大型分散式系統現場,阿里大牛帶你實戰分散式系統分散式阿里
- 日誌: 分散式系統的核心分散式
- go實現簡易分散式系統Go分散式
- flume分散式日誌收集系統操作分散式
- Logstash實踐: 分散式系統的日誌監控分散式
- 分散式作業管理系統 Asgard分散式
- 分散式程式碼管理系統GIT分散式Git
- 分散式系統監控(五)- 日誌分析分散式
- 分散式系統-實驗-shardkv分散式
- 多系統管理混亂?SAP系統整合其他系統實現統一管理
- Spring AOP實現後臺管理系統日誌管理Spring
- 分散式系統:系統模型分散式模型
- 分散式系統分散式
- 實現一個分散式排程系統-LoadBalance和Ha策略分散式
- 分散式系統原理--日誌技術Redo Log分散式
- 利用Redis實現分散式鎖Redis分散式
- 實現後臺管理系統的操作日誌功能
- 分散式系統2:分散式系統中的時鐘分散式
- 分散式系統選主場景分析及實現分散式
- 分散式系統限流演算法分析與實現分散式演算法
- 分散式:分散式系統下的唯一序列分散式
- 一、Git分散式版本控制系統Git分散式
- Mercurial 分散式程式碼管理系統 HG分散式
- Kafka與ELK實現一個日誌系統Kafka
- Go語言分散式系統配置管理實踐--go archaiusGo分散式AI
- 第17章-golang實現簡易的分散式系統Golang分散式
- 【Redis】利用 Redis 實現分散式鎖Redis分散式
- 分散式系統的跟蹤系統分散式
- 分散式 - 分散式系統的特點分散式
- 分散式系統(三)——分散式事務分散式
- MIT6.824 分散式系統實驗MIT分散式
- 分散式、微服務必須配個日誌管理系統才優秀,Exceptionless走起~~~分散式微服務Exception
- 分散式系統全域性唯一Id(SnowFlake)雪花演算法實現分散式演算法