如何保证一个项目是可监控可维护的

     线上系统经常由于网络问题或者操作系统原因无法自由访问控制,而且不能随意的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界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等等

       - 可以通过手机查看系统监控信息
      这个软件主要是针对硬件和操作系统的一些内容进行监控记录。
 
      使用Awstats的最大好处是简单、不需要额外开发,可以直接支持Apache的日志;功能强大、可以统计非常多的内容。
       Awstats可以统计以下内容     
     一:访问量,访问次数,页面浏览量,点击数,数据流量等
  二:精确到每月、每日、每小时的数据
  三:访问者国家
  四:访问者IP
  五:Robots/Spiders的统计
  六:纺客持续时间
  七:对不同Files type 的统计信息
  八:Pages-URL的统计
  九:访客操作系统浏览器等信息
  十:其它信息(搜索关键字等等)
     通过该日志分析,可以查看客户的兴趣爱好度以及各个页面的访问效率和访问量,便于针对性的进行具体优化。
 
      Log4j是Apache的一个开放源代码项目,它可以控制日志信息输送的目的地是控制台、文件,我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,更加细致地控制日志的生成过程。
      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
 
 
    实际应用中由于项目不断的扩大,加入了短信应用服务器,加入了solr搜素引擎,加入了jms消息机制,应用了jta分布事务等等,还有很多监控没有做上去,比如一些异常的事务,关于solr的一些异常事务,关于activemq的一些异常事务,关于短信服务器的发送状态和线程状态。这些都是需要针对性的开发才能解决的问题。
 

你可能感兴趣的:(apache,log4j,项目管理,Solr,nagios)