如何保证一个项目是可监控可维护的
???? 线上系统经常由于网络问题或者操作系统原因无法自由访问控制,而且不能随意的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界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等等
log4j.rootLogger=DEBUG,CONSOLE,A1,imlog4j.addivity.org.apache=true# 应用于控制台log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppenderlog4j.appender.Threshold=DEBUGlog4j.appender.CONSOLE.Target=System.outlog4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayoutlog4j.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.FileAppenderlog4j.appender.FILE.File=file.loglog4j.appender.FILE.Append=falselog4j.appender.FILE.layout=org.apache.log4j.PatternLayoutlog4j.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.RollingFileAppenderlog4j.appender.ROLLING_FILE.Threshold=ERRORlog4j.appender.ROLLING_FILE.File=rolling.log //文件位置,也可以用变量${java.home}、rolling.loglog4j.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.PatternLayoutlog4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n#应用于socketlog4j.appender.SOCKET=org.apache.log4j.RollingFileAppenderlog4j.appender.SOCKET.RemoteHost=localhostlog4j.appender.SOCKET.Port=5001log4j.appender.SOCKET.LocationInfo=true# Set up for Log Facter 5log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayoutlog4j.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 Appenderlog4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appenderlog4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000# 发送日志给邮件log4j.appender.MAIL=org.apache.log4j.net.SMTPAppenderlog4j.appender.MAIL.Threshold=FATALlog4j.appender.MAIL.BufferSize=10log4j.appender.MAIL.From=web@www.wuset.comlog4j.appender.MAIL.SMTPHost=www.wusetu.comlog4j.appender.MAIL.Subject=Log4J Messagelolog4j.appender.MAIL.layout=org.apache.log4j.PatternLayoutlog4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n# 用于数据库log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppenderlog4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/testlog4j.appender.DATABASE.driver=com.mysql.jdbc.Driverlog4j.appender.DATABASE.user=rootlog4j.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.PatternLayoutlog4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%nlog4j.appender.A1=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.A1.File=SampleMessages.log4jlog4j.appender.A1.DatePattern=yyyyMMdd-HH’.log4j’log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout#自定义Appenderlog4j.appender.im = net.cybercorlin.util.logger.appender.IMAppenderlog4j.appender.im.host = mail.cybercorlin.netlog4j.appender.im.username = usernamelog4j.appender.im.password = passwordlog4j.appender.im.layout=org.apache.log4j.PatternLayoutlog4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n?