如何在CentOS7上安装Elasticsearch、Logstash和Kibana(ElasticStack)

来自菜鸟教程
跳转至:导航、​搜索

作为 Write for DOnations 计划的一部分,作者选择了 Software in the Public Interest 来接受捐赠。

介绍

Elastic Stack — 以前称为 ELK Stack — 是由 Elastic 制作的开源软件集合,它允许您搜索、分析和可视化从任何来源生成的日志任何格式,一种称为 集中式日志记录 的做法。 在尝试识别服务器或应用程序的问题时,集中式日志记录非常有用,因为它允许您在一个地方搜索所有日志。 它也很有用,因为它允许您通过在特定时间范围内关联它们的日志来识别跨多个服务器的问题。

Elastic Stack 有四个主要组件:

  • Elasticsearch:一个分布式的 RESTful 搜索引擎,存储所有收集的数据。
  • Logstash:Elastic Stack 的数据处理组件,将传入数据发送到 Elasticsearch。
  • Kibana:用于搜索和可视化日志的 Web 界面。
  • Beats:轻量级、单一用途的数据传送器,可以将数据从数百或数千台机器发送到 Logstash 或 Elasticsearch。

在本教程中,您将在 CentOS 7 服务器上安装 Elastic Stack。 您将学习如何安装 Elastic Stack 的所有组件——包括 Filebeat,一种用于转发和集中日志和文件的 Beat——并配置它们以收集和可视化系统日志。 此外,由于 Kibana 通常仅在 localhost 上可用,因此您将使用 Nginx 代理它,以便可以通过 Web 浏览器访问它。 在本教程结束时,您将在单个服务器上安装所有这些组件,称为 Elastic Stack 服务器

注意:安装 Elastic Stack 时,应在整个堆栈中使用相同的版本。 本教程使用每个组件的最新版本,在撰写本文时,它们是 Elasticsearch 6.5.2、Kibana 6.5.2、Logstash 6.5.2 和 Filebeat 6.5.2。


先决条件

要完成本教程,您将需要以下内容:

  • 一台 CentOS 7 服务器按照 Initial Server Setup with CentOS 7 设置,包括具有 sudo 权限的非 root 用户和 防火墙 。 您的 Elastic Stack 服务器所需的 CPU、RAM 和存储量取决于您打算收集的日志量。 在本教程中,您将为我们的 Elastic Stack 服务器使用具有以下规格的 VPS:
    • 操作系统:CentOS 7.5
    • 内存:4GB
    • 中央处理器:2
  • Java 8(Elasticsearch 和 Logstash 需要)安装在您的服务器上。 请注意,不支持 Java 9。 要安装它,请按照我们指南中有关如何在 CentOS 上安装 Java 的 “安装 OpenJDK 8 JRE” 部分进行操作。
  • Nginx 安装在您的服务器上,您将在本指南后面将其配置为 Kibana 的反向代理。 请按照我们关于 如何在 CentOS 7 上安装 Nginx 的指南进行设置。

此外,由于 Elastic Stack 用于访问您不希望未经授权的用户访问的有关您的服务器的有价值信息,因此通过安装 TLS/SSL 证书来确保您的服务器安全非常重要。 这是可选的,但 强烈建议 。 因为您最终将在本指南的过程中更改您的 Nginx 服务器块,所以我们建议您在本教程的第二步之后立即完成 Let's Encrypt on CentOS 7 指南来实施此安全措施。

如果您确实计划在您的服务器上配置 Let's Encrypt,那么在执行此操作之前,您需要准备好以下内容:

  • 完全限定域名 (FQDN)。 本教程将自始至终使用 example.com。 您可以在 Namecheap 上购买一个域名,在 Freenom 上免费获得一个域名,或者使用您选择的域名注册商。
  • 为您的服务器设置了以下两个 DNS 记录。 您可以关注这个DigitalOcean DNS的介绍,详细了解如何添加它们。
    • 带有 example.com 的 A 记录指向您服务器的公共 IP 地址。
    • 带有 www.example.com 的 A 记录指向您服务器的公共 IP 地址。

第 1 步 — 安装和配置 Elasticsearch

