在 2018 云栖大会深圳峰会大数据分析与可视化专场上, 由阿里巴巴搜索引擎事业部开放搜索团队的吴迪带来了 "基于 ELK 实时日志分析的最佳实践" 的主题分享. 介绍了传统的日志分析, ELK 的概念和 ELK 实时日志分析的实践.
数十款阿里云产品限时折扣中, 赶快点击这里, 领券开始云上实践吧!
直播视频回顾
以下为精彩视频内容整理:
什么是日志
首先来说一下日志, 日志是属于程序的一部分, 在编写程序的时候也就写好了日志. 日志的作用是为了排查问题, 尤其是突发的问题, 一般线上出了问题首先翻日志. 日志还可以给我们提供报警监控的功能, 通过监控日志的变化, 通过日志中可以看出系统出现的问题甚至做出预测.
传统的日志分析
通常用 Linux 中小工具去搜索关键字能得到我们需要用到的信息. 这种传统的日志分析的效率是非常低的, 尤其是当业务越来越多系统越来越庞大的时候, 这时在搜集日志就会变得非常的困难. 下面是针对传统日志分析过程中遇到的几点问题:
1, 日志的集中收集与存储: 当有上千个节点的时候, 日志是分布在许多机器上, 如果要获取这些日志的文件, 不可能一台一台的去查看, 所以这就是很明显的一个问题.
2, 日志搜索: 这种搜索是基于文件的, 并且这种效率也会比较低, 并不能表达出逻辑上的关系, 并不能对系统的全局作出判定.
3, 分析聚合及可视化: 由于日志分布在不同的机器上所以查看起来很困难.
4, 安全, 角色管理: 当系统变大后就会有上百个人来查看日志, 不同角色不同级别的人看到的是不同的日志而不是所有的人都能看到所有的日志, 所以传统的日志可能就会有安全上的问题.
5, 可伸缩性: 当系统越来越大的时候, 会产生大量的日志.
ELK
现在在开源的生态里面, 解决日志收集, 搜索, 日志聚合和日志分析的一个技术站就是 ELK. 可能大家已经接触过 ELK, 但在这里再给大家介绍一下, ELK 是 Elasticsearch+Logstash+Kibana 的缩写.
Elasticsearch 是一套搜索的框架, 它的内核是 Lucene, 它把 Lucene 这个算法做了封装, 提供了很方便使用的接口, 以及有非常强大的扩展的能力. 用 Elasticsearch 就可以很快速的做到全文检索的一个服务.
Logstash 也是 Elasticsearch 公司的一个产品, 是用来做数据源的收集, 最初它是为了做日志但后来它不光做日志的收集只要是数据都可以用它来收集, 它就是一个收集器.
Kibana 可以把它理解为一个 UI, 但它不是一个简单的 UI, 通过 Kibana 可以看到 ES 上的所有数据, 在这上面可以做各种的展示可以做各种图形化的界面.
这是 ELK 的一个介绍. 因为 ELK 在开源的搜索领域是非常的火热, 只要提到搜索都会想到 Elasticsearch, 提到数据的搜集就会想到 Logstash, 所以现在这套组件都成了标配了.
阿里云 Elasticsearch 生态
这是一个阿里云的 Elasticsearch 生态, 所有的这些组件都是基于阿里云的. 可以看到这个 Beats 和 Logstash 是平行的, 它俩的作用基本类似. 和阿里云合作最重要的一点就是 X-Pack,X-Pack 提供了很多强大的功能, 比如说 Security 就能解决前边的一些问题, 不同级别的人可以看到不同的字段. 数据本身也可以得到一个保护, 安全也基本上可以放心. 再介绍一下 Alerting, 如果用户在世界的多个地方登录了可以通过 Alerting 这个功能报警出来, 可以做一个预警, 因为这种行为可能是被黑客入侵. Monitoring 是为了监控整个 Elasticsearch 技术站的组件. Graph 可以分析出在 Elasticsearch 上所有的数据之间的关系, 来帮我们更好的组织数据. Reporting 是可以通过对数据的一些计算, 能够分析出数据的变化, 然后通过 Reporting 的机制告诉我们这些数据的变化. MachineLearning 是在把数据导入 Elasticsearch 以后通过 MachineLearning 以后能够通过统计学上的一些计算能够分析出 Graph 一段时间的数据, 甚至可以预测出未来变化的走向. 所有的这一切都是建立在阿里云上面的.
数据安全
右边这个大的虚线框是 VPC 网络, 用户的数据和 Elasticsearch 的数据站都是在 VPC 里面, 接触阿里云的 ECS,VPC 可能都知道它对于用户来说就是一个封闭的网络, 外面进不去里面出不来, 除非用户授权. 右侧是用户的应用服务, 用户的搜索都是在用户的 VPC 里面. 中间是公网服务, 通过有密码的保护, 黑白名单的限制来保护服务暴露在公网上的安全性. Logstash 可以把语音服务器, 云数据库和云存储的数据都是可以导入到 VPC 里面的 ES 服务, 用户这边可以使用到 ES 的数据. 这样一来就可以保护用户的数据不被泄露.
Logstash 架构
Logstash 这个架构非常简单, Input 就是我能对接各种数据源, 比如数据库, OSS 等都可以对接. Filter 做一些数据的处理, 处理完了以后输出, 输出可以输出到 ES 也可以输出到别的系统. 所以 Date Source 通过 Logstash 输出到 Date Destination.
通过 Kibana 搜索日志
把日志导入到 ES 这个技术站里面之后, 其实就是通过 ES 解决了日志聚合的问题, 可以散布在各个机器上的日志收集到一块, 通过 ES 聚合在一起, 通过 Kibana 就可以很方便的去搜索日志.
通过 ES API 定制搜索条件
通过 API 去搜索日志库, 通过 Kibana 可以直接写查询的条件, 这个是非常的方便的.
阿里云 Elasticsearch 性能
刚刚说了 Elasticsearch 的特性, 我们在回来说一下 Elasticsearch 在阿里云上的一些性能.
我们做了一个 Elasticsearch 的压测主要是 5.5.3 版本的, 分别在 2 核 4G,4 核 16G,16 核 64G 的上做了一个压测. 使用的是官方的压测工具, 没有改任何的参数, 都是默认的参数. 可以看到这条绿色的线是官方的 geonames3.3GB, 单 doc311B, 在 16 和 64G 的时候可以达到每秒 14 万 doc. 后来做了更进一步的压测就是说多线程的时候它的性能会更好. 这个比市面上的同类软件是要高很多的.
业务架构
当需要搭建 ELK 的时候业务架构是什么样的. 先看一下 Beats,Beats 是可以和业务部署在一起. Beats 可以直接到 Elasticsearch 也可以直接到 Logstash,Beats 和 Logstash 的整合应用是现在比较流行的. 整体的架构来看 Logstash 和 Elasticsearch 一般会分开部署, 因为 Logstash 属于 CPU 密集型的组件, Elasticsearch 属于 I/O 密集型的组件, 所以在部署的时候会把两者分开.
实践
基于机器学习的日志分析
机器学习可以对日志进行分析, 这个虚线分析出这段时间内的一个趋势, 然后分析所有日志的时候就会发现数据不太对的时候就可以通过 Reporting 来反馈给我们, 并且还可以预测出趋势.
ELK 监控告警
ELK 监控报警是对 ELK 技术栈的一个报警, 是对索引, 节点的一个监控. 我们致力于把搜索事业部一些很强大的功能通过阿里云这个平台向外输出, 其实这个特性就是我们技术沉淀的一个输出, 它会自动的分析整个 ES 的健康状况. 然后把 ELK 的架构做一个自动的优化.
本文由云栖志愿小组陈欢整理编辑
来源: https://yq.aliyun.com/articles/590431