快速搭建产品的数据分析平台——思路篇
数据分析平台的目标
产品上线有一定流量后都会有数据分析的需求,分析运营状态、用户行为、应用运行情况等等,为产品改进提供数据支撑。但是数据分析可大可小:既可做到只提供概览,也可做到对每条数据的分析;既可只分析业务指标像用户增长情况等,也可能要分析用户行为或者系统参数等。因此,搭建一个数据分析平台之前一定要了解自己的需求才知道要做到什么程度。
笔者在本文搭建的数据分析平台,主要想达到5个目标:
- 了解产品状态:包含业务指标、应用指标和系统指标三大部分。业务指标比如用户增长情况,新增订单情况;也有应用指标,比如用户的搜索次数,登陆次数,应用运行状态等;还会有系统指标,比如nginx,mysql,redis运行情况,系统使用率等等;(见效果图1)
- 异常行为的详细分析:当从第1步中发现有异常指标时,可能需要抽取出某一天,某个用户,某个IP产生的所有记录对它们分析;(见效果图2)
- 集中对多个产品的分析:我们自己的产品就超过有近10个,要了解产品状态需要登陆每个产品后台显然是太费劲了,所以需要集中管理;
- 灵活扩展:当需要对多个产品做数据分析时,不可能去指望每个产品的数据指标都一样,而是数据分析平台要能够针对不同产品快速创建指标,比如免费的产品就没有订单相关的指标,而收费产品就有这些指标。
- 权限管理:业务指标和行为指标通常是给运营和产品人员看的,而运营人员和产品人员要看的产品可能不是同一个,应该要有权限管理才能确保不同角色只看到属于他们的内容。
解决方案
最初我们想在各个产品集成数据分析功能,然后做一个集中式的数据分析平台管理各个项目,实际分析后自己开发工作量过大,并不现实。转而思考使用开源产品或者第三方平台。但是单个数据分析平台通常难以完全满足我们的所有目标,因此在思路上转为考虑将多个数据分析平台组合在一起。
在测试了多个开源产品和平台以后,最终引入Grafana+ELK作为数据分析的平台。为方便讨论,我们将数据分析分成三大场景:概览、分析和监控。解决方案之所以需要多个产品组合在一起,是因为不同的产品对于不同角色,不同场景的侧重点不同,一款产品要同时覆盖运营、产品、开发这些角色对数据分析的需求不太现实 ,因此通过组合的方式解决此问题。
(图片来源:《腾讯好文!如何设计内容精确、体验友好的Dashboard?(上篇)》)
解决方案分为三个部分:
- 产品自身后台:只支持业务指标的概览,不实现分析和监控功能。该部分并没有解决目标问题,但是这个观念可以防止投入过多资源到产品后台的开发上。
- Grafana:业务指标、应用指标以及系统指标的概览和监控,和比较弱的分析功能。该平台解决目标1,3,4,5。
- ELK:对异常行为做详细分析。尽管ELK也可以支持概览和监控,但是只适合开发人员,而Grafana已经能解决目标问题,所以ELK主要承担分析的职责。该平台解决目标2。
效果图
1.Grafana快速呈现业务指标和用用户行为指标效果图:
2.异常行为分析效果图:
扩展阅读:Grafana、ELK、七牛云日志智能管理平台、BDP的区别
在调研各个数据分析平台时,测试比较多的Grafana、ELK、七牛云、BDP这几个平台。前两个是开源平台,后两个是第三方平台。为什么最终采用Grafana+ELK的组合呢?而不是采用BDP代替Grafana,七牛云代替ELK呢,这就需要对它们之间的区别做个比较。
在比较不同的数据分析平台时,借用下图,从监控源、数据彩信、数据存储、数据分析、数据展现(预警本文不讨论)去分析它们的区别。
(图片来自《建设DevOps统一运维监控平台,先从日志监控说起》一文)
- Grafana:Grafana的数据存储可来自MySQL,也可以是ElasticSearch或者Prothemous等各种类型的数据源。对这些数据源的支持使得Grafana可以直接覆盖各种监控源,采集业务指标、应用指标和系统指标自然就不在话下。再加上它本身的鉴权系统完善,如果只选择一个可视化平台,它会是首选。Grafana缺点在于数据分析上不够强大,比如全日志检索等,当发现异常需要对数据深入分析时,就不方便了,这时就需要ELK了。
- ELK:ELK是日志分析系统的开源方案,它在上面的各个方面都很强大。但是它的定位既决定了它的优点,也决定了它的不足。它在数据分析非常强大,适合对异常行为做深入分析;但是用它做业务指标的呈现就显得太过复杂了,比如只是统计有多少用户和对用户做分类,在Grafana中直接读取MySQL数据库即可,在ELK中就需要绕很长的路。另外,它没有鉴权系统。这些缺点其实是ELK的目标人群是开发者决定的,它正好补了单纯用Grafana的短板。
- 七牛云日志智能管理平台:七牛云是ELK的替代品,一开始我是想直接使用不搭建ELK。但是在调研了3天,由于2个原因放弃了:1.反复配置后没有得到期望的效果 2.想要接入Grafana,发现只能使用官方提供的服务,不能接入自行搭建的Grafana。如果使用中有较多问题,那我会倾向于使用开源方案,ELK碰到问题时可以通过上网搜索自行解决;但是使用第三方平台就只能依赖于官方支持了。但是对于缺少开发资源的公司,采用第三方平台会是更好选择。
- BDP:BDP是第三方的数据分析平台,分析它是想确认它是否能够代替Grafana,或者部分代替Grafana。由于BDP主要解决业务层面的数据分析,于是这里从业务指标和非业务指标两方面去比较。
-
- 业务指标:BDP主要定位就是处理业务数据,主要目标人群是非IT,以及对外呈现。所以它在处理纯业务数据上功能上是强于Grafana的,比如多来源的数据合并、报表十分丰富、导出精美排版的PDF等等。如果要做对外宣传的报表,或者将多个来源的业务数据并在一起,我认为它比Grafana更合适。但是在大部分情况下,我们主要还是使用单个产品分析,或多产品的重叠比较。这个时候,对于开发者而言,BDP需要先导入表、对表拼接(SQL语法弱导致的,比如SELECT *不支持,更不用说JSON_VALUE等新特性)、以及过滤项的拖拉并不如模板变量好用,所以在大部分的业务指标上,它并不如Grafana有效率。
- 非业务指标:比如ES中的nginx日志、监控mysql运行数据、系统运行时的CPU等等,在监控源上BDP并不支持,Grafana则支持多种类型的时序数据库。所以非业务指标的话,BDP并不适合与Grafana比较。
- 综上,我把BDP当成对Grafana的补充,而不是替代关系。
参考