
中小互联网企业、物联网企业、独立开发者想要监控线上业务或设备的运行指标,但苦于没有一个低成本的工具,今天就向大家推荐这一款软件神器:XL-LightHouse 。
它和市面上 BI 产品有比较大的差异,从技术方案上来说:BI 产品主要是通过 SQL 查询关系数据库、OLAP 等进行聚合运算获取数据指标,但 XL-LightHouse 不同,它是以"流式计算技术"为基础的指标获取工具。
那流式计算是什么东西呢?其实很容易理解,就是基于实时传入的数据流进行计算的技术,比如线上服务产生的各类日志、设备心跳包等都是典型的实时数据流,xl-lighthouse 就是基于这种实时的、源源不断的数据流进行计算的一款工具。
这个工具和 BI 产品相比,它有两个突出的优势就是:
比如:app 的启动次数、每天的打开人数、app 启动耗时、某个页面打开次数、某个表单的提交人数、甚至某个按钮的点击次数、某个列表的点击率、某个接口的异常量和耗时情况、某个商品的点击加购次数等等。
总之就是:只要你有业务需要,XL-LightHouse 可以为你计算大批量的、各种各样的、零零散散的数据指标,这一点和 BI 产品区别比较大。BI 产品的计算逻辑是强依赖于业务表,对数据源要求比较苛刻,要计算某个指标必须要有相应的库表结构,而且字段还得比较工整、规范才可以。
很多企业买一套 BI 回来,可能发现它只能用分析订单表、商品表,但是如果你想看 app 启动、商品点击、搜藏、加购等相关指标数据就会有很大的局限性。而 xl-lighthouse 却可以遍布整个业务上下游链条,提供更全面的数据指标网络,这对于中小互联网企业、物联网类企业帮助非常大。
这个项目支持单机版和大数据版,中小企业、独立开发者单机版本就足够了。
这个网上搜索就行了,一大堆的资料,也可以参考这里: https://dtstep.com/docs/110156/
tar zxvf lighthouse-docker-x.x.x.tar.gz cd lighthouse-docker-x.x.x/ #进入工程目录 cd scripts #进入脚本目录 ./deploy.sh #执行部署命令,输入 yes 即可 另外:在 scripts/example 下有一个演示工程,直接启动就可以在 web 端看到系统内置的一个演示工程和演示数据了。
它提供 http 和 java 版本的 api ,根据自己情况选择,整体使用流程非常非常简单,文档几乎都不用看,就明白怎么回事了。
主要是几步操作:
这个项目使用"统计工程-统计组-统计项"的三层结构管理所有数据指标,每个统计工程下可包含若干个数据指标,而基于同一份元数据的数据指标叫做一个统计组。 创建操作直接在 web 端就可以完成。
统计项的创建是按照它内置的格式指定指标的计算逻辑,也非常简单,一看就明白了。
完成了以上创建之后,只要通过 http 或 java 上报原始消息既可以了,然后就能在 web 端查看数据指标的结果。
下面通过一个小例子介绍它的整体使用。
比如我们 app 内有用户充值的操作,现在要计算 app 充值相关指标。
有这样几个需求:
+ 每 10 分钟 app 充值次数、充值人数、总充值金额 + 每小时 app 充值次数、充值人数、总充值金额 + 每天 app 充值次数、充值人数、总充值金额 + 每天 app 内各充值渠道的充值次数、充值人数、总充值金额 + 每天充值金额大于 100 元的充值次数和充值人数 创建统计工程 
创建统计组(也就是一个类似于表结构的配置信息) 
创建统计项
每个指标对应一个统计项,创建统计项遵循系统内置的 xl-formula 的配置格式。

public class Test { public static void main(String[] args) throws Exception{ LightHouse.init("10.206.6.27:4061"); long t = System.currentTimeMillis(); for(int i = 0;i<6032;i++){ //修改统计组参数值、Token 和秘钥 HashMap<String,Object> paramMap = new HashMap<>(); paramMap.put("user_id", RandomID.id(6)); paramMap.put("channel", RandomID.id(2)); Double d = ThreadLocalRandom.current().nextDouble(1000); paramMap.put("amount",String.format("%.3f", d));//防止上面随机数出现科学计数法 System.out.println("send message:" + JsonUtil.toJSONString(paramMap)); LightHouse.stat("Dc7:recharge_stat","dpDLFgP20zTvKqWddqOgm9ktjQDvzDE9GSVZZtIn",paramMap,t); } System.out.println("send ok."); } } 