Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

dedatech/flash-dog

Repository files navigation

概述
应用通过log4j输出日志到mongodb数据库中,闪电狗定时运行脚本分析日志,生成监控曲线和告警。主要优点是不影响业务代码,只需加入几个jar包和修改log4j配置文件就能接入。配置一些javascript小脚本,几乎就能监控所有你想监控的信息,如cpu内存,错误日志百分比,每日访问人数,收入等等
该项目由杭州斯凯网络开源,目前已经在公司内部支付等关键业务中使用,对创业团队和中小型公司有较大吸引力。目前只支持java的log4j和logback日志输出,通过简单扩展可以支持其他语言。

  1. 安装
  • 安装mongodb,解压出来,配置数据保存路径,即可运行
  • 下载flash-dog-server
  • 修改flash-dog-server文件夹下的log4j.properties文件,修改log4j.appender.MongoDB的hostname和port指向你部署的mongodb地址和端口:
    log4j.appender.MongoDB.hostname=172.16.3.47
    log4j.appender.MongoDB.port=27017
  • 修改conf/develop/app.properties,也指向刚才部署的mongodb
    mongo.uri=mongodb://172.16.3.47:27017/monitor_test
  • 进入bin下,运行start.sh develop或者start-dev.bat
    在浏览器里打开http://localhost:8080/flash-dog/projects 输入用户名:admin 密码 123456 ,你将看到一个叫闪电狗的项目,这是因为闪电狗也会监控自己,wow screenshot
  1. 把你自己的项目加入闪电狗
  • flash-dog-api-log4j下载客户端的lib库,或者从flash-dog-server文件夹lib目录下拷贝log4mongo-java ,flash-dog-api-log4j 和 mongo-java-driver 到项目的lib库下,注意还需要log4j 1.2.15以上的版本
  • 修改您自己的log4j.properties配置文件
  • 重启您的项目
  • 进入http://localhost:8080/flash-dog/projects ,新建项目,如果配置正确,你将在【日志分析】栏目中查询到您的日志,enjoy your self!
  1. log4j配置说明
  • log4j.properties

log4j.appender.MongoDB=org.log4mongo.AsynMongoURILayoutAppender
log4j.appender.MongoDB.layout=org.log4mongo.contrib.HostInfoPatternLayout
#pid表示进程号,ip为当前服务器ip
log4j.appender.MongoDB.layout.ConversionPattern={"timestamp":"%d","level":"%p","className":"%c","message":"%m","pid":"%V","ip":"%I"}
#mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
log4j.appender.MongoDB.mongoURI=mongodb://mongolog:123456@192.168.173.207:5281,192.168.173.238:5281/test?slaveOk=true
log4j.appender.MongoDB.jvmMonitor=true
log4j.appender.MongoDB.collectionName=flash_dog_log
log4j.rootLogger=info,stdout,logfile,MongoDB
  1. 监控示例
  • 在闪电狗里面新建监控项目后,点击[定时任务]->[新建任务]。假设业务会打印出:

 username=jordon pay money=100

点击[指标监控]按钮,自动生成脚本如下:


m=function () { 
 result = this.message.match(".*money=(\\d+)"); 
 if (result) { 
 pricePaied = new NumberLong(result[1]); 
 emit("pricePaied", pricePaied); 
 } 
 } 
 r= function (key, values) { 
 var total = 0; 
 for (var i = 0; i < values.length; i++) { 
 total += values[i]; 
 } 
 return total; 
 } 
 res=db.flash_dog_log.mapReduce(m, r, {out:"flash_dog_log_output", query:{timestamp:{$gt:new Date(new Date - 300000)}}}); 
 pricePaied=db.flash_dog_log_output.findOne({_id:"pricePaied"});
 if(pricePaied) 
 v=pricePaied.value; 
 else 
 v=0; 
 db.flash_dog_metrics.save({name:"5分钟收入",value:v,timeStamp:new Date().getTime()}); 
 return res; 

目的为通过脚本扫描最近5分钟日志,通过正则表示提取 this.message.match(".*money=(\d+)") 金额,加起来即为最近5分钟收入。生成曲线图如下:
screenshot

  • 设置告警 当最近5分钟收入少于100的时候发送邮件,凌晨0点到4点的时候除外。 screenshot
  • 闪电狗目前有4个脚本模板,可以边修改,边调试,非常有趣
  1. 常见问题
  • 是否可以监控业务
    可以,默认是监控jvm性能和错误日志,里面提供了脚步模板,稍作修改便能通过分析业务日志进行业务统计和监控
  • 是否需要连接业务数据库
    不需要,只需要连接mongodb

扩展
如果您的项目没有使用log4j,也可以使用logback.

  • 下载安装 logback-mongodb

    
    mvn clean install
    
  • 增加slf4j 和 logback 的依赖

     <dependency>
     	<groupId>org.slf4j</groupId>
     	<artifactId>slf4j-api</artifactId>
     	<version>1.6.5</version>
     </dependency>
     <dependency>
     <groupId>ch.qos.logback</groupId>
     <artifactId>logback-core</artifactId>
     <version>1.0.6</version>
     </dependency>
     <dependency>
     <groupId>ch.qos.logback</groupId>
     <artifactId>logback-classic</artifactId>
     <version>1.0.6</version>
     </dependency>
     <dependency>
     <groupId>logback.mongodb</groupId>
     <artifactId>logback.mongodb</artifactId>
     <version>1.0.2</version>
     </dependency>
    
  • logback的配置

     <appender name="MONGO" class="logback.mongodb.MongoDBAppender">
     <connectionSource class="logback.mongodb.MongoDBConnectionSource">
     <uri>mongodb://172.16.3.47:27017</uri>
     <db>ugglog</db>
     <collection>paylog</collection>
     </connectionSource>
     </appender>
     <appender name="ASYNCMONGO" class="ch.qos.logback.classic.AsyncAppender">
     <appender-ref ref="MONGO" />
     </appender>
     <logger name="currency" additivity="false" level="warn">
     <appender-ref ref="MONGO"/>
     </logger>
    
  • 在logback中可以使用MDC功能输出附加的字段

    
    MDC.clear();
    MDC.put("mob", mob.name());
    MDC.put("value", value + "");
    MDC.put("currency", type.name());
    MDC.put("reason", reason);
    MDC.put("saveAtOnce", saveAtOnce + "");
    mongoLogger.info("{}:{} {} {} {} {}", new Object[]{logPre, mob.name(), value, type, reason, saveAtOnce});
    
  • 这样在mongodb的collection中保存的scheme会增加这些字段:

    
    {
    mob: '',
    value: '',
    currency: '',
    reason: '',
    saveAtOnce: ''
    }
    

About

monitor with pleasure

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /