如何在Ubuntu 18.04上安装Elasticsearch Logstash Kibana(Elastic Stack)

时间:2020-02-23 14:44:48  来源:igfitidea点击:

在本教程中,您将学习在Ubuntu 18.04上安装Elastic stack。
弹性堆栈(以前称为ELK堆栈)是Elastic Company的用于集中式日志记录的免费或者开源软件的集合或者堆栈。

它使您能够以多种格式搜索,分析和可视化来自不同来源的日志。
集中式日志记录有助于从公共角度识别服务器或者应用程序问题。

Elastic Stack组件

弹性堆栈包括4个主要组件。

  • Elasticsearch:这是一个RESTful搜索引擎,用于存储或者保存所有收集的数据
  • Logstash:这是处理数据并将其解析为弹性搜索的组件
  • Kibana:这是一个可视化日志的Web界面
    • Beats:这些是轻量级的数据传送器,可将日志从成百上千的服务器传送到配置了ELK的中央服务器。

现在让我们看看如何在Ubuntu 18.04上安装Elastic stack。

前提条件

在开始安装之前,请确保您具有以下基础结构。

话虽如此,让我们深入研究并开始在Ubuntu上安装Elastic stack。

首先,我们将把Elasticsearch的公共GPG密钥导入APT。
Elastic Stack软件包通常使用Elasticsearch签名密钥进行签名,以保护您的系统免受软件包欺骗的侵害。
另外,通过身份验证的程序包被程序包管理器认为是受信任的。

1.在Ubuntu上安装Elasticsearch

要导入GPG密钥,请运行:

接下来,使用以下命令将Elastic存储库添加到sources.list.d目录中。

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add 

这两个命令的输出如下所示:

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

现在,使用以下命令更新系统的存储库。

sudo apt update

现在,使用以下命令安装Elasticsearch。

sudo apt install elasticsearch

Elasticsearch侦听端口9200。
但是,我们将限制外部访问,以使外部方无法访问数据并关闭弹性集群。
也就是说,我们将对Elasticsearch配置文件进行一些修改,如下所示

2.在Ubuntu上配置Elasticsearch

找到" network.host"属性并取消注释,并添加" localhost"作为其值。
同时取消注释" http.port"属性。

sudo nano /etc/elasticsearch/elasticsearch.yml

接下来,启动并启用Elasticsearch服务,如图所示。

network.host: localhost
http.port: 9200
sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch

此时,Elasticsearch应该已启动并正在运行。
您可以通过运行以下命令来验证这一点。

systemctl status elasticsearch

您也可以使用如图所示的netstat命令。

同样,您可以如图所示运行curl命令。

netstat -pnltu
curl -X GET "localhost:9200"

我们已经完成了Elasticsearch的安装和配置。
接下来,我们将安装和配置Logstash。

我们将要安装的Elastic stack的第二个组件是Logstash。
Logstash将负责使用filebeat数据发送程序从各种服务器收集和集中日志。
然后它将过滤系统日志数据并将其中继到Elasticsearch。

3.安装和配置Logstash

首先,让我们确认OpenSSL正在运行。
为此,请运行。

openssl version -a

要安装Logstash,请运行以下命令。

sudo apt install logstash -y

接下来,编辑/etc/hosts文件并添加以下内容。

其中18.224.44.11是masterELk服务器的IP地址。

18.224.44.11  elk-master

然后,我们将生成SSL证书密钥,以保护从客户端文件拍到logstash服务器的日志数据传输安全。

为此,首先,在logstash配置目录"/etc/logstash"下创建一个新的SSL目录,并导航到该目录。

现在,您可以生成SSL证书,如下所示。

mkdir -p /etc/logstash/ssl
cd /etc/logstash/

接下来,我们将为logstash创建新的配置文件。
我们将创建一个配置文件" filebeat-input.conf"作为来自文件beat的输入文件,创建" syslog-filter.conf"用于进行syslog处理,最后创建一个" output-elasticsearch.conf"文件来定义Elasticsearch输出。

openssl req -subj '/CN=elk-master/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout ssl/logstash-forwarder.key -out ssl/logstash-forwarder.crt

导航至Logstash目录,然后在" conf.d"目录中创建" filebeat-input.conf"。

粘贴以下配置。

cd /etc/logstash/
vim conf.d/filebeat-input.conf

保存并退出文本编辑器。

input {
beats {
  port => 5443
  type => syslog
  ssl => true
  ssl_certificate => "/etc/logstash/ssl/logstash-forwarder.crt"
  ssl_key => "/etc/logstash/ssl/logstash-forwarder.key"
}
}

对于处理日志数据的系统日志,我们使用名为" grok"的过滤器插件来解析系统日志文件。

创建一个新配置" syslog-filter.conf"。

粘贴下面的配置。

vim conf.d/syslog-filter.conf

保存并退出文本编辑器。

filter {
if [type] == "syslog" {
  grok {
    match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
    add_field => [ "received_at", "%{@timestamp}" ]
    add_field => [ "received_from", "%{host}" ]
  }
  date {
    match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
  }
}
}

最后,为弹性搜索输出创建一个名为" output-elasticsearch.conf"的配置文件。

粘贴以下内容。

vim conf.d/output-elasticsearch.conf

保存并退出文本编辑器。

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

完成上述步骤后,启用并启动Logstash服务。

要验证Logstash是否正在运行,请运行命令。

sudo systemctl enable logstash
sudo systemctl start logstash

示例输出

sudo systemctl status logstash

您也可以使用如图所示的netstat命令。

netstat -pnltu

4.在Ubuntu上安装和配置Kibana

接下来,我们将使用以下命令安装Kibana。

sudo apt install kibana -y

接下来,我们将对kibana配置文件进行一些修改。

找到并取消注释以下属性。

vim /etc/kibana/kibana.yml

保存并退出文本编辑器。

server.port: 5601
server.host: "localhost"
elasticsearch.url: "https://localhost:9200"

然后启用并启动Kibana服务:

sudo systemctl enable kibana
sudo systemctl start kibana

您可以使用" netstat"命令确认kibana是否在默认端口5601上运行,如图所示。

netstat -pnltu

5.安装和配置NGINX作为Kibana的反向代理

我们将NGINX用作kibana仪表板的反向代理。
您需要安装Nginx和" Apache2-utils",如下所示。

sudo apt install nginx apache2-utils -y

接下来,创建一个名为kibana的新虚拟主机文件。

vim /etc/nginx/vim sites-available/kibana

将以下内容粘贴到虚拟主机文件中

server {
  listen 80;
 
  server_name localhost;
 
  auth_basic "Restricted Access";
  auth_basic_user_file /etc/nginx/.kibana-user;
 
  location/{
      proxy_pass https://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;
  }
}

保存并退出文本编辑器。
接下来,如图所示,使用htpasswd命令为kibana仪表板创建基本身份验证。

sudo htpasswd -c /etc/nginx/.kibana-user elastic
Type the elastic user password

在上面的示例中,用户名是弹性的,密码将由您提供。

接下来,激活Kibana虚拟主机配置并测试Nginx配置。

ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/
nginx -t

没有错误,启用并重新启动Nginx服务器。

在此步骤中,我们将在elk-master服务器上配置filebeat数据发送程序。
这会将所有系统日志消息中继到logstash,kibana将对其进行处理和可视化。

systemctl enable nginx
systemctl restart nginx

6.安装和配置Filebeat

要安装filebeat,请运行:

sudo apt install filebeat

接下来,打开filebeat配置文件。

sudo vim /etc/filebeat/filebeat.yml

我们将使用Logstash对Filebeat收集的数据执行附加处理。
不需要Filebeat将任何数据直接发送到Elasticsearch。
因此,如图所示,找到elasticsearch部分并对其进行注释。

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

接下来,前往Logstash部分并取消注释,如图所示。

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

通过将"已启用"行值更改为" true"来启用文件。

enabled: true

指定要发送到logstash服务器的系统日志文件。
在此示例中,我们将添加ssh日志文件" auth.log"和syslog文件。

paths:
  - /var/log/auth.log
  - /var/log/syslog

保存并退出。
最后,将logstash证书文件logstash-forwarder.crt复制到"/etc/filebeat"目录。

cp ~/logstash-forwarder.crt /etc/filebeat/logstash-forwarder.crt

现在启动并启用filebeat。

systemctl start filebeat
systemctl enable filebeat

要检查filebeat的状态,请运行:

systemctl status filebeat

7.测试Elasticsearch Stack

要测试我们的弹性堆栈,请打开浏览器并浏览服务器的IP,然后浏览端口5601,这是kibana监听的端口。

ip-address:5601

输入用户名和密码,稍后,将显示以下屏幕。

单击"发现"选项卡,然后单击" Filebeat"。
将出现以下界面,为您提供实时可视化数据流。