在滴滴云 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
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

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

update-alternatives --config java

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

vim ~/.bashrc

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

export JAVA_HOME=/usr/lib/jvm/java-8-oracl
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

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

source ~/.bashrc

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

java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
安装 ELK 套件

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

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.5.1-amd64.deb

wget https://artifacts.elastic.co/downloads/logstash/logstash-6.5.1.deb

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.1.deb

wget https://artifacts.elastic.co/downloads/kibana/kibana-6.5.1.deb

下载完成后,会存在以下四个 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 命令进行安装了:

sudo dpkg -i filebeat-6.5.1-amd64.deb
sudo dpkg -i logstash-6.5.1.deb
sudo dpkg -i elasticsearch-6.5.1.deb
sudo dpkg -i kibana-6.5.1-amd64.deb 
修改配置文件,让数据流打通
  1. 进入 /etc/filebeat 目录,修改 filebeat.yml 文件,设置要采集的日志文件路径,和要发送到的 Logstash IP 地址。由于是在同一台 VM 上混部,所以 IP 可以设置为 127.0.0.1。若 Logstash 部署在另外一台 VM 上,则需要配置那台 VM 的 IP 地址。
- type: log
  enabled: false
  paths:
    - /home/dc2-user/userAPP/logs/*.log
  exclude_lines: ['^DBG']
  include_lines: ['^ERR', '^WARN']
  
output.logstash:
  hosts: ["127.0.0.1:5044"]

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

curl -XPUT -H 'Content-Type: application/json' http://localhost:9200/_template/filebeat-6.5.1 -d@filebeat.template.json
  1. 在 /etc/logstash/conf.d 目录下面创建 pipeline.yml,并输入如下内容:
input {
    beats {
        port => "5044"
    }
}
filter {
    grok {
       match => { "message" => "%{TIMESTAMP_ISO8601:logtime} %{NUMBER:pid} %{NOTSPACE:logtype} %{NOTSPACE:logcomponent} %{GREEDYDATA:logmsg}" }
  }
}
output {
    elasticsearch {
        hosts => [localhost:9200]
    }
}

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

 ./logstash-plugin install logstash-input-beats
  1. 进入到 /etc/elasticsearch 目录中,修改 elasticsearch.yml 文件:
# ------------------- Network ------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 127.0.0.1
#
# Set a custom port for HTTP:#
http.port: 9200
#
# For more information, consult the network module documentation.
  1. 进入到 /etc/kibana 目录,修改 kibana.yml 文件。此处的 server.host 一定要配置成0.0.0.0
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://localhost:9200"
kibana.index: ".kibana"

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

总结

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值