如何在 Ubuntu 20.04 上安装 Elasticsearch、Logstash 和 Kibana(弹性堆栈

这篇文章的早期版本是由_ Justin Ellingwood and Vadym Kalsin撰写的。

介绍

Elastic Stack - 以前被称为 ELK Stack - 是一个由 Elastic生产的开源软件集合,允许您搜索,分析和可视化从任何来源在任何格式生成的日志,这种做法被称为 ELK Stack

Elastic Stack有四个主要成分:

  • Elasticsearch :一个分布式的 RESTful搜索引擎,存储所有收集的数据。
  • Logstash ):Elastic Stack的数据处理组件,将输入数据发送到Elasticsearch。
  • Kibana :用于搜索和可视化日志的Web接口。

在本教程中,您将安装 Elastic Stack在Ubuntu 20.04服务器上。您将学习如何安装 Elastic Stack 的所有组件 - 包括 Filebeat,用于转发和集中日志和文件的 Beat - 并配置它们以收集和可视化系统日志。此外,因为Kibana通常只能在本地主机上使用,我们将使用 Nginx来代理它,以便通过Web浏览器访问。

<$>[注] **注:在安装 Elastic Stack 时,您必须在整个堆栈中使用相同的版本. 在本教程中,我们将安装整个堆栈的最新版本,这些版本在本文写作时是 Elasticsearch 7.7.1, Kibana 7.7.1, Logstash 7.7.1 和 Filebeat 7.7.1. <$>

前提条件

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

  • 一个 Ubuntu 20.04 服务器具有 4GB RAM 和 2 个 CPU 与非 root sudo 用户一起设置。 您可以通过遵循 Ubuntu 20.04 初始服务器设置来实现这一目标。 对于本教程,我们将使用运行 Elasticsearch 所需的最小 CPU 和 RAM 量。 请注意,您的 Elasticsearch 服务器所需的 CPU、RAM 和存储量取决于您预期的日志量。
  • OpenJDK 11 安装。 请参阅 安装默认 JRE/JDK 如何在 Ubuntu 20.04 上安装 Java 与 Apt 到此设置。
  • Nginx 安装在您的

此外,由于 Elastic Stack 用于访问有关您的服务器的宝贵信息,您不希望未经授权的用户访问,因此通过安装 TLS/SSL 证书来保护您的服务器很重要。

然而,由于在本指南的过程中,您最终会对 Nginx 服务器块进行更改,因此在本教程的第二步结束时完成 Let's Encrypt on Ubuntu 20.04 指南可能更有意义。

您可以在 Namecheap购买域名,在 Freenom免费获取一个域名,或使用您选择的域名注册器。

  • 以下两个 DNS 记录为您的服务器设置。 您可以遵循 DigitalOcean DNS 的介绍以获取如何添加它们的详细信息。
  • 一个记录与 your_domain指向您的服务器的公共 IP 地址。
  • 一个记录与 www.your_domain指向您的服务器的公共 IP 地址。

步骤 1 – 安装和配置 Elasticsearch

Elasticsearch 组件在 Ubuntu 的默认包库中不可用,但是在添加 Elastic 的包源列表后,它们可以与 APT 一起安装。

所有软件包都使用 Elasticsearch 签名密钥签名,以保护您的系统免受软件包欺诈。 使用该密钥验证的软件包将被您的软件包管理器视为受信任。 在此步骤中,您将导入 Elasticsearch 公共 GPG 密钥并添加 Elastic 软件包源列表以安装 Elasticsearch。

首先,使用 cURL 命令行工具将数据传输到 URL,将 Elasticsearch 公共 GPG 键导入 APT. 请注意,我们正在使用 -fsSL 参数来消除所有进展和可能的错误(除了服务器故障),并允许 cURL 在重定向时在新位置提出请求。

1curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

接下来,将 Elastic 源列表添加到 sources.list.d 目录中,其中 APT 会搜索新的源:

1echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

