固定链接 在滴滴云 DC2 云服务器上搭建 ELK 日志采集系统

在滴滴云 DC2 云服务器上搭建 ELK 日志采集系统

在滴滴云 DC2 云服务器上搭建 ELK 日志采集系统

前段时间大学同学聚会,一个在读的博士同学谈到他们实验室做实验时,物理服务器需要向老师申请且组内同学都共用那些机器。由于运行一些大数据和人工智能的项目比较耗费资源,且对资源环境的隔离要求比较高,因而很多时候用机器还得排队(毕竟学校经费和底层基础设施没有公司充裕),不是很方便。于是我就对他说到,为什么不尝试在公有云上面购买 VM 呢?便宜又好用,实验室每个月经费买虚拟机是绰绰有余的,同时因为公有云可以按需使用,磁盘高可用且支持动态扩容,还能在某个时刻打快照,非常适合搭项目环境使用。

朋友目前的一个实验任务是从海量分布式系统中收集操作系统、数据库、消息中间件及应用程序的日志,并利用大数据算法挖掘隐藏在数据中有潜在价值的信息。

想到可能还有更多的同学会遇到类似的问题、甚至可能是类似的任务,于是便写了本篇博客以帮助有此需要的同学,使之能够在短时间内搭建一套行之有效的数据采集系统,方便快速上手使用。

快速了解 ELK 系统

ELK-Stack 是一套开源日志采集套件,使用起来非常方便。先快速了解下每个服务是干什么的。

  • Filebeat: 利用 Go 语言编写的日志文件爬取工具,所占系统的内存和 CPU 非常小。它能够实时监控指定日志目录或文件,不断追踪读取这些文件的变化,最后通过 TCP/IP 协议将日志数据发送到其它系统中进行处理。
  • Logstash: 一个基于服务端的数据处理管道,由 JRuby 编写且运行在 JVM 上,主要用于日志解析、数据净化和格式化(转换成 JSON 格式)。
  • Elasticsearch: 一个基于半结构化存储的全文搜索引擎,主要用于对海量日志数据进行查询、聚合统计等。数据查询利用了带有限状态转化机的倒排索引,能够在秒级查找到对应的目标。
  • Kibana: 一个 Web UI 界面,能够对采集到的日志数据进行可视化展示,通过丰富的图表化展现和动态可交互的搜索功能,让海量的数据更容易被理解。

在虚拟机上搭建日志采集组件

巧妇难为无米之炊。首先,需要在滴滴云上购买一台 VM。操作系统任意选,这里我选择的是 Ubuntu 14.04。由于 ElasticSearch 需要存储采集到的日志数据,因而对存储空间要求相对较高,我选择了 100G 的磁盘;同时,因为 Logstash 会不停的解析和处理数据,所以 CPU 和内存需要适当大一点,这里我选择了 2 核 4G 内存的配置。现在让我们开始 ELK 日志系统搭建之旅。

首先安装 JDK8

安装完之后,执行如下命令:

可以看到 Java 的 HOME 目录为 /usr/lib/jvm/java-8-oracle。接着,配置 Java 环境变量,执行如下命令:

在文件末尾粘贴上以下几行:

为了使配置生效,还需要 source 一下:

最后,通过 java -version 查看 JDK 版本信息。若出现类似以下显示,则表明安装成功:

安装 ELK 套件

首先,通过 wget 下载 deb 包,以下命令分别下载最新版(6.5.1)的 Filebeat、Logstash、Elasticsearch 和 Kibana:

下载完成后,会存在以下四个 deb 包

  • elasticsearch-6.5.1.deb
  • filebeat-6.5.1-amd64.deb
  • kibana-6.5.1-amd64.deb
  • logstash-6.5.1.deb

之后,就可以通过 dpkg -i xxx.deb 命令进行安装了

修改配置文件,让数据流打通

  1. 进入 /etc/filebeat 目录,修改 filebeat.yml 文件,设置要采集的日志文件路径,和要发送到的 Logstash IP 地址。由于是在同一台 VM 上混部,所以 IP 可以设置为 127.0.0.1。若 Logstash 部署在另外一台 VM 上,则需要配置那台 VM 的 IP 地址。

Filebeat 包中已经安装了默认的索引模板(index template)。 如果你采用 filebeat.yml 文件的默认配置,即 Filebeat 直连 ElasticSearch 时,会自动上传索引模板(filebeat.template.json),该索引模板定义了索引名及如何对 Filebeat 上传的数据建立索引。但是如何需要将日志发送到 Logstash 中,则不会自动上传索引模板,必须手动上传,因此需要执行如下命令:

  1. 在 /etc/logstash/conf.d 目录下面创建 pipeline.yml,并输入如下内容:

而且,需要进入到 /usr/share/logstash/bin 目录,执行如下命令安装 logstash-input-beats 插件:

  1. 进入到 /etc/elasticsearch 目录中,修改 elasticsearch.yml 文件:

  1. 进入到 /etc/kibana 目录,修改 kibana.yml 文件。此处的 server.host 一定要配置成0.0.0.0

最后,启动所有的服务,在 /usr/share/(elk)/bin 目录中执行启动文件,启动时注意用户权限的问题。同时记住要先启 Elasticserch,再启 Kibana,否则会报错。待准备环境都就绪之后,就可以运行 Filebeat 爬取日志数据了。此时登录到浏览器,可以通过 Kibana UI 界面检索(可视化)海量日志内容,如果需要定制化界面或者将日志数据拉出来用于其它用途,则可以调用 Elasticsearch 的 RESTful API 与之进行交互。

总结

随着分布式系统的普及,如何在众多物理服务器上采集海量日志并进行统一处理,然后利用大数据算法挖掘日志中有潜在价值的信息,变得越来越重要。

本文只是在单台 VM 上搭建了一套日志采集环境,进行演示。如果需要在分布式系统中使用,也很简单,只需将 Filebeat 独立安装在各个宿主机上就可以了。

本文作者:李比

您的留言将激励我们越做越好