本教程适用于以下操作系统版本
- Ubuntu 20.04(Focal Fossa)
- Ubuntu 18.04(Bionic Beaver)
- Ubuntu 16.04(Xenial Xerus)
本页内容
- 环境要求
- 步骤 1 - 添加 Elastic Stack 软件仓库
- 步骤 2 - 安装并配置 Elasticsearch
- 步骤 3 - 安装并配置 Kibana
- 步骤 4 - 将 Nginx 配置为 Kibana 的反向代理
- 步骤 4 - 安装并配置 Filebeat
- 步骤 5 - 为 Kibana 用户设置新角色
- 步骤 6 - 创建新的 Filebeat 索引模式 - 创建索引模式 - 在 Kibana 上展示数据
- - 创建索引模式
- - 在 Kibana 上展示数据
Elastic Stack(前身为 ELK Stack)是 Elastic 开发的一组开源软件,用于从各种来源采集数据。它允许你在集中的 Elastic Stack 平台上采集、存储、处理、分析和可视化来自各种来源的任意格式数据。
Elastic Stack 由多个软件包组成:用于存储数据的 "Elasticsearch",用于访问和可视化数据的仪表板 "Kibana",带有可扩展插件用于处理任意数据的动态数据采集管道 "Logstash",以及用于从边缘机器发送数据的轻量级数据传输平台 "Beats"。
Elastic Stack 可以部署在你服务器上的 Promises 中,也可以购买官方的 SaaS(Software as a Service)Elastic Cloud。
在本教程中,我们将向你展示如何在 Ubuntu 20.04 服务器上安装 Elastic Stack。我们将在同一台服务器上安装 Elasticsearch 和 Kibana,然后在另一台服务器上安装并配置 "Filebeat",将日志直接发送到 Elasticsearch 服务器。
环境要求
在本教程中,我们将使用两台运行 Ubuntu 20.04 的服务器。Elastic Stack 软件将安装在具有 4 GB 内存的服务器上,我们还将使用另一台具有 1 GB 内存的服务器作为 Filebeat 客户端。
我们将进行哪些操作?
- 添加 Elastic Stack 软件仓库
- 安装并配置 Elasticsearch
- 安装并配置 Kibana
- 将 Nginx 配置为 Kibana 的反向代理
- 安装并配置 Filebeat
- 为 Kibana 用户设置新角色
- 创建新的 Filebeat 索引模式
步骤 1 - 添加 Elastic Stack 软件仓库
首先,我们将把 Elastic Stack 软件的 GPG 密钥和软件仓库添加到两台 Ubuntu 服务器上。
在继续之前,请安装 'apt-transport-https',以便通过 HTTPS 安全连接来保护你的软件安装。
sudo apt install apt-transport-https
接下来,使用以下命令添加 Elastic Stack 的 GPG 密钥和软件仓库。
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
现在更新 Ubuntu 系统上所有可用的软件仓库。
sudo apt update
现在你已准备好在两台服务器上安装整个 Elastic 软件栈。

步骤 2 - 安装并配置 Elasticsearch
在此步骤中,我们将在内部 IP 地址为 '172.16.0.3' 的单节点服务器 'ELK20' 上安装并配置 Elasticsearch。
在安装 Elasticsearch 之前,使用 vim 编辑器编辑 '/etc/hosts' 文件。
vim /etc/hosts
现在按如下方式输入你的主机名和内部 IP 地址。
172.16.0.3 ELK20
保存并退出。
接下来,使用以下 apt 命令安装 Elasticsearch 软件包。
sudo apt install elasticsearch
安装完成后,进入 '/etc/elasticsearch' 目录并编辑配置文件 'elasticsearch.yml'。
cd /etc/elasticsearch/
vim elasticsearch.yml
取消注释 'node.name' 并输入你的服务器主机名。
node.name: ELK20
在 'network.host' 行中,输入 Elasticsearch 服务将运行的服务器 IP 地址,建议使用仅内部 IP 地址。
network.host: 172.16.0.3
取消注释 'http.port' 行并保留默认值,Elasticsearch 服务将运行在默认端口 '9200' 上。
http.port: 9200
取消注释 'cluster.initial_master_nodes' 行并输入你的服务器主机名。
cluster.initial_master_nodes: ["ELK20"]
最后,通过在文件末尾添加以下配置来启用 Elasticsearch 安全功能。
xpack.security.enabled: true
保存并退出。
接下来,重新加载 systemd 服务管理器,然后启动 elasticsearch 服务并将其加入系统开机启动。
systemctl daemon-reload
systemctl start elasticsearch
systemctl enable elasticsearch
Elasticsearch 服务已在 Ubuntu 20.04 服务器上启动并运行。

