本教程适用于以下操作系统版本

  • 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 软件栈。

在 Ubuntu 系统上安装并配置 Elastic Stack 日志分析平台

步骤 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 服务器上启动并运行。

在 Ubuntu 系统上安装并配置 Elastic Stack 日志分析平台

接下来,我们将为 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' 用户的密码,下面是你会得到的结果。

在 Ubuntu 系统上安装并配置 Elastic Stack 日志分析平台

至此,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 系统上启动并运行。

在 Ubuntu 系统上安装并配置 Elastic Stack 日志分析平台

接下来,我们将创建一个新用户,用于登录 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' 用户的密码,你将得到如下所示的结果。

在 Ubuntu 系统上安装并配置 Elastic Stack 日志分析平台

至此,新用户 '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 仪表板。

在 Ubuntu 系统上安装并配置 Elastic Stack 日志分析平台

打开你的 Web 浏览器,在地址栏中输入你 Kibana 安装的域名。

http://elk.hakase-labs.io/

你将看到如下所示的 Kibana 登录页面。

在 Ubuntu 系统上安装并配置 Elastic Stack 日志分析平台

输入用户 'hakase' 和密码 'hakasepass',然后点击 'Login' 按钮。

登录后,系统会提示你导入示例数据或探索你的数据。

在 Ubuntu 系统上安装并配置 Elastic Stack 日志分析平台

点击 'Explore my own data' 按钮。

现在你将看到如下所示的 Kibana 仪表板。

在 Ubuntu 系统上安装并配置 Elastic Stack 日志分析平台

至此,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" 机器上启动并运行。

在 Ubuntu 系统上安装并配置 Elastic Stack 日志分析平台

接下来,我们需要使用以下命令将 filebeat 索引模板加载到 Elasticsearch 服务器。

filebeat setup --index-management -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["http://172.16.0.3:9200"]'

下面是你会得到的结果。

在 Ubuntu 系统上安装并配置 Elastic Stack 日志分析平台

至此,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" ]
    }
  ]
}'

在 Ubuntu 系统上安装并配置 Elastic Stack 日志分析平台

之后,使用以下命令查看角色 'events_index'。

curl -X GET -u elastic "http://172.16.0.3:9200/_security/role/events_index?pretty"

下面是你会得到的结果。

在 Ubuntu 系统上安装并配置 Elastic Stack 日志分析平台

可以看出,角色 '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"

下面是你会得到的结果。

在 Ubuntu 系统上安装并配置 Elastic Stack 日志分析平台

至此,我们已创建一个用于管理 Elasticsearch 服务器上索引的新角色。

步骤 6 - 创建新的 Filebeat 索引模式

创建名为 'events_index' 的新角色后,我们将通过 'hakase' 用户为 Filebeat 创建一个新的索引模式。

- 创建索引模式

在 Kibana 仪表板上,点击左侧菜单选项,进入 "Management" 部分,然后点击 "Stack Management"。

在 "Kibana" 部分,点击 "Index Pattern"。

在 Ubuntu 系统上安装并配置 Elastic Stack 日志分析平台

点击 "Create index pattern" 按钮以创建一个新的索引模式。

在 "index pattern" 字段中,输入 "filebeat-*",然后点击 "Next step" 按钮。

在 Ubuntu 系统上安装并配置 Elastic Stack 日志分析平台

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

在 Ubuntu 系统上安装并配置 Elastic Stack 日志分析平台

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

在 Ubuntu 系统上安装并配置 Elastic Stack 日志分析平台

- 在 Kibana 上展示数据

要展示 filebeat 采集的数据,点击左上角的选项菜单,然后点击 "Discover"。

你将看到 filebeat 从 "client01" 机器采集的所有数据。

在 Ubuntu 系统上安装并配置 Elastic Stack 日志分析平台

要按你的筛选条件展示数据,可以使用 "KQL"(即 Kibana Query Language)。

在 "KQL" 字段中输入以下查询。

host.name : client01 and log.file.path: "/var/log/auth.log"

你将看到 "client01" 机器上关于 SSH 身份验证的所有信息。

在 Ubuntu 系统上安装并配置 Elastic Stack 日志分析平台

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