最近在做一个自己的项目,平时就在自己电脑上跑着,有一天回去突然就挂了,查了半天也没搞清楚原因,想看个监控都没有,什么时候挂的,为啥挂了,统统都不知道。平时做公司项目多了,监控用的非常顺手,现在脱离公司的环境后,连最基础的监控都没了,程序完全就是裸奔。
幸运的是,调研了下grafana,自己搭建一个监控也不是难事。所以搭建了一个,并给大家贡献出来。
先看下效果,和公司用的grafana一样友好的界面。
再看下使用
- 引入依赖(没有发布到maven仓库,因此需要本地下载源码编译下,然后再导入:https://gitee.com/wide_vision/easy-monitor)
<dependency>
<groupId>easy-monitor</groupId>
<artifactId>api</artifactId>
<version>1.0.1-SNAPSHOT</version>
</dependency>
- 初始化
//必选:在程序启动的时候设置,设置token; 这里的token对应的table是:common_data
//属于公共token,有限流和最大指标数的限制
//如果有定制化需求,可联系作者分配私有token
UMonitor.init("a3cbe2d3-cd96-4a8c-b201-0d4f4412e936");
//非必选:如果部署了服务端私有化服务,可设置服务端地址
UMonitor.setServer("http://localhost:2345");
//非必选:用于区分多应用程序,默认为“default”
UMonitor.setApplication("default");
- 使用api
//记录一次长链路的监控,生成次数和耗时。 必须调用complete。如果设置了status,最终生成四个监控:type,time_type,type_status,time_type_status;没设置status,则生成两个常规监控type,time_type
Transaction transaction = UMonitor.newTransaction(type);
try {
filterChain.doFilter(servletRequest, servletResponse);
} catch (Throwable e) {
log.error("请求异常,url:{},method:{}", uri, method, e);
transaction.setStatus(e.getCause().getClass().getSimpleName());
throw e;
}
transaction.complete();
//记录1次
UMonitor.recordOne("LOGIN_FAIL_NO_USER");
//记录100次
UMonitor.recordCount("LOGIN_FAIL_NO_USER",100);
//同时记录耗时以及次数打点
long startTime = System.currentMills();
//do something
UMonitor.recordAll("LOGIN_FAIL_NO_USER",System.currentMills() - startTime);
在grafana配置图标:http://grafana.damiedaya.cn:2666/
账户名:common@outlook.com
// 密码我用base64编码了,真实密码需要base64解密
密码:MTIzNDU2LkE=
配置图标,这里数据存储用的是Mysql,因此配置按照mysql的规则:
SELECT
$__timeGroupAlias(create_time,$__interval),
avg(value) AS "count"
FROM common_data
WHERE
$__timeFilter(create_time) AND
key_type = 'LOGIN_FAIL_NO_USER'
GROUP BY 1
ORDER BY $__timeGroup(create_time,$__interval)
即可展示出图表来。