線上系統經常由於網絡問題或者操作系統原因無法自由訪問控制,而且不能隨意的debug調試,所以一個成熟的架構必須有一系列的監控措施,包括後臺日誌、訪問日誌、緩存日誌、硬件使用情況等。
一個優秀的監控平臺可以有效的保證系統的正常運行,可以在系統出現問題的時候提供充足的多方面的信息進行分析觀察得以用最小的代價恢復正常穩定運行。另外可以在第一時間進行預警,比如內存不足、磁盤不足等硬件情況。
線上系統的環境如下
CentOS 5.5 操作系統
Oracle 10G 數據庫版本
JDK 1.6.x 編譯環境
ANT 1.8.x 發佈環境
MEMCACHED 1.4.5 緩存環境,用於減少數據庫讀寫操作
Nginx 0.8 代理服務器,用於靜態文本緩存
Php 5.2.x 主要用於第三方的軟件,比如論壇、文件資源庫
mysql 5.1.x 主要用於第三方軟件使用,比如論壇
Nagios 監控平臺
Awstats 日誌統計分析
Log4j 應用系統日誌輸出工具
其他還有activemq、solr、等應用暫時不說,只是針對監控所涉及的一些內容做下說明。 用到的監控工具主要是Nagios和Awstats.
Nagios可以做下面事情:
- 監視網絡服務 (SMTP, POP3, HTTP, NNTP, PING等)
- 監視主機機羣資源 (各個主機的進程, 磁盤,內存等)
- 監視數據庫的運行情況
- 簡單的插件設計可以輕鬆擴展Nagios的監視功能,比如Nagios-Plugins-Memcached可以用於監控memcached。
- 服務等監視的併發處理,查看各個服務器的併發數據量
- 錯誤通知功能 (通過email, pager, 或其他用戶自定義方法)
- 可指定自定義的事件處理控制器
- 可選的基於瀏覽器的WEB界面以方便系統管理人員查看網絡狀態,各種系統問題,以及日誌等等
二:精確到每月、每日、每小時的數據
三:訪問者國家
四:訪問者IP
五:Robots/Spiders的統計
六:紡客持續時間
七:對不同Files type 的統計信息
八:Pages-URL的統計
九:訪客操作系統瀏覽器等信息
十:其它信息(搜索關鍵字等等)
通過該日誌分析,可以查看客戶的興趣愛好度以及各個頁面的訪問效率和訪問量,便於針對性的進行具體優化。
Log4j由三個重要的組件構成:日誌信息的優先級,日誌信息的輸出目的地,日誌信息的輸出格式.日誌信息的優先級從高到低有ERROR、WARN、 INFO、DEBUG,分別用來指定這條日誌信息的重要程度;日誌信息的輸出目的地指定了日誌將打印到控制檯還是文件中;而輸出格式則控制了日誌信息的顯示內容.
log4j.rootLogger=DEBUG,CONSOLE,A1,im log4j.addivity.org.apache=true # 應用於控制檯 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.Threshold=DEBUG log4j.appender.CONSOLE.Target=System.out log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n #log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[thread] n%c[CATEGORY]%n%m[MESSAGE]%n%n #應用於文件 log4j.appender.FILE=org.apache.log4j.FileAppender log4j.appender.FILE.File=file.log log4j.appender.FILE.Append=false log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n # Use this layout for LogFactor 5 analysis # 應用於文件回滾 log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender log4j.appender.ROLLING_FILE.Threshold=ERROR log4j.appender.ROLLING_FILE.File=rolling.log //文件位置,也可以用變量${java.home}、rolling.log log4j.appender.ROLLING_FILE.Append=true //true:添加 false:覆蓋 log4j.appender.ROLLING_FILE.MaxFileSize=10KB //文件最大尺寸 log4j.appender.ROLLING_FILE.MaxBackupIndex=1 //備份數 log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n #應用於socket log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender log4j.appender.SOCKET.RemoteHost=localhost log4j.appender.SOCKET.Port=5001 log4j.appender.SOCKET.LocationInfo=true # Set up for Log Facter 5 log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[thread]%n%c[CATEGORY]%n%m[MESSAGE]%n%n # Log Factor 5 Appender log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000 # 發送日誌給郵件 log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender log4j.appender.MAIL.Threshold=FATAL log4j.appender.MAIL.BufferSize=10 [email protected] log4j.appender.MAIL.SMTPHost=www.wusetu.com log4j.appender.MAIL.Subject=Log4J Message lolog4j.appender.MAIL.layout=org.apache.log4j.PatternLayout log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n # 用於數據庫 log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver log4j.appender.DATABASE.user=root log4j.appender.DATABASE.password= log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES (’[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n’) log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender log4j.appender.A1.File=SampleMessages.log4j log4j.appender.A1.DatePattern=yyyyMMdd-HH’.log4j’ log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout #自定義Appender log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender log4j.appender.im.host = mail.cybercorlin.net log4j.appender.im.username = username log4j.appender.im.password = password log4j.appender.im.layout=org.apache.log4j.PatternLayout log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n