最近有需求,需要做一个日志分析系统=>打算用 Elastic Stack ( ELK+B )来实现,但是本人还在学习阶段,只知道 B 用来数据获取,L 用于数据过滤,E 用于搜索+分析,K 用于数据可视化。
一、个人理想计划如下: ( 1 ) nginx 端 或 具体 java 后端进程产生的 log 日志 -> 用 Beats 相关技术监听 nginx 的 HTTP 请求 or 获取 java 日志文件;接着 beats 传递数据到 kafka 消息队列
( 2 )从 kafka 中消费数据,数据给 logstash 进行数据过滤(变成简单格式,比如 IP:HTTP 方法( POST 等):具体方法:{参数列表之类的};接着 logstash 再将过滤后的数据给另一个 kafka 队列
( 3 )从 kafka 消费数据,数据给 ElasticSearch,进行数据分析,然后 Kiana 数据可视化。
总体:nginx/java 进程 日志来源 -> beats -> kafka -> logstash -> kafka -> ElasticSearch -> Kibana
二、问题 ( 1 )我自己想得比较理想,但据说不适合用 ElasticSearch 当作存储,但是居然要分析,不就不得不把数据加载到内存上的 ES 上吗?有什么避免内存占用过大的方法吗?
( 2 )上面只想了 ELK 进行日志分析,但是后续需要根据 ELK 的日志分析来进行 一些产品之类的东西的推荐,也就是涉及推荐系统的搭建,个人想法就是可能可以根据日志的用户行为,构建 图数据库,然后根据图数据库进行用户的产品推荐之类的。不知道这种想法可行不可行。
( 3 )请教一下各位看官,ELK (正在学)、图数据库(了解过,没用过)、推荐算法(这个没了解过),是不是这几个部分就能够实现以下几个事情了?(日志可视化、用户行为分析、用户产品推荐)
ps:本人比较菜,ELK 、图数据库相关概念稍有了解,但是推荐算法纯不知道。
1
Morriaty 2020-11-06 11:49:22 +08:00 1
1. 先用最简单的 ELK,docker 现成的,kafka 都不要,快速验证快速试错
2. 真要认真做推荐系统当然是要上 Hadoop 、spark 这些的,一般成熟的系统也是 online/nearline/offline 多层架构的,数据层比算法层重要 3. 大数据开发、知识图谱、搜索推荐,每个都是要求很高的,如果是一个人做,玩玩就好,不要期望太高.... |
2
ashiamd OP 感谢回复,那意思是如果不上大数据技术的话,现阶段先只考虑 ELK 的日志行为分析就最可行的方案?如果图数据库和推荐系统需要大数据技术支持的话,那确实现阶段学习可能吃不消(内容太多了)。
再次感谢。那我现阶段就: ( 1 )先考虑 ELK 使用(我本地也是用 docker,但是某些参数可能设置有些问题=>之后再自己解决) ( 2 )构建整个完整的日志处理流程 ( 3 )考虑 LogStash 过滤后在 ElasticSearch 上存储的数据结构设计 ( 4 )根据“有用”的信息(能看出平台用户爱好趋向等信息)构建 kibana 视图。 根据以上流程,至少小目标应该能根据用户日志,大致通过 kibana 的图表等内容来人为分析出平台用户爱好、流量走向等关键信息。 |
4
yisany 2020-11-06 13:55:57 +08:00 1
log -> beats -> logstash -> kafka -> es
beats 是能够直接对接到 logstash 的, 不需要 kafka 做中转(当然也可以用). 同时 es 虽然全文搜索很强, 但你如果要用来做数据分析, 是不如 olap 数据库的 |
5
Morriaty 2020-11-06 14:27:58 +08:00 1
搜索推荐是非常面向业务的,你要先想好你想关心的数据,然后再去反推你的 scheme / mapping 设计,比如:
1. 用户关心的热门内容,那就需要从日志里抽取至少 content_id, user_id, tags,目前的数据里有 tags 吗?如果没有,或者数据量不足,怎么抽取呢? 2. 用户的兴趣变化,那要再加个 timestamp 字段,上周还没人阅览的内容,这周暴增了十倍 诸如此类 |
6
ashiamd OP @yisany 感谢回复,我学的东西比较少,第一次听说 OLAP 这个词,查了下,貌似 V2EX 里有人也有过类似问题。
[OLAP 数据库推荐]( https://www.v2ex.com/t/705920) 看了下方有人选择了 Druid,说是 java 写的?或许我可以去了解了解。(之前项目里用的 Druid 连接池,我还以为这个就是个连接池,原来 Apache Druid 是个数据库) |
7
ashiamd OP @Morriaty 好的,感谢你的宝贵意见。
( 1 ) tags,数据库现在还没有确定下来,不过居然现在知道需要 tags 了,之后就可以考虑在哪些内容上加了。(貌似之后会有业务是注册登录后,先让用户选择几个感兴趣的标签=>现在很多 app 、网站的常见模式) ( 2 )时间戳 timestamp,这个我之前还真没考虑过。确实如果没有时间因素的话,就没法看出用户兴趣变化了。(这方面第一次接触,还是没能想全) |
8
yisany 2020-11-10 09:43:12 +08:00 1
@ashiamd OLAP 数据库各有各的特性, 需要根据你自身的业务来选择.
例如 clickhouse 是最快的数据库(单表查询), 但它对于 update/delete 之类的操作不大友好, 且 join 性能一般. 可以看一下相关的评测文章: - http://www.clickhouse.com.cn/topic/5c453371389ad55f127768ea - http://www.clickhouse.com.cn/topic/5e16bd88bf358d57027ec6fc 但文章里测试 clickhouse 性能用的是 log 引擎, mergeTree 引擎才是 clickhouse 的精髓. |
9
ashiamd OP @yisany 感谢回复。这两篇文章好详细,对我这种没了解过 OLAP 的人来说很有帮助,收藏了。(老哥说的 log 引擎等,这个我也没听说过,看来我需要新学的东西还挺多,哈哈)
再次感谢! 楼下个人吐槽兼感想,老哥可以不用往下看了。 ==================================== ps:才知道 OLAP 产品原来那么多,这方面好像主要和大数据挂钩?那好像推荐系统,还有点遥远(大数据零基础,本人目前只接触过前后端的相关技术) ps:最近下载了一些大数据相关的书记 OLAP 或许我也该查查,至少可以翻阅翻阅,先了解最基础的概念。 ps:最近主要在连滚带爬尝试搭建 elk+beat 了,github 备份了下近期( nginx,java,mysql,elk,beat 的一整个 Demo,从 niginx 收集日志到 elk ),因为有些东西不太熟,花了很多时间才只弄了个 docker-compose 可以跑的版本。OLAP 可以替代 elasticsearch 的话,那我得看看,不知道 OLAP 是不是硬性要求大数据(我看好像都和大数据有点关系?),现在貌似暂时还没有那个量级的需求。 |