默认情况下,Elastic Stack 组件无法通过包管理器获得,但您可以通过添加 Elastic 的包存储库,使用 yum 安装它们。

Elastic Stack 的所有软件包都使用 Elasticsearch 签名密钥进行签名,以保护您的系统免受软件包欺骗。 已使用密钥进行身份验证的包将被您的包管理器视为信任。 在此步骤中,您将导入 Elasticsearch 公共 GPG 密钥并添加 Elastic 存储库以安装 Elasticsearch。

运行以下命令下载并安装 Elasticsearch 公共签名密钥:

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

接下来,添加 Elastic 存储库。 使用您喜欢的文本编辑器在 /etc/yum.repos.d/ 目录中创建文件 elasticsearch.repo。 在这里,我们将使用 vi 文本编辑器:

sudo vi /etc/yum.repos.d/elasticsearch.repo

要为 yum 提供下载和安装 Elastic Stack 组件所需的信息,请按 i 进入插入模式,并将以下行添加到文件中。

/etc/yum.repos.d/elasticsearch.repo

[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

在这里,您包含了 repo 的可读 name、repo 数据目录的 baseurl 以及验证 Elastic 包所需的 gpgkey

完成后,按 ESC 退出插入模式,然后按 :wqENTER 保存并退出文件。 要了解有关文本编辑器 vi 及其后续版本 vim 的更多信息,请查看我们的 在云服务器上安装和使用 Vim 文本编辑器 教程。

添加存储库后,您现在可以安装 Elastic Stack。 根据官方文档,你应该在安装其他组件之前安装Elasticsearch。 按此顺序安装可确保每个产品所依赖的组件正确就位。

使用以下命令安装 Elasticsearch:

sudo yum install elasticsearch

Elasticsearch 安装完成后,在编辑器中打开其主配置文件 elasticsearch.yml

sudo vi /etc/elasticsearch/elasticsearch.yml

注意: Elasticsearch的配置文件是YAML格式,也就是说缩进很重要! 确保在编辑此文件时不要添加任何额外的空格。


Elasticsearch 在端口 9200 上侦听来自各处的流量。 您需要限制对 Elasticsearch 实例的外部访问,以防止外部人员通过 REST API 读取您的数据或关闭您的 Elasticsearch 集群。 找到指定 network.host 的行,取消注释,并将其值替换为 localhost,如下所示:

/etc/elasticsearch/elasticsearch.yml

. . .
network.host: localhost
. . .

保存并关闭 elasticsearch.yml。 然后,使用 systemctl 启动 Elasticsearch 服务:

sudo systemctl start elasticsearch

接下来,运行以下命令以使 Elasticsearch 在每次服务器启动时启动:

sudo systemctl enable elasticsearch

您可以通过发送 HTTP 请求来测试您的 Elasticsearch 服务是否正在运行:

curl -X GET "localhost:9200"

您将看到显示有关本地节点的一些基本信息的响应,类似于以下内容:

Output{
  "name" : "8oSCBFJ",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "1Nf9ZymBQaOWKpMRBfisog",
  "version" : {
    "number" : "6.5.2",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "9434bed",
    "build_date" : "2018-11-29T23:58:20.891072Z",
    "build_snapshot" : false,
    "lucene_version" : "7.5.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

现在 Elasticsearch 已经启动并运行,让我们安装 Kibana,Elastic Stack 的下一个组件。

第 2 步 — 安装和配置 Kibana 仪表板

根据官方文档中的安装顺序,应该安装Kibana作为Elasticsearch之后的下一个组件。 设置 Kibana 后,我们将能够使用它的界面来搜索和可视化 Elasticsearch 存储的数据。

因为您已经在上一步中添加了 Elastic 存储库,所以您可以使用 yum 安装 Elastic Stack 的其余组件:

sudo yum install kibana

然后启用并启动 Kibana 服务:

sudo systemctl enable kibana
sudo systemctl start kibana

因为 Kibana 被配置为只监听 localhost,我们必须设置一个 反向代理 以允许外部访问它。 我们将为此目的使用 Nginx,它应该已经安装在您的服务器上。

首先,使用 openssl 命令创建一个管理 Kibana 用户,您将使用该用户访问 Kibana Web 界面。 例如,我们将此帐户命名为 kibanaadmin,但为了确保更高的安全性,我们建议您为您的用户选择一个难以猜测的非标准名称。

以下命令将创建管理 Kibana 用户和密码,并将它们存储在 htpasswd.users 文件中。 您将配置 Nginx 以要求此用户名和密码并立即读取此文件:

echo "kibanaadmin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users

在提示符处输入并确认密码。 记住或记下此登录信息,因为您将需要它来访问 Kibana Web 界面。

接下来,我们将创建一个 Nginx 服务器块文件。 例如,我们将此文件称为 example.com.conf,尽管您可能会发现给您的文件起一个更具描述性的名称会有所帮助。 例如,如果您为此服务器设置了 FQDN 和 DNS 记录,则可以在 FQDN 之后命名此文件:

sudo vi /etc/nginx/conf.d/example.com.conf

将以下代码块添加到文件中,确保更新 example.comwww.example.com 以匹配您服务器的 FQDN 或公共 IP 地址。 此代码将 Nginx 配置为将服务器的 HTTP 流量定向到 Kibana 应用程序,该应用程序正在侦听 localhost:5601。 此外,它将 Nginx 配置为读取 htpasswd.users 文件并需要基本身份验证。

请注意,如果您一直遵循 先决条件 Nginx 教程 到最后,您可能已经创建了此文件并在其中填充了一些内容。 在这种情况下,请在添加以下内容之前删除文件中的所有现有内容:

/etc/nginx/conf.d/<^>example.com<^>.conf

server {
    listen 80;

    server_name example.com www.example.com;

    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/htpasswd.users;

    location / {
        proxy_pass http://localhost: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;
    }
}

完成后,保存并关闭文件。

然后检查配置是否有语法错误:

sudo nginx -t

如果在您的输出中报告了任何错误,请返回并仔细检查您放置在配置文件中的内容是否已正确添加。 在输出中看到 syntax is ok 后,继续并重新启动 Nginx 服务:

sudo systemctl restart nginx

默认情况下,SELinux 安全策略设置为强制执行。 运行以下命令以允许 Nginx 访问代理服务:

sudo setsebool httpd_can_network_connect 1 -P

您可以在教程 An Introduction to SELinux on CentOS 7 中了解有关 SELinux 的更多信息。

现在可以通过您的 FQDN 或 Elastic Stack 服务器的公共 IP 地址访问 Kibana。 您可以通过导航到以下地址并在出现提示时输入您的登录凭据来检查 Kibana 服务器的状态页面:

http://your_server_ip/status

此状态页面显示有关服务器资源使用情况的信息并列出已安装的插件。

注意:如前提条件部分所述,建议您在服务器上启用 SSL/TLS。 您现在可以按照本教程获取CentOS 7上Nginx的免费SSL证书。 获得 SSL/TLS 证书后,您可以返回并完成本教程。


现在 Kibana 仪表板已配置完毕,让我们安装下一个组件:Logstash。

第 3 步 — 安装和配置 Logstash

虽然 Beats 可以将数据直接发送到 Elasticsearch 数据库,但我们建议先使用 Logstash 处理数据。 这将允许您从不同来源收集数据,将其转换为通用格式,并将其导出到另一个数据库。

使用以下命令安装 Logstash:

sudo yum install logstash

安装 Logstash 后,您可以继续进行配置。 Logstash 的配置文件以 JSON 格式编写,位于 /etc/logstash/conf.d 目录中。 在配置它时,将 Logstash 视为一个管道,它在一端接收数据,以一种或另一种方式处理它,然后将其发送到它的目的地(在这种情况下,目的地是 Elasticsearch),这很有帮助。 Logstash 管道有两个必需元素 inputoutput,以及一个可选元素 filter。 输入插件使用来自源的数据,过滤器插件处理数据,输出插件将数据写入目的地。

创建一个名为 02-beats-input.conf 的配置文件,您将在其中设置 Filebeat 输入:

sudo vi /etc/logstash/conf.d/02-beats-input.conf

插入以下 input 配置。 这指定将侦听 TCP 端口 5044beats 输入。

/etc/logstash/conf.d/02-beats-input.conf

input {
  beats {
    port => 5044
  }
}

保存并关闭文件。 接下来,创建一个名为 10-syslog-filter.conf 的配置文件,它将为系统日志添加一个过滤器,也称为 syslogs

sudo vi /etc/logstash/conf.d/10-syslog-filter.conf

插入以下 syslog 过滤器配置。 此示例系统日志配置取自 官方 Elastic 文档 。 此过滤器用于解析传入的系统日志,以使它们结构化并可供预定义的 Kibana 仪表板使用:

/etc/logstash/conf.d/10-syslog-filter.conf

filter {
  if [fileset][module] == "system" {
    if [fileset][name] == "auth" {
      grok {
        match => { "message" => ["%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} %{DATA:[system][auth][ssh][method]} for (invalid user )?%{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]} port %{NUMBER:[system][auth][ssh][port]} ssh2(: %{GREEDYDATA:[system][auth][ssh][signature]})?",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} user %{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]}",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: Did not receive identification string from %{IPORHOST:[system][auth][ssh][dropped_ip]}",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sudo(?:\[%{POSINT:[system][auth][pid]}\])?: \s*%{DATA:[system][auth][user]} :( %{DATA:[system][auth][sudo][error]} ;)? TTY=%{DATA:[system][auth][sudo][tty]} ; PWD=%{DATA:[system][auth][sudo][pwd]} ; USER=%{DATA:[system][auth][sudo][user]} ; COMMAND=%{GREEDYDATA:[system][auth][sudo][command]}",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} groupadd(?:\[%{POSINT:[system][auth][pid]}\])?: new group: name=%{DATA:system.auth.groupadd.name}, GID=%{NUMBER:system.auth.groupadd.gid}",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} useradd(?:\[%{POSINT:[system][auth][pid]}\])?: new user: name=%{DATA:[system][auth][user][add][name]}, UID=%{NUMBER:[system][auth][user][add][uid]}, GID=%{NUMBER:[system][auth][user][add][gid]}, home=%{DATA:[system][auth][user][add][home]}, shell=%{DATA:[system][auth][user][add][shell]}$",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} %{DATA:[system][auth][program]}(?:\[%{POSINT:[system][auth][pid]}\])?: %{GREEDYMULTILINE:[system][auth][message]}"] }
        pattern_definitions => {
          "GREEDYMULTILINE"=> "(.|\n)*"
        }
        remove_field => "message"
      }
      date {
        match => [ "[system][auth][timestamp]", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
      }
      geoip {
        source => "[system][auth][ssh][ip]"
        target => "[system][auth][ssh][geoip]"
      }
    }
    else if [fileset][name] == "syslog" {
      grok {
        match => { "message" => ["%{SYSLOGTIMESTAMP:[system][syslog][timestamp]} %{SYSLOGHOST:[system][syslog][hostname]} %{DATA:[system][syslog][program]}(?:\[%{POSINT:[system][syslog][pid]}\])?: %{GREEDYMULTILINE:[system][syslog][message]}"] }
        pattern_definitions => { "GREEDYMULTILINE" => "(.|\n)*" }
        remove_field => "message"
      }
      date {
        match => [ "[system][syslog][timestamp]", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
      }
    }
  }
}

完成后保存并关闭文件。

最后,创建一个名为 30-elasticsearch-output.conf 的配置文件:

sudo vi /etc/logstash/conf.d/30-elasticsearch-output.conf

插入以下 output 配置。 此输出将 Logstash 配置为将 Beats 数据存储在 Elasticsearch 中,Elasticsearch 在 localhost:9200 上运行,以使用的 Beat 命名的索引中。 本教程中使用的 Beat 是 Filebeat:

/etc/logstash/conf.d/30-elasticsearch-output.conf

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

保存并关闭文件。

如果要为使用 Filebeat 输入的其他应用程序添加过滤器,请务必命名文件,以便它们在输入和输出配置之间排序,这意味着文件名应以 [X244X 之间的两位数字] 和 30

使用以下命令测试您的 Logstash 配置:

sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t

如果没有语法错误,您的输出将在几秒钟后显示 Configruation OK。 如果您在输出中没有看到这一点,请检查输出中出现的任何错误并更新您的配置以更正它们。

如果您的配置测试成功,请启动并启用 Logstash 以使配置更改生效:

sudo systemctl start logstash
sudo systemctl enable logstash

现在 Logstash 运行正常并且配置齐全,让我们安装 Filebeat。

第 4 步 — 安装和配置 Filebeat

Elastic Stack 使用几个称为 Beats 的轻量级数据传送器从各种来源收集数据并将它们传输到 Logstash 或 Elasticsearch。 以下是 Elastic 目前提供的 Beats:

  • Filebeat:收集和发送日志文件。
  • Metricbeat:从您的系统和服务中收集指标。
  • Packetbeat:收集和分析网络数据。
  • Winlogbeat:收集 Windows 事件日志。
  • Auditbeat:收集Linux审计框架数据,监控文件完整性。
  • Heartbeat:通过主动探测监控服务的可用性。

在本教程中,我们将使用 Filebeat 将本地日志转发到我们的 Elastic Stack。

使用 yum 安装 Filebeat:

sudo yum install filebeat

接下来,配置 Filebeat 以连接到 Logstash。 在这里,我们将修改 Filebeat 自带的示例配置文件。

打开 Filebeat 配置文件:

sudo vi /etc/filebeat/filebeat.yml

注意: 和 Elasticsearch 一样,Filebeat 的配置文件是 YAML 格式。 这意味着正确的缩进至关重要,因此请务必使用这些说明中指示的相同数量的空格。


Filebeat 支持多种输出,但您通常只会将事件直接发送到 Elasticsearch 或 Logstash 以进行额外处理。 在本教程中,我们将使用 Logstash 对 Filebeat 收集的数据进行额外处理。 Filebeat 不需要直接向 Elasticsearch 发送任何数据,所以让我们禁用该输出。 为此,请找到 output.elasticsearch 部分并通过在以下行前面加上 # 来注释掉它们:

/etc/filebeat/filebeat.yml

...
#output.elasticsearch:
  # Array of hosts to connect to.
  #hosts: ["localhost:9200"]
...

然后,配置 output.logstash 部分。 通过删除 # 取消注释 output.logstash:hosts: ["localhost:5044"] 行。 这会将 Filebeat 配置为连接到 Elastic Stack 服务器上的端口 5044 上的 Logstash,我们之前指定了 Logstash 输入的端口:

/etc/filebeat/filebeat.yml

output.logstash:
  # The Logstash hosts
  hosts: ["localhost:5044"]

保存并关闭文件。

您现在可以使用 Filebeat 模块 扩展 Filebeat 的功能。 在本教程中,您将使用 system 模块,该模块收集和解析由常见 Linux 发行版的系统日志服务创建的日志。

让我们启用它:

sudo filebeat modules enable system

您可以通过运行以下命令查看启用和禁用模块的列表:

sudo filebeat modules list

您将看到类似于以下内容的列表:

OutputEnabled:
system

Disabled:
apache2
auditd
elasticsearch
haproxy
icinga
iis
kafka
kibana
logstash
mongodb
mysql
nginx
osquery
postgresql
redis
suricata
traefik

默认情况下,Filebeat 配置为使用系统日志和授权日志的默认路径。 在本教程的情况下,您不需要更改配置中的任何内容。 在【X49X】【X53X】配置文件中可以看到模块的参数。

接下来,将索引模板加载到 Elasticsearch 中。 Elasticsearch 索引 是具有相似特征的文档的集合。 索引用一个名称标识,用于在其中执行各种操作时引用索引。 创建新索引时将自动应用索引模板。

要加载模板,请使用以下命令:

sudo filebeat setup --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'

这将给出以下输出:

OutputLoaded index template

Filebeat 附带了示例 Kibana 仪表板,可让您在 Kibana 中可视化 Filebeat 数据。 在使用仪表板之前,您需要创建索引模式并将仪表板加载到 Kibana 中。

随着仪表板的加载,Filebeat 连接到 Elasticsearch 以检查版本信息。 要在启用 Logstash 时加载仪表板,您需要手动禁用 Logstash 输出并启用 Elasticsearch 输出:

sudo filebeat setup -e -E output.logstash.enabled=false -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601

您将看到如下所示的输出:

Output. . .
2018-12-05T21:23:33.806Z        INFO    elasticsearch/client.go:163     Elasticsearch url: http://localhost:9200
2018-12-05T21:23:33.811Z        INFO    elasticsearch/client.go:712     Connected to Elasticsearch version 6.5.2
2018-12-05T21:23:33.815Z        INFO    template/load.go:129    Template already exists and will not be overwritten.
Loaded index template
Loading dashboards (Kibana must be running and reachable)
2018-12-05T21:23:33.816Z        INFO    elasticsearch/client.go:163     Elasticsearch url: http://localhost:9200
2018-12-05T21:23:33.819Z        INFO    elasticsearch/client.go:712     Connected to Elasticsearch version 6.5.2
2018-12-05T21:23:33.819Z        INFO    kibana/client.go:118    Kibana url: http://localhost:5601
2018-12-05T21:24:03.981Z        INFO    instance/beat.go:717    Kibana dashboards successfully loaded.
Loaded dashboards
2018-12-05T21:24:03.982Z        INFO    elasticsearch/client.go:163     Elasticsearch url: http://localhost:9200
2018-12-05T21:24:03.984Z        INFO    elasticsearch/client.go:712     Connected to Elasticsearch version 6.5.2
2018-12-05T21:24:03.984Z        INFO    kibana/client.go:118    Kibana url: http://localhost:5601
2018-12-05T21:24:04.043Z        WARN    fileset/modules.go:388  X-Pack Machine Learning is not enabled
2018-12-05T21:24:04.080Z        WARN    fileset/modules.go:388  X-Pack Machine Learning is not enabled
Loaded machine learning job configurations

现在您可以启动并启用 Filebeat:

sudo systemctl start filebeat
sudo systemctl enable filebeat

如果您正确设置了 Elastic Stack,Filebeat 将开始将您的系统日志和授权日志传送到 Logstash,然后将这些数据加载到 Elasticsearch。

要验证 Elasticsearch 确实在接收此数据,请使用以下命令查询 Filebeat 索引:

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

您将看到类似于此的输出:

Output{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 3,
    "successful" : 3,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 3225,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "filebeat-6.5.2-2018.12.05",
        "_type" : "doc",
        "_id" : "vf5GgGcB_g3p-PRo_QOw",
        "_score" : 1.0,
        "_source" : {
          "@timestamp" : "2018-12-05T19:00:34.000Z",
          "source" : "/var/log/secure",
          "meta" : {
            "cloud" : {
. . .

如果您的输出显示总命中数为 0,则 Elasticsearch 没有在您搜索的索引下加载任何日志,您需要检查您的设置是否有错误。 如果您收到了预期的输出,请继续执行下一步,在此您将熟悉 Kibana 的一些仪表板。

第 5 步 — 探索 Kibana 仪表板

让我们看一下我们之前安装的 Web 界面 Kibana。

在 Web 浏览器中,转到 Elastic Stack 服务器的 FQDN 或公共 IP 地址。 输入您在第 2 步中定义的登录凭据后,您将看到 Kibana 主页:

单击左侧导航栏中的 Discover 链接。 在 Discover 页面上,选择预定义的 filebeat-* 索引模式以查看 Filebeat 数据。 默认情况下,这将显示过去 15 分钟内的所有日志数据。 您将看到一个带有日志事件的直方图,以及下面的一些日志消息:

在这里,您可以搜索和浏览您的日志,还可以自定义您的仪表板。 不过,此时不会有太多内容,因为您只是从 Elastic Stack 服务器收集系统日志。

使用左侧面板导航到 Dashboard 页面并搜索 Filebeat System 仪表板。 在那里,您可以搜索 Filebeat 的 system 模块附带的示例仪表板。

例如,您可以根据系统日志消息查看详细统计信息:

您还可以查看哪些用户使用了 sudo 命令以及何时使用:

Kibana 还有许多其他功能,例如图形和过滤,因此请随意探索。

结论

在本教程中,您安装并配置了 Elastic Stack 以收集和分析系统日志。 请记住,您可以使用 Beats 将几乎任何类型的日志或索引数据发送到 Logstash,但是如果使用 Logstash 过滤器对其进行解析和结构化,数据将变得更加有用,因为这会将数据转换为可以被 Elasticsearch 轻松读取的一致格式。