接下来,我们将为 Elasticsearch 上的内置用户生成密码。
进入 '/usr/share/elasticsearch' 目录,并按如下方式运行 elasticsearch 工具命令 'elasticsearch-setup-passwords'。
cd /usr/share/elasticsearch/
bin/elasticsearch-setup-passwords auto -u "http://172.16.0.3:9200"
输入 'y' 确认并生成密码。
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user. The passwords will be randomly generated and printed to the console. Please confirm that you would like to continue [y/N] y
下面是你会得到的结果。
Changed password for user apm_system PASSWORD apm_system = DP5RpFfbCyL6UpIFO8Q3 Changed password for user kibana_system PASSWORD kibana_system = U6gDLoJCqqChqcbD1IYV Changed password for user kibana PASSWORD kibana = U6gDLoJCqqChqcbD1IYV Changed password for user logstash_system PASSWORD logstash_system = KrHaGvHGfkAz12dcSeWo Changed password for user beats_system PASSWORD beats_system = VnUUOtShQoFAGEZ62G7m Changed password for user remote_monitoring_user PASSWORD remote_monitoring_user = xgaLXw6jp3Ses6CZ2hEB Changed password for user elastic PASSWORD elastic = elu2ZlMm4mOkM7fgCeUM
可以看出,Elasticsearch 上部分内置用户的密码已经生成。
图片
为了测试我们的 Elasticsearch 安装,使用默认用户 'elastic' 运行 curl 命令,如下所示。
curl -X GET -u elastic "http://172.16.0.3:9200/?pretty"
输入 'elastic' 用户的密码,下面是你会得到的结果。

至此,Elasticsearch 服务器已启动并运行,并且启用了身份验证。
步骤 3 - 安装并配置 Kibana
在此步骤中,我们将在与 Elasticsearch 相同的服务器上安装并配置 Kibana。我们将使用默认用户 'kibana_system' 以及上面生成的密码将 Kibana 连接到 Elasticsearch 服务器。
使用以下 apt 命令安装 Kibana。
sudo apt install kibana
安装完成后,进入 '/etc/kibana' 目录并使用 vim 编辑器编辑配置文件 'kibana.yml'。
cd /etc/kibana/
vim kibana.yml
取消注释以下行并根据你的情况修改对应的值。建议在本地网络上运行 Kibana,因为我们将使用 Nginx 作为 Kibana 的反向代理。
server.port: 5601 server.host: "172.16.0.3" server.name: "ELK20"
之后,将 'elasticsearch.url' 修改为你的 Elasticsearch IP 地址。
elasticsearch.url: "http://172.16.0.3:9200"
取消注释 "elasticsearch.username" 和 'elasticsearch.password' 行,并将用户名和密码修改为你自己的。
elasticsearch.username: "kibana_system" elasticsearch.password: "N88VBkkelfSV3mBfO6Vh"
保存并退出。
接下来,使用以下命令重新加载 systemd 管理器。
systemctl daemon-reload
之后,启动 Kibana 服务并将其加入系统开机启动。
systemctl start kibana
systemctl enable kibana
Kibana 服务已在 Ubuntu 20.04 系统上启动并运行。

接下来,我们将创建一个新用户,用于登录 Kibana 仪表板。
创建一个名为 'hakase'、密码为 'hakasepasskibana'、角色为 'kibana_admin' 的新用户,如下所示。
curl -X POST -u elastic "http://172.16.0.3:9200/_security/user/hakase?pretty" -H 'Content-Type: application/json' -d'
{
"password" : "hakasepasskibana",
"roles" : [ "kibana_admin" ]
}
'
输入 'elastic' 用户的密码,你将得到如下所示的结果。