接下来,更新您的包列表,以便 APT 读取新的 Elastic 源:

1sudo apt update

然后用这个命令安装 Elasticsearch:

1sudo apt install elasticsearch

Elasticsearch 现在已安装并准备好配置,使用您偏好的文本编辑器来编辑 Elasticsearch 的主要配置文件 elasticsearch.yml. 在这里,我们将使用 nano:

1sudo nano /etc/elasticsearch/elasticsearch.yml

<$>[注] 注: Elasticsearch 的配置文件是 YAML 格式,这意味着我们需要保持入口格式。

elasticsearch.yml文件为您的集群、节点、路径、内存、网络、发现和网关提供了配置选项. 这些选项大多都已预先配置在文件中,但您可以根据需要进行更改。

Elasticsearch 在端口9200上听取来自任何地方的流量。您将想要限制对您的 Elasticsearch 实例的外部访问,以防止外部人员阅读您的数据或通过其 [REST API] 关闭您的 Elasticsearch 集群(https://en.wikipedia.org/wiki/Representational_state_transfer)。

1[label /etc/elasticsearch/elasticsearch.yml]
2. . .
3# ---------------------------------- Network -----------------------------------
4#
5# Set the bind address to a specific IP (IPv4 or IPv6):
6#
7network.host: localhost
8. . .

我们已经指定了localhost,以便Elasticsearch在所有界面和绑定IP上倾听。如果您希望它只在特定界面上倾听,您可以指定其IP代替localhost。保存并关闭elasticsearch.yml

这些是您可以开始使用 Elasticsearch 的最低设置,现在您可以首次启动 Elasticsearch。

使用systemctl启动 Elasticsearch 服务. 给 Elasticsearch 几分钟启动,否则可能会出现无法连接的错误。

1sudo systemctl start elasticsearch

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

1sudo systemctl enable elasticsearch

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

1curl -X GET "localhost:9200"

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

 1[secondary_label Output]
 2{
 3  "name" : "Elasticsearch",
 4  "cluster_name" : "elasticsearch",
 5  "cluster_uuid" : "qqhFHPigQ9e2lk-a7AvLNQ",
 6  "version" : {
 7    "number" : "7.7.1",
 8    "build_flavor" : "default",
 9    "build_type" : "deb",
10    "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
11    "build_date" : "2020-03-26T06:34:37.794943Z",
12    "build_snapshot" : false,
13    "lucene_version" : "8.5.1",
14    "minimum_wire_compatibility_version" : "6.8.0",
15    "minimum_index_compatibility_version" : "6.0.0-beta1"
16  },
17  "tagline" : "You Know, for Search"
18}

现在Elasticsearch正在运行,让我们安装Kibana,这是Elastic Stack的下一个组件。

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

根據 官方文件,您只應在安裝 Elasticsearch 後安裝 Kibana。

由于您在上一个步骤中已经添加了 Elastic 包源,您可以使用 apt 来安装 Elastic Stack 的剩余组件:

1sudo apt install kibana

然后启用并启动Kibana服务:

1sudo systemctl enable kibana
2sudo systemctl start kibana

由于Kibana配置为只听本地主机,我们必须设置一个反向代理(https://andsky.com/tech/tutorials/digitalocean-community-glossary# reverse-proxy)来允许外部访问它,我们将为此使用 Nginx,它应该已经安装在您的服务器上。

首先,使用openssl命令创建一个管理的Kibana用户,您将使用它来访问Kibana Web接口. 作为一个例子,我们将这个帐户命名为kibanaadmin,但为了确保更大的安全性,我们建议您为您的用户选择一个难以猜测的非标准名称。

下列命令将创建管理 Kibana 用户名和密码,并将其存储在 `htpasswd.users 文件中. 您将配置 Nginx 以要求此用户名和密码,并暂时阅读此文件:

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

请记住或记住此登录,因为您将需要它来访问Kibana Web接口。

接下来,我们将创建一个 Nginx 服务器封锁文件. 作为一个例子,我们将把这个文件称为 your_domain,尽管你可能会觉得给你的一个更描述性的名字是有用的。

使用 nano 或您偏好的文本编辑器,创建 Nginx 服务器块文件:

1sudo nano /etc/nginx/sites-available/your_domain

将下列代码块添加到文件中,确保更新 your_domain 以匹配您的服务器的 FQDN 或公共 IP 地址. 此代码配置 Nginx 以将您的服务器的 HTTP 流量导向 Kibana 应用程序,该应用程序正在收听 localhost:5601

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

 1[label /etc/nginx/sites-available/your_domain]
 2server {
 3    listen 80;
 4
 5    server_name your_domain;
 6
 7    auth_basic "Restricted Access";
 8    auth_basic_user_file /etc/nginx/htpasswd.users;
 9
10    location / {
11        proxy_pass http://localhost:5601;
12        proxy_http_version 1.1;
13        proxy_set_header Upgrade $http_upgrade;
14        proxy_set_header Connection 'upgrade';
15        proxy_set_header Host $host;
16        proxy_cache_bypass $http_upgrade;
17    }
18}

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

接下来,通过创建一个符号链接到Sites-enabled目录来启用新配置. 如果您已经在 Nginx 前提条件中创建了具有相同名称的服务器封锁文件,则不需要运行此命令:

1sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/your_domain

然后检查语法错误的配置:

1sudo nginx -t

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

1sudo systemctl reload nginx

如果您遵循初始服务器设置指南,您应该启用UFW防火墙。为了允许连接到 Nginx,我们可以通过键入来调整规则:

1sudo ufw allow 'Nginx Full'

<$>[注] 注: 如果您遵循了先决条件的Nginx教程,您可能已经创建了一个UFW规则,允许Nginx HTTP配置文件通过防火墙。由于Nginx Full配置文件允许HTTP和HTTPS流量通过防火墙,您可以安全地删除您在先决条件教程中创建的规则。

1sudo ufw delete allow 'Nginx HTTP'

美元

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

1http://your_domain/status

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

|Kibana status page

<$>[注意] 注意 :正如前提部分所提到的,建议您在您的服务器上启用SSL/TLS。您可以遵循Let’s Encrypt指南现在获得免费的SSL证书的NGINX在Ubuntu 20.04. 获得您的SSL/TLS证书后,您可以回来完成本教程。

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

步骤 3 – 安装和配置 Logstash

虽然 Beats 可以直接将数据发送到 Elasticsearch 数据库,但通常使用 Logstash 来处理数据,这将允许您更灵活地从不同的来源收集数据,将其转换为一个常见的格式,并将其导出到另一个数据库。

使用此命令安装 Logstash:

1sudo apt install logstash

在安装 Logstash 后,您可以继续配置它。 Logstash 的配置文件位于 `/etc/logstash/conf.d 目录中。 有关配置语法的更多信息,您可以查看 Elastic 提供的 配置参考 。 当您配置文件时,将 Logstash 视为一个管道,该管道在一个端摄入数据,以一种或另一种方式处理数据,并将其发送到其目的地(在这种情况下,目的地是 Elasticsearch)。

Logstash pipeline

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

1sudo nano /etc/logstash/conf.d/02-beats-input.conf

插入以下输入配置,指定一个打击输入,该输入将听到TCP端口5044

1[label /etc/logstash/conf.d/02-beats-input.conf]
2input {
3  beats {
4    port => 5044
5  }
6}

保存并关闭文件。

接下来,创建一个名为 '30-elasticsearch-output.conf' 的配置文件:

1sudo nano /etc/logstash/conf.d/30-elasticsearch-output.conf

插入以下输出配置:本质上,这个输出配置了Logstash以存储在Elasticsearch中的Beats数据,该数据在localhost:9200运行,在一个以使用的Beat命名的索引中。

 1[label /etc/logstash/conf.d/30-elasticsearch-output.conf]
 2output {
 3  if [@metadata][pipeline] {
 4    elasticsearch {
 5    hosts => ["localhost:9200"]
 6    manage_template => false
 7    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
 8    pipeline => "%{[@metadata][pipeline]}"
 9    }
10  } else {
11    elasticsearch {
12    hosts => ["localhost:9200"]
13    manage_template => false
14    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
15    }
16  }
17}

保存并关闭文件。

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

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

如果没有语法错误,您的输出将在几秒钟后显示配置验证结果:OK. 退出 Logstash。 如果您在输出中看不到这些错误,请检查输出中注意到的任何错误,并更新您的配置以纠正它们。

如果您的配置测试成功,请启动并允许 Logstash 执行配置更改:

1sudo systemctl start logstash
2sudo systemctl enable logstash

现在Logstash运行正确,并且已完全配置,让我们安装FileBeat。

步骤 4 – 安装和配置 Filebeat

Elastic Stack 使用几个名为 Beats 的轻量级数据传输器来收集来自各种来源的数据,并将其传输到 Logstash 或 Elasticsearch。

  • Filebeat:收集和运输日志文件。
  • Metricbeat:收集您的系统和服务的指标。
  • Packetbeat:收集和分析网络数据。
  • Winlogbeat:收集Windows事件日志。
  • Auditbeat:收集Linux审计框架数据并监控文件完整性。

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

使用apt安装 FileBeat:

1sudo apt install filebeat

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

打开 FileBeat 配置文件:

1sudo nano /etc/filebeat/filebeat.yml

<$>[注] 注: 与 Elasticsearch 一样,Filebeat 的配置文件是 YAML 格式,这意味着正确的入口是至关重要的,所以请确保在这些指示中使用相同数量的空间。

Filebeat 支持多种输出,但你通常只会直接向 Elasticsearch 或 Logstash 发送事件以进行额外处理。 在本教程中,我们将使用 Logstash 对 Filebeat 收集的数据进行额外处理。 Filebeat 不需要直接向 Elasticsearch 发送任何数据,所以让我们禁用该输出。

1[label /etc/filebeat/filebeat.yml]
2...
3#output.elasticsearch:
4  # Array of hosts to connect to.
5  #hosts: ["localhost:9200"]
6...

然后,配置output.logstash部分. 通过删除# 删除output.logstash:hosts: [localhost:5044]的行,这将配置Fileebeat连接到您的Elastic Stack服务器上的Logstash在端口5044,该端口我们之前指定了Logstash输入:

1[label /etc/filebeat/filebeat.yml]
2output.logstash:
3  # The Logstash hosts
4  hosts: ["localhost:5044"]

保存并关闭文件。

在本教程中,我们将使用 系统模块,该模块收集和分析由常见的Linux发行版系统日志服务创建的日志。

让我们让它:

1sudo filebeat modules enable system

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

1sudo filebeat modules list

你会看到一个类似于以下的列表:

 1[secondary_label Output]
 2Enabled:
 3system
 4
 5Disabled:
 6apache2
 7auditd
 8elasticsearch
 9icinga
10iis
11kafka
12kibana
13logstash
14mongodb
15mysql
16nginx
17osquery
18postgresql
19redis
20traefik
21...

默认情况下,Filebeat 配置为使用默认路径为 syslog 和授权日志. 在本教程的情况下,您不需要更改任何配置。您可以在 /etc/filebeat/modules.d/system.yml 配置文件中查看模块的参数。

接下来,我们需要设置 Filebeat 摄入管道,在通过 logstash 将其发送到 Elasticsearch 之前分析日志数据。

1sudo filebeat setup --pipelines --modules system

接下来,将索引模板加载到 Elasticsearch. 一个 Elasticsearch index是具有相似特征的文档集合。

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

1sudo filebeat setup --index-management -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'
1[secondary_label Output]
2Index setup finished.

Filebeat 配备了样本 Kibana 仪表板,允许您在 Kibana 中可视化 Filebeat 数据. 在您使用仪表板之前,您需要创建索引模式并将仪表板加载到 Kibana。

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

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

你应该得到类似于此的输出:

 1[secondary_label Output]
 2Overwriting ILM policy is disabled. Set `setup.ilm.overwrite:true` for enabling.
 3
 4Index setup finished.
 5Loading dashboards (Kibana must be running and reachable)
 6Loaded dashboards
 7Setting up ML using setup --machine-learning is going to be removed in 8.0.0. Please use the ML app instead.
 8See more: https://www.elastic.co/guide/en/elastic-stack-overview/current/xpack-ml.html
 9Loaded machine learning job configurations
10Loaded Ingest pipelines

现在你可以开始并启用FileBeat:

1sudo systemctl start filebeat
2sudo systemctl enable filebeat

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

要验证 Elasticsearch 是否确实收到这些数据,请使用此命令查询 Filebeat 索引:

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

你应该得到类似于此的输出:

 1[secondary_label Output]
 2...
 3{
 4{
 5  "took" : 4,
 6  "timed_out" : false,
 7  "_shards" : {
 8    "total" : 2,
 9    "successful" : 2,
10    "skipped" : 0,
11    "failed" : 0
12  },
13  "hits" : {
14    "total" : {
15      "value" : 4040,
16      "relation" : "eq"
17    },
18    "max_score" : 1.0,
19    "hits" : [
20      {
21        "_index" : "filebeat-7.7.1-2020.06.04",
22        "_type" : "_doc",
23        "_id" : "FiZLgXIB75I8Lxc9ewIH",
24        "_score" : 1.0,
25        "_source" : {
26          "cloud" : {
27            "provider" : "digitalocean",
28            "instance" : {
29              "id" : "194878454"
30            },
31            "region" : "nyc1"
32          },
33          "@timestamp" : "2020-06-04T21:45:03.995Z",
34          "agent" : {
35            "version" : "7.7.1",
36            "type" : "filebeat",
37            "ephemeral_id" : "cbcefb9a-8d15-4ce4-bad4-962a80371ec0",
38            "hostname" : "june-ubuntu-20-04-elasticstack",
39            "id" : "fbd5956f-12ab-4227-9782-f8f1a19b7f32"
40          },
41
42...

如果您的输出显示 0 总打击,Elasticsearch 不会在您搜索的索引下加载任何日志,您将需要检查您的设置错误. 如果您收到预期的输出,继续到下一步,在那里我们将看到如何导航Kibana的某些仪表板。

步骤5 – 探索Kibana仪表板

让我们回到我们之前安装的Kibana Web接口。

在 Web 浏览器中,转到您的 Elastic Stack 服务器的 FQDN 或公共 IP 地址. 如果您的会话被中断,您将需要重新输入您在步骤 2 中定义的凭据。

Kibana Homepage

在左侧的导航栏中点击 Discover 链接(您可能需要点击左下方的 ** Expand** 图标以查看导航菜单项目)。在 ** Discover** 页面上,选择预定义的 ** filebeat-** * 索引模式以查看 Filebeat 数据。默认情况下,这将向您显示过去 15 分钟的所有日志数据。

Discover page

在这里,你可以搜索和浏览你的日志,并自定义你的仪表板. 然而,在这个时候,那里不会有很多,因为你只是从你的Elastic Stack服务器收集 syslogs。

使用左侧面板导航到 Dashboard 页面并搜索 ** Filebeat System** 仪表板. 一旦到达那里,您可以选择带有 Filebeat 的系统模块的示例仪表板。

例如,您可以根据您的 syslog 消息查看详细的统计数据:

Syslog Dashboard

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

Sudo Dashboard

Kibana有许多其他功能,如图形和过滤,所以可以自由探索。

结论

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

Published At
Categories with 技术
comments powered by Disqus