网站搜索

如何在 CentOS/RHEL 7 上安装 Elasticsearch、Logstash 和 Kibana(ELK Stack)


如果您现在或曾经负责检查和分析 Linux 中的系统日志,您就会知道如果同时监控多个服务,这项任务会变成一场噩梦。

在过去,该任务大部分必须手动完成,每种日志类型都单独处理。幸运的是,服务器端结合了ElasticsearchLogstashKibana,以及客户端的Filebeat侧面,使曾经艰巨的任务今天看起来就像在公园散步一样。

前三个组件形成了所谓的ELK堆栈,其主要目的是同时从多个服务器收集日志(也称为集中式日志记录)。

建议阅读: 4 个优秀的 Linux 开源日志监控和管理工具

内置的基于 Java 的 Web 界面使您可以一目了然地快速检查日志,以便更轻松地进行比较和故障排除。这些客户端日志通过Filebeat发送到中央服务器,可以将其描述为日志传送代理。

让我们看看所有这些部分如何组合在一起。我们的测试环境将由以下机器组成:

Central Server: CentOS 7 (IP address: 192.168.0.29). 2 GB of RAM.
Client #1: CentOS 7 (IP address: 192.168.0.100). 1 GB of RAM.
Client #2: Debian 8 (IP address: 192.168.0.101). 1 GB of RAM.

请注意,此处提供的 RAM 值并不是严格的先决条件,而是在中央服务器上成功实施 ELK 堆栈的建议值。客户端上较少的RAM不会产生太大的影响(如果有的话)。

在服务器上安装 ELK Stack

让我们首先在服务器上安装 ELK 堆栈,并简要说明每个组件的作用:

  1. Elasticsearch 存储客户端发送的日志。
  2. Logstash 处理这些日志。
  3. Kibana 提供了 Web 界面,可以帮助我们检查和分析日志。

在中央服务器上安装以下软件包。首先,我们将安装 Java JDK 版本 8(更新 102,撰写本文时的最新版本),这是一个依赖项ELK 组件。

您可能需要首先检查此处的 Java 下载页面,看看是否有更新的更新可用。

yum update
cd /opt
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jre-8u102-linux-x64.rpm"
rpm -Uvh jre-8u102-linux-x64.rpm

检查安装是否成功完成的时间:

java -version

要安装最新版本的 ElasticsearchLogstashKibana,我们必须手动为 yum 创建存储库如下:

启用 Elasticsearch 存储库

1. 将 Elasticsearch 公共 GPG 密钥导入 rpm 包管理器:

rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

2.将以下行插入存储库配置文件 elasticsearch.repo

[elasticsearch]
name=Elasticsearch repository
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

3. 安装 Elasticsearch 包。

yum install elasticsearch

安装完成后,会提示启动并启用elasticsearch:

4.启动并启用该服务。

systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch

5. 允许流量通过防火墙中的 TCP 端口 9200

firewall-cmd --add-port=9200/tcp
firewall-cmd --add-port=9200/tcp --permanent

6. 检查 Elasticsearch 是否响应通过 HTTP 的简单请求:

curl -X GET http://localhost:9200

上述命令的输出应类似于:

确保完成上述步骤,然后继续Logstash。由于 LogstashKibana 共享 Elasticsearch GPG 密钥,因此无需在安装软件包之前重新导入它。

建议阅读: 在 CentOS 7 中管理系统日志(配置、轮换和导入到数据库)

启用 Logstash 存储库

7.将以下行插入存储库配置文件logstash.repo

[logstash]
name=Logstash
baseurl=http://packages.elasticsearch.org/logstash/2.2/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1

8. 安装Logstash 软件包:

yum install logstash

9.[ v3_ca ] 部分下方的以下行添加基于 ELK 服务器 IP 地址的 SSL 证书>/etc/pki/tls/openssl.cnf:

[ v3_ca ]
subjectAltName = IP: 192.168.0.29

10.生成有效期365天的自签名证书:

cd /etc/pki/tls
openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

11.配置Logstash输入、输出和过滤器文件:

输入:创建 /etc/logstash/conf.d/input.conf 并将以下行插入其中。这对于 Logstash“学习”如何处理来自客户端的节拍是必要的。确保证书和密钥的路径与上一步中概述的正确路径匹配:

