虽然作为一个后端开发, 可能对日志系统 lek 的直接应用多过于学习维护, 但是我们运维维护的 Elasticsearch 总是崩, 每次都说我用得不对, 出于这个原因, 决定对 lek 进行一次粗略的学习, 对基本概念和使用方法记录和总结.
我们的 lek
lek 是三个工具, 负责数据采集的 logstash, 负责存放和搜索的 Elasticsearch, 负责数据展示的 kibana, 在我们公司还有用到一个负责数据上报的 kafka,kafka 也是 logstash 的数据来源.
按照我们现在的使用场景主要是: 记录用户行为事件, 我也是主要以存储用户事件为例来学习这三个工具, 毕竟学了没有应用场景很难彻底掌握.
主要操作按照数据流向来讲.
用户操作调用外部接口, 外部接口调用微服务, 其中有些微服务是底层上报服务, 而上报服务将 kafka 封装, 约定一个 kafka topic 对应一个用户行为, 比如登录, 注册, 产生消费. 用户每个行为都会调用到这个上报服务, 所以负载非常高, 但是得益于 kafka 优秀的性能, 我们的一些监听事件的需求得以实现, 并且最重要的是可以解耦, 比如当用户登录超过 3 天送代金券或者说用户登录时等级超过某个级别时送什么东西. 每个服务之间相互独立, 互不干扰, 只需要监听相应的 topic 就完事了.
然后 logstash 也是监听了 kafka 的所有的用户事件广播, 将 kafka 的广播内容转化成对应 es 中预先设定好的的数据类型, 将数据过滤, 拼接, 批量之后, 对 es 发起存储请求, 将用户在什么时间段干了什么存进 es 中.
logstash 存进 Elasticsearch 的大量数据, 通过 Elasticsearch 的优秀搜索性能, 在全文检索, 日志分析这个场景上, es 比 MySQL 搜索起来快很多 (为了提高数据可用性, 我们还将同样的数据存储进一个分月分表的 MySQL 中, 但是很少用, 搜索起来也比 es 慢很多), 然后这些数据可以让我们数据中心分析, 或者是做一些年度榜单, 或者是用户个人年度总结的一些数据来源, 又或者是用户统计.
kibana 作为 es 数据可视话工具, 在日常中用得比较多. 比如经常有运营让我帮忙看某个用户是不是真的连续登陆能领取优惠还是在欺骗我们的运营, 或者是测试说我们莫名其妙改了他的密码, 我们会用他曾经干了什么来打他的脸, 或者是被盗号了 ip 多次变化, 或者是怎样的一些用户行为需要查询的. 打开 kibana, 点一点就能把相关的数据轻松找到, 而不用写脚本, 或者复杂的 es 查询语句.
之后会每天学习一个工具, 在此记录发表.
ps: 在网上看到很多公司通过 lek 来记录服务日志, 但是我们公司并没有那么多资源可以搭建满足所有服务日志采集的 lek, 所以只记录最重要的用户事件... 要是有条件, 可以通过 logstash 把所有日志都存进 es, 特别是针对微服务来说, 这样, 像是调用链的数据来源, 可视化日志, 日志分析都有可能实现.
来源: http://www.jianshu.com/p/45a58190a2c8