# flash-dog **Repository Path**: smallcarp/flash-dog ## Basic Information - **Project Name**: flash-dog - **Description**: monitor with pleasure - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2015-01-11 - **Last Updated**: 2020-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README **概述** 应用通过log4j输出日志到mongodb数据库中,闪电狗定时运行脚本分析日志,生成监控曲线和告警。主要优点是不影响业务代码,只需加入几个jar包和修改log4j配置文件就能接入。配置一些javascript小脚本,几乎就能监控所有你想监控的信息,如cpu内存,错误日志百分比,每日访问人数,收入等等 该项目由[杭州斯凯网络](http://www.sky-mobi.com/)开源,目前已经在公司内部支付等关键业务中使用,对创业团队和中小型公司有较大吸引力。目前只支持java的log4j和logback日志输出,通过简单扩展可以支持其他语言。 ## 1. 安装 * 安装[mongodb](http://www.mongodb.org/downloads),解压出来,配置数据保存路径,即可运行 * 下载[flash-dog-server](https://github.com/flash-dog/flash-dog/downloads) * 修改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  2. 把你自己的项目加入闪电狗 * 从[flash-dog-api-log4j](https://github.com/flash-dog/flash-dog/downloads)下载客户端的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! 3. 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
4. 监控示例
* 在闪电狗里面新建监控项目后,点击[定时任务]->[新建任务]。假设业务会打印出:
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分钟收入。生成曲线图如下:

* 设置告警 当最近5分钟收入少于100的时候发送邮件,凌晨0点到4点的时候除外。

* 闪电狗目前有4个脚本模板,可以边修改,边调试,非常有趣
5. 常见问题
* 是否可以监控业务
可以,默认是监控jvm性能和错误日志,里面提供了脚步模板,稍作修改便能通过分析业务日志进行业务统计和监控
* 是否需要连接业务数据库
不需要,只需要连接mongodb
**扩展**
如果您的项目没有使用log4j,也可以使用logback.
* 下载安装 [logback-mongodb](https://github.com/flash-dog/logback-mongodb)
mvn clean install
* 增加slf4j 和 logback 的依赖
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: ''
}