input {
  beats {
	port => 5044
	ssl => true
	ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
	ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

输出(/etc/logstash/conf.d/output.conf)文件:


output {
  elasticsearch {
	hosts => ["localhost:9200"]
	sniffing => true
	manage_template => false
	index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
	document_type => "%{[@metadata][type]}"
  }
}

过滤器 (/etc/logstash/conf.d/filter.conf) 文件。为了简单起见,我们将记录系统日志消息:


filter {
if [type] == "syslog" {
	grok {
  	match => { "message" => "%{SYSLOGLINE}" }
	}

	date {
match => [ "timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
  }
}

12.验证Logstash配置文件。

service logstash configtest

13.启动并启用logstash:

systemctl daemon-reload
systemctl start logstash
systemctl enable logstash

14. 配置防火墙以允许 Logstash 从客户端获取日志(TCP 端口 5044):

firewall-cmd --add-port=5044/tcp
firewall-cmd --add-port=5044/tcp --permanent

启用 Kibana 存储库

14.将以下行插入存储库配置文件 kibana.repo

[kibana]
name=Kibana repository
baseurl=http://packages.elastic.co/kibana/4.4/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

15.安装Kibana软件包:

yum install kibana

16.启动并启用 Kibana。

systemctl daemon-reload
systemctl start kibana
systemctl enable kibana

17. 确保您可以从另一台计算机访问 Kibana 的 Web 界面(允许 TCP 端口 5601 上的流量):

firewall-cmd --add-port=5601/tcp
firewall-cmd --add-port=5601/tcp --permanent

18. 启动 Kibana (http://192.168.0.29:5601) 以验证您是否可以访问 Web 界面:

在客户端安装并配置Filebeat后,我们将返回这里。

建议阅读: Linux 中使用“Log.io”工具实时监控服务器日志

在客户端服务器上安装 Filebeat

我们将向您展示如何对 Client #1 执行此操作(随后对 Client #2 重复此操作,如果适用于您的发行版,请更改路径)。

1. 将 SSL 证书从服务器复制到客户端:

scp /etc/pki/tls/certs/logstash-forwarder.crt [email :/etc/pki/tls/certs/

2.Elasticsearch 公共 GPG 密钥导入 rpm 包管理器:

rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

3.CentOS 中为 Filebeat 创建存储库 (/etc/yum.repos.d/filebeat.repo) > 基于发行版:

[filebeat]
name=Filebeat for ELK clients
baseurl=https://packages.elastic.co/beats/yum/el/$basearch
enabled=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
gpgcheck=1

4. 配置源以在 Debian 及其衍生产品上安装 Filebeat:

aptitude install apt-transport-https
echo "deb https://packages.elastic.co/beats/apt stable main" > /etc/apt/sources.list.d/filebeat.list
aptitude update

5.安装Filebeat软件包:

yum install filebeat        [On CentOS and based Distros]
aptitude install filebeat   [On Debian and its derivatives]

6.启动并启用Filebeat:

systemctl start filebeat
systemctl enable filebeat

配置Filebeat

这里需要注意一点。 Filebeat 配置存储在 YAML 文件中,需要严格缩进。在编辑 /etc/filebeat/filebeat.yml 时要小心,如下所示:

  1. 路径下,指示哪些日志文件应“传送”到 ELK 服务器。
  2. 探矿者下:
input_type: log
document_type: syslog
  1. 输出下:

    1. 取消注释以 logstash 开头的行。
    2. 指示 Logstash 在主机中侦听的 ELK 服务器的 IP 地址和端口。
    3. 确保证书的路径指向您在上面步骤 ILogstash 部分)中创建的实际文件。

上述步骤如下图所示:

保存更改,然后在客户端上重新启动 Filebeat

systemctl restart filebeat

一旦我们在客户端上完成了上述步骤,请随意继续。

测试 Filebeat

为了验证客户端的日志是否能够成功发送和接收,在ELK服务器上运行以下命令:

curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'

输出应类似于(注意如何从 client1 接收来自 /var/log/messages/var/log/secure 的消息和客户端2):

否则,请检查 Filebeat 配置文件是否有错误。

journalctl -xe

尝试重新启动 Filebeat 后,会将您指向有问题的行。

测试 Kibana

在我们验证日志由客户端发送并在服务器上成功接收后。我们在 Kibana 中要做的第一件事是配置索引模式并将其设置为默认值。

您可以将索引描述为关系数据库上下文中的完整数据库。我们将使用 filebeat-* (或者您可以使用官方文档中解释的更精确的搜索条件)。

索引名称模式字段中输入filebeat-*,然后单击创建

请注意,稍后您将被允许输入更细粒度的搜索条件。接下来,单击绿色矩形内的星号,将其配置为默认索引模式:

最后,在发现菜单中,您将找到几个要添加到日志可视化报告中的字段。只需将鼠标悬停在它们上方并单击添加

结果将显示在屏幕的中央区域,如上所示。请随意尝试(在日志报告中添加和删除字段)以熟悉 Kibana

默认情况下,Kibana 将显示过去 15 分钟内处理的记录(参见右上角),但您可以通过选择另一个时间范围来更改该行为:

概括

在本文中,我们解释了如何设置 ELK 堆栈来收集两个客户端(CentOS 7 和 Debian 8 机器)发送的系统日志。

现在,您可以参考官方 Elasticsearch 文档,并找到有关如何使用此设置更有效地检查和分析日志的更多详细信息。

如果您有任何疑问,请随时提问。我们期待您的回音。