應用系統日志采集解決方案,日志采集解決方案
概述
基於Flume + MongoDB,對現有的多個應用系統進行日志采集。
特點
數據流圖
說明:
首先考慮的結構體系,是直接在應用系統中,將日志數據寫到Flume;但是現有的應用系統都是非Maven的,需要在每一個應用系統中添加20+個jar包。為避免這種情況,抽出了一層日志服務,開放webservice服務給應用系統調用,最終形成上述的體系。
日志存儲
1.需要解決的問題
1.1 借助Flume,寫日志到MongoDB
參考:Flume學習應用:Java寫日志數據到MongoDB
- 外網參考:Flume學習應用:Java寫日志數據到MongoDB
1.2 發布webservice服務
參考:在web項目中發布jaxws
- 外網參考:在web項目中發布jaxws
2.日志服務實現
一個簡單的web項目,對外發布一個webservice服務,實現寫日志到Flume。
2.1 文件結構
src/main/java
|---- cn.sinobest.asj.log
|---- ISALog.java # 日志服務接口
|---- SALogImpl.java # 日志服務實現類
|---- cn.sinobest.asj.log.exception
|---- InvalidGradeException.java # 表示無效的日志等級
|---- InvalidFormatExceptioin.java # 表示無效的消息格式(要求是JSON格式字符串)
|---- cn.sinobest.asj.log.util
|---- ValidGrade.java # 枚舉,所有有效的日志等級(DEBUG, INFO, WARN, ERROR)
|---- MessageTemplate.java # 消息模板
src/main/resources
|---- log4j.properties
src/main/webapp
|---- WEB-INF
|---- sun-jaxws.xml
|---- web.xml
|---- index.jsp # 這個可以忽略
pom.xml
2.2 文件內容
你可以直接從log-service拿到源代碼,並跳過這一節的內容。
應用系統群
1.需要考慮的問題
1.1 攔截
使用Filter可以實現攔截。
1.2 組織日志內容
視需求而定,當前僅對request中的部分信息進行了采集。
1.3 格式化
日志信息需要格式化為JSON字符串,才能正確的寫到MongoDB。
1.4 請求webservice服務
參考:基於wsimport生成代碼的客戶端
- 外網參考:基於wsimport生成代碼的客戶端
2. demo
2.1 文件結構圖
src
|---- cn.sinobest.asj.log
|---- LogFilter.java
|---- cn.sinobest.asj.log.wsimport # 存放wsimport生成的代碼
# 省略
basic
|---- WEB-INF
|---- web.xml
2.2 文件內容
測試
附錄
相關文章