至此,新用户 'hakase' 已创建成功,将能够登录 Kibana 仪表板。
步骤 4 - 将 Nginx 配置为 Kibana 的反向代理
在此步骤中,我们将安装并配置 Nginx 作为 Kibana 的反向代理。
使用以下 apt 命令安装 Nginx 软件包。
sudo apt install nginx -y
安装完成后,进入 '/etc/nginx/sites-available/' 目录,并使用 vim 编辑器创建一个新的虚拟主机配置文件 'kibana'。
cd /etc/nginx/sites-available/
vim kibana
将域名和 'proxy_pass' 的 IP 地址修改为你自己的,然后粘贴到文件中。
server {
listen 80;
server_name elk.hakase-labs.io;
location / {
proxy_pass http://172.16.0.3:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
保存并退出。
接下来,激活 Kibana 的 Nginx 虚拟主机并验证 Nginx 配置。
ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/
nginx -t
确保没有错误,然后重启 Nginx 服务。
systemctl restart nginx
至此,将 Nginx 作为 Kibana 反向代理的安装和配置已完成。现在可以通过域名 'elk.hakase-labs.io' 访问 Kibana 仪表板。

打开你的 Web 浏览器,在地址栏中输入你 Kibana 安装的域名。
http://elk.hakase-labs.io/
你将看到如下所示的 Kibana 登录页面。

输入用户 'hakase' 和密码 'hakasepass',然后点击 'Login' 按钮。
登录后,系统会提示你导入示例数据或探索你的数据。

点击 'Explore my own data' 按钮。
现在你将看到如下所示的 Kibana 仪表板。

至此,Kibana 和 Nginx 的安装已完成。
步骤 4 - 安装并配置 Filebeat
在此步骤中,我们将在主机名为 "client01"、IP 地址为 "xxx.xxx.xxx.xxx" 的客户端机器上安装 "Filebeat"。Filebeat 将把日志直接发送到 Elasticsearch 服务器。
在安装 "Filebeat" 之前,请确保已将 Elastic Stack 软件仓库添加到你的系统中。
现在使用以下 apt 命令安装 filebeat 软件包。
sudo apt install filebeat
安装完成后,进入 '/etc/filebeat' 目录并使用 vim 编辑器编辑配置文件 'filebeat.yml'。
cd /etc/filebeat/
vim filebeat.yml
在 'filebeat.inputs' 配置顶部,按如下方式将 'enabled: false' 修改为 'enabled: true'。
filebeat.inputs: - type: log enabled: true paths: - /var/log/*.log
接下来,移动到 Kibana 配置部分,将 host 修改为你 Kibana 的 IP 地址和端口,将 username 修改为默认用户 'kibana',以及修改上面生成的密码。
setup.kibana: host: "172.16.0.3:5601" username: "kibana" password: "U6gDLoJCqqChqcbD1IYV"
之后,移动到 'output.elasticsearch' 配置部分,并根据你的情况修改对应信息。
output.elasticsearch: hosts: ["172.16.0.3:9200"] username: "elastic" password: "elu2ZlMm4mOkM7fgCeUM"
保存并退出。
现在重新加载 systemd 管理器,启动 filebeat 服务并将其加入系统开机启动。
systemctl daemon-reload
systemctl start filebeat
systemctl enable filebeat
filebeat 服务已在 "client01" 机器上启动并运行。

接下来,我们需要使用以下命令将 filebeat 索引模板加载到 Elasticsearch 服务器。
filebeat setup --index-management -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["http://172.16.0.3:9200"]'
下面是你会得到的结果。

至此,filebeat 索引模板已加载到 Elasticsearch 服务器,它将在 Kibana 仪表板中以 'filebeat-*' 索引模式的形式可用。
步骤 5 - 为 Kibana 用户设置新角色
在此步骤中,我们将创建一个新的 elasticsearch 角色,允许我们的用户 'hakase' 通过 Elasticsearch API 访问并管理 Elasticsearch 服务器上的所有索引。
创建一个名为 'events_index' 的新角色,仅允许用户通过以下命令管理 Elasticsearch 服务器上的索引。
curl -XPOST -u elastic 'http://172.16.0.3:9200/_security/role/events_index' -H "Content-Type: application/json" -d '{
"indices" : [
{
"names" : [ "*" ],
"privileges" : [ "all" ]
}
]
}'

之后,使用以下命令查看角色 'events_index'。
curl -X GET -u elastic "http://172.16.0.3:9200/_security/role/events_index?pretty"
下面是你会得到的结果。

可以看出,角色 'events_index' 将仅拥有管理索引的权限。
接下来,使用以下命令将 'events_index' 角色添加到我们的用户 'hakase'。
curl -X POST -u elastic "http://172.16.0.3:9200/_security/user/hakase?pretty" -H 'Content-Type: application/json' -d'
{
"password" : "hakasepasskibana",
"roles" : [ "kibana_admin", "events_index" ]
}
'
输入 'elastic' 用户的密码,角色 'events_index' 已分配给用户 'hakase'。
使用以下命令查看用户 'hakase' 下的所有可用角色。
curl -X GET -u elastic "http://172.16.0.3:9200/_security/user/hakase?pretty"
下面是你会得到的结果。

至此,我们已创建一个用于管理 Elasticsearch 服务器上索引的新角色。
步骤 6 - 创建新的 Filebeat 索引模式
创建名为 'events_index' 的新角色后,我们将通过 'hakase' 用户为 Filebeat 创建一个新的索引模式。
- 创建索引模式
在 Kibana 仪表板上,点击左侧菜单选项,进入 "Management" 部分,然后点击 "Stack Management"。
在 "Kibana" 部分,点击 "Index Pattern"。

点击 "Create index pattern" 按钮以创建一个新的索引模式。
在 "index pattern" 字段中,输入 "filebeat-*",然后点击 "Next step" 按钮。

在 "Time Filter field name" 中,选择 "@timestamp",然后点击 "Create index pattern" 按钮。

至此,"filebeat-*" 索引模式已创建,并且它会被选为默认索引模式(如果你此前没有任何索引模式)。

- 在 Kibana 上展示数据
要展示 filebeat 采集的数据,点击左上角的选项菜单,然后点击 "Discover"。
你将看到 filebeat 从 "client01" 机器采集的所有数据。

要按你的筛选条件展示数据,可以使用 "KQL"(即 Kibana Query Language)。
在 "KQL" 字段中输入以下查询。
host.name : client01 and log.file.path: "/var/log/auth.log"
你将看到 "client01" 机器上关于 SSH 身份验证的所有信息。

至此,在 Ubuntu 20.04 上启用安全功能的 Elastic Stack 安装已成功完成。