搭建 Elastic Stack 日志系统

Elastic Stack 是原 ELK Stack 在 5.0 版本加入 Beats 套件后的新称呼。Elastic Stack 在实时日志处理领域已开成开源界的第一选择。
本文讲述如何搭建 Elastic Stack 日志系统,使用的套件包括 Kibana,Elasticsearch,以及 Filebeat。搭建的环境选择阿里云 ECS 服务器,系统为 CentOS 7.4 64 位。

搭建 Kibana

Kibana 用来实现数据的可视化。Kibana 能够以图表的形式呈现数据,并且具有可扩展的用户界面,可以供我们全方位配置和管理 Elatic Stack。

搭建 Kibana 的步骤如下。

(1)添加 yum 源
在 /etc/yum.repos.d 目录创建 kibana.repo 文件,内容如下:

1
2
3
4
5
6
7
8
[kibana-5.x]
name=Kibana repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

(2)安装 Kibana
运行安装命令:

yum install kibana

Kibana 安装后的主目录为 /usr/share/kibana,日志目录为 /var/log/kibana/ 。

(3)查看系统的初始化进程

查找进程 ID 为 1 的进程:

ps -p 1

输出:

1
2
PID TTY TIME CMD
1 ? 00:00:00 systemd

可以看到我们的系统使用 systemd 作为初始化进程。

(4)配置 Kibana 随系统启动而启动

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable kibana.service

如果系统使用 init 初始化,则命令为

sudo chkconfig –add kibana

(5)修改 kibana 绑定的 IP

打开 kibana 的配置文件 /etc/kibana/kibana.yml,将 server.host 配置改成 “0.0.0.0”。

server.host: “0.0.0.0”

注意 ECS 实际上并没有公网IP的网卡,所以不能直接绑定公网IP,否则会导致 kibana 启动不成功。

(6)运行 Kibana

sudo systemctl start kibana.service

关闭 Kibana 命令为

sudo systemctl stop kibana.service

如果系统使用 init 实始化,则启动和关闭的命令为

sudo -i service kibana start
sudo -i service kibana stop

(7)验证运行成功

打开浏览器,输入 Kibana 安装所在机器的 ip:5601,便可以看到以下的页面,说明 Kibana 已成功安装 。

搭建 Elasticsearch

Elasticsearch 用来搜索、分析和存储数据。Elasticsearch 是基于 JSON 的分布式搜索和分析引擎,专为实现水平扩展,高可用和管理便捷而设计。
有了安装 Kibana 的经验,安装 Elasticsearch (下文称为 ES)就显得容易多了。

(1)安装 ES

yum install elasticsearch

安装后的日志目录为 /var/log/elasticsearch/,配置文件为 /etc/sysconfig/elasticsearch 和 /etc/elasticsearch/elasticsearch.yml。

(2)配置 ES 随系统启动而启动

如果使用 systemd 作为启动进程:

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service

如果使用 init 作为启动进程:

sudo chkconfig –add elasticsearch

(3)更改 ES 绑定的 IP 和端口

vim /etc/elasticsearch/elasticsearch.yml

写入 network.host: 0.0.0.0 配置。
如果需要更改端口,可以修改 http.port: 9200 配置。

(4)安装 Java 运行环境
ES 的运行依赖于 Java 运行环境,因此,需要安装 Java 运行环境。

yum install java-1.8.0-openjdk.x86_64

(5)启动 ES

如果使用 systemd 作为初始化进程,启动和关闭命令为

sudo systemctl start elasticsearch.service
sudo systemctl stop elasticsearch.service

如果需要查看 ES 的启动日志,可以使用命令:

journalctl –unit elasticsearch

这个命令对于查看 ES 启动是否成功很有帮助,如果启动失败,此命令也便于定位问题。

如果使用 init 作为初始化进程,启动和关闭命令

sudo -i service elasticsearch start
sudo -i service elasticsearch stop

(6)验证 ES 运行是否成功

浏览器输入 http://IP:9200/,可以看到以下输出:

{
“name”: “0rXIiW1”,
“cluster_name”: “elasticsearch”,
“cluster_uuid”: “zD4DE0jHR3yroGTQau0ENQ”,
“version”: {
“number”: “5.6.3”,
“build_hash”: “1a2f265”,
“build_date”: “2017-10-06T20:33:39.012Z”,
“build_snapshot”: false,
“lucene_version”: “6.6.1”
},
“tagline”: “You Know, for Search”
}

说明 ES 启动已成功。

搭建 Filebeat

Elastic Stack 提供 Beats 和 Logstash 套件来采集任何来源、任何格式的数据。Beats 是一个轻量级的采集器,支持从边缘机器向 Logstash 和 Elasticsearch 发送数据。Logstash 是一个动态数据收集管道,能够与 Elasticsearch 产生协同作用。
考虑到 Logstash 占用系统资源较多,我们采用 Filebeat 来作为我们的日志采集器。

(1)安装 Filebeat

yum install filebeat

Filebeat 的日志目录为 /var/log/filebeat,配置文件为 /etc/filebeat/filebeat.yml。

(2)修改 ES 的配置

在我们搭建的日志系统中,Filebeat 收集日志后发送给 ES ,故需要对 Filebeat 的 ES 配置进行修改。
打开 /etc/filebeat/filebeat.yml 文件,改更 ES 的配置为

1
2
3
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["127.0.0.1:9200"]

使用 127.0.0.1 是由于 Filebeat 跟 ES 部署了在同一台机器,如果不在同一台机器,则需要根据实际情况填写 ES 的 IP。

(3)修改 Filebeat 监控的日志

打开 /etc/filebeat/filebeat.yml 文件,修改以下配置:

1
2
3
4
- input_type: log
# Paths that should be crawled and fetched. Glob based paths.
paths:
- /root/logs/*.log

即我们以目录 /root/logs 下的 *.log 日志作为 Filebeat 监控对象。

(4)运行 Filebeat

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable filebeat.service
sudo systemctl start filebeat.service

关闭命令为

sudo systemctl stop filebeat.service

如果以 init 作为初始化进程,则可以参考上述 Kibana 或者 ES 的命令,此处不再贅述。

(5)利用 Kibana 创建 index pattern

在 index pattern 输入框中输入 filebeat-*,即如下图所示:

(6)验证 Filebeat 运行是否正常
在 /root/logs 目录下创建 test.log 文件,然后执行

echo “hello\n” >> test.log

模拟日志文件产生了新的日志。

然后打开 Kibana,可以看到 hello 已显示出来。

(7)配置 Filebeat 支持多行日志

在日志文件中,常常会出现日志会占用多行的情况,例如 traceback 异常日志,输出 SQL 代码的日志,等。
假设我们的日志格式都是以 DEBUG, INFO, WARN, ERROR 开头,例如 DEBUG 日志如下

WARN|2017-10-27 13:42:19 000|pubservice.cpp(330)-: LDAP认证失败,服务:FOS_101_0020,用户名: system

为了在 Kibana 中正常显示这种多行日志,可以通过修改 Filebeat 的配置来实现。

打开 /etc/filebeat/filebeat.yml 文件,修改以下配置:

其中 multiline.pattern 指定日志以 DEBUG, INFO, WARN, ERROR 开头。

参考资料

  1. https://www.elastic.co/cn/products
  2. https://data.aliyun.com/product/elasticsearch
  3. https://www.elastic.co/guide/en/kibana/current/rpm.html
  4. https://www.elastic.co/guide/en/elasticsearch/reference/current/rpm.html
  5. https://www.elastic.co/guide/en/beats/filebeat/current/setup-repositories.html