【通天塔之日志分析平台】零 系列简介与环境配置

作为开篇,本文会介绍『日志分析平台』系列的内容梗概并完成基本的环境配置。作为『通天塔』这一技术主题合集的首个系列,我会尝试和『读薄/读厚 CSAPP』系列不一样的风格,但是目的是一致的,就是让感兴趣的朋友少走点弯路。


更新历史

  • 2016.11.19: 初稿完成

系列文章

任务目标

  1. 理解日志分析平台出现的背景
  2. 掌握日志从收集、传输到最终统一处理的基本流程中的重要概念
  3. 了解 ElasticStack 的各个组成部分及对应的角色
  4. 配置好 Linux 基本环境,为之后的工作打好基础

什么是日志分析平台

要回答这个问题,先得弄清楚什么是日志。于是让我们把记忆拉回刚学编程那会儿,想想当时我们是如何写程序运行程序的。具体很多细节我已经记不太清楚,但是把需要检测的变量用 printf 输出到命令行这个简单粗暴的方法,到现在我还时不时会用到。这其实就可以看做是一个『记日志』的行为,虽然非常不靠谱,但是仍提供给我们一些有用的信息。

代码多了之后,想要弄清楚程度到底在干嘛,干到哪一步了,最好的方法就是在每一步的时候输出一些信息,这样出了问题至少能够知道最后运行正常的部分。除了排错之外,日志本身也能给我们提供非常有价值的信息,比方说服务器提供了 100 个对外接口(假设这些接口是并行的,即关闭哪个都无所谓),忽然老板说我们不能提供这么多,只能保留 50 个。那怎么确定要关闭哪五十个呢?其中一个方法就是把访问次数最少的那些给干掉。这时候我们就可以把过去一个星期的日志找出来,统计一下各个接口的使用情况(假设每次接口被访问都会生成一条日志),然后就能排个序,确定需要去掉的接口了。

回顾一下这整个过程:

  1. 我们提供一些服务,这些服务每被访问一次都会生成一条日志
  2. 一般来说我们会把程序产生的日志按日切割,也就是每天会生成一个新的日志文件
  3. 有的时候我们需要对大量日志进行统计以得到某些数据

当我们的服务只部署在一台服务器上的时候,所有的日志都在同一个地方,基本的统计可以通过 shell 命令配合管道完成。比方说我们想知道接口每天被访问的次数,直接 wc -l date.log 即可,完全不需要费心去折腾什么日志分析平台。但是,随着服务量的增长,原来一行可以搞定的事情变得非常麻烦。

当我们的服务部署在十台服务器上的时候,日志分散在十个地方,基本的统计首先需要在每台服务器上进行,然后再汇总起来。用前面的例子,统计次数的过程就是把原来的命令在十个地方敲十次。这其实还不是最糟的,如果需要跨机器排个序什么的,就…

所以这个时候,日志分析平台应运而生,一般来说套路分三步:

  1. 把分散在各个机器的日志汇总到一个地方(Shipper, Broker, Indexer)
  2. 把这些日志用某种方式保存并索引起来(Search & Storage)
  3. 需要的时候直接在汇总的日志中查询(Web Interface)

听起来没有很麻烦,因为原理大约总是简单的,但具体到做工程,就有各种问题各种坑了。我个人是不提倡自己重新造轮子的(确实没必要),除了现在很多现成的日志分析平台服务之外,我们也可以选择利用开源的力量自己搭建一个日志分析平台。

这也是正是这个系列想要教给大家的。我会从单机系统说起,最后扩展到集群和更复杂的解决方案。

为什么选择 ElasticStack

(开个玩笑)原因很简单:因为我在用。

(言归正传)ElasticStack 经过这几年的快速发展,版本号一路从 1.0 狂飙到 5.0(这个真的不是在黑),基本上形成了和 Flume分庭抗礼的局面。至于为什么,可能是因为大家都喜欢简单粗暴颜高活好不粘人的解决方案吧。

ElasticStack 最初的核心是 ELK(Elasticsearch, Logstash, Kibana) 三兄弟。其中 Logstash 收集数据,Elasticsearch 索引数据,Kibana 展示数据。

  • Elasticsearch 背靠 Lucene 这一老牌劲旅做到了准实时全文索引
  • Logstash 的配置直接是 Ruby DSL,非常灵活简单
  • Kibana 则自带各种查询聚合以及生成报表功能。

再加上查询简单、扩展容易之类的特点,大受欢迎其实也在情理之中。官方也在不断吸收社区精华的同时开发了安全、报警、监控、报告等一系列功能,再加上能够轻松和 Hadoop 这类分布式计算框架配合,怎么看都是非常不错的选择。

系列内容

『通天塔之日志分析平台』这个系列的主要是内容是和大家一起一步一步搭建起来一个完整的日志分析平台,具体的内容通过前面的目录应该能够略知一二,会包含业界通用的解决方案,在介绍原理的同时,每一章都会有一定的产出,这样在学习的时候比较不容易懈怠。

零散的文章如下

环境配置

关于 ElasticStack 的更多详细介绍会在接下来的文章中继续,现在我们先把系统准备好吧。考虑到现在大部分服务器都在跑 Linux,所以本文会以 Ubuntu 64bit 14.04 这个长期支持版本来作为我们的操作系统。我目前在用的是 MacBook Pro(Retina, 13’, Late 2013),8GB 内存 2.4 GHz 的 i5,在虚拟机里跑 Ubuntu。

ElasticStack 对系统和软件的配置要求并不高,我们只需要安装 JDK 即可。可以用如下的命令或者是我已经写好的脚本ubuntu-java-install.sh

# 添加源
sudo add-apt-repository -y ppa:webupd8team/java
# 更新地址
sudo apt-get update
# 安装
sudo apt-get -y install oracle-java8-installer

试一试

因为是序章,所以实践的任务比较简单:

  • 在命令行中输入 java -version,看看输出是什么
  • 访问 elastic 的官方网站,并简单浏览各个产品的信息

总结

相信大家现在已经对我们接下来要做的『日志分析平台』有基本的概念了,如果还有不明白的地方也不要担心,带着未知往前走,其实也是非常有意思的过程。

捧个钱场?