Elastic:如何在AWS上一步一步地安装Elastic Stack

Elastic Stack是用于日志聚合和分析的出色开源堆栈。它代表Elasticsearch(NoSQL数据库和搜索服务器),Logstash(日志传送和解析服务)和Kibana(将用户与Elasticsearch数据库连接并为系统操作用户启用可视化和搜索选项的Web界面)。随着庞大的开源社区,Elastic Stack变得非常流行,并且很高兴与之合作。在本文中,我们将指导您完成在AWS或Amazon Web Services上的Elastic Stack的简单安装。

以下说明将引导您完成创建有效的沙箱环境所涉及的步骤。由于生产设置更为全面,我们决定详细说明如何更改每个组件的配置以准备在生产环境中使用。

我们将首先描述环境,然后逐步介绍每个组件的安装方式,最后配置沙箱服务器以将其系统日志发送到Logstash并通过Kibana进行查看。

 

AWS环境:有关将Elastic Stack放到AWS上的知识

我们使用本地存储在m4.large实例上的单个AWS Ubuntu 18.04实例上运行了本教程。 我们在VPC的公共子网中启动了一个EC2实例,然后我们设置了安全组(防火墙),以允许使用SSH和TCP 5601(Kibana)从任何地方进行访问。 

生产提示:生产安装至少需要三个EC2实例-每个组件一个,每个实例都有一个附加的EBS SSD卷。

为了完成我们的这个教程,你必须在AWS上注册一个账号,并创建一个Ubuntu 18.04的EC2实例。为了能够使得我们的9200及5601口地址被外部进行访问,我们必须通过设置inbound rules开放这两个口:

添加两个Custom TCP的配置:

这样我们就打开了5601及9200这两个口。

 

安装Elasticsearch

Elasticsearch是广泛使用的数据库和搜索服务器,它是ELK设置的主要组成部分。

Elasticsearch的优势包括:

  • 易于安装和使用
  • 强大的内部搜索技术(Lucene)
  • RESTful Web界面
  • 可以在schema-free的JSON文档中使用数据(noSQL)
  • 开源的

有多种安装Elasticsearch的方法,但我们将使用DEB软件包。

要开始安装Elasticsearch,请添加以下存储库密钥:

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

安装apt-transport-https软件包:

sudo apt-get install apt-transport-https

将以下Elasticsearch列表添加到密钥:

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

要安装仅包含Apache 2.0许可功能的Elasticsearch版本,请使用:

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

更新您的系统并使用以下命令安装Elasticsearch:

sudo apt-get update && sudo apt-get install elasticsearch

在以下位置打开Elasticsearch配置文件:/etc/elasticsearch/elasticsearch.yml:

sudo vi /etc/elasticsearch/elasticsearch.yml

并应用以下配置:

network.host: "0.0.0.0"
http.port: 9200
cluster.initial_master_nodes: ["<PrivateIP"]

在上面我们把network.host设置为“0.0.0.0”,这样可以使得我们的Elasticsearch可以绑定到我们机器上所有的网路接口上。详细的描述可以参照文章。另外,如果我们想得到我们的机器的PrivateIP,我们可以使用如下的命令:

ifconfig

启动Elasticsearch服务:

sudo service elasticsearch start

如果由于某种原因,我们修改了elasticsearch.yml这个配置文件,我们可以使用如下的命令来重新启动我们的服务:

sudo systemctl restart elasticsearch

通过curl命令验证安装:

curl http://localhost:9200

如果我看到如下的结果,则表明我们的安装时成功的:

{
  "name" : "ip-172-31-2-44",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "rQ9x67KPTs2D_75b1A1LZQ",
  "version" : {
    "number" : "7.6.0",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "7f634e9f44834fbc12724506cc1da681b0c3b1e3",
    "build_date" : "2020-02-06T00:09:00.449973Z",
    "build_snapshot" : false,
    "lucene_version" : "8.4.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

我么也可以在我们的浏览器的地址栏中输入我们的地址:

要使服务在机器启动时启动,可以打入如下的命令:

sudo update-rc.d elasticsearch defaults 95 10

生产提示:请勿向世界开放任何其他端口,例如9200! 有许多机器人会搜索9200并执行常规脚本来取代计算机。 不要将Elasticsearch绑定到公共IP。

 

安装Logstash

Logstash是一个开源工具,可以收集,解析和存储日志以备将来使用,并可以进行快速日志分析。 Logstash可用于聚合来自多个来源(如Docker实例集群)的日志,并将其从文本行解析为JSON之类的结构化格式。 在Elastic Stack中,Logstash使Elasticsearch来存储和索引日志。

安装Java

Logstash需要安装Java 8或Java 11:

sudo apt-get install default-jre

验证是否已安装Java:

java -version

如果上一个命令的输出与下面的相似,那么您将知道自己朝着正确的方向前进:

openjdk version "11.0.6" 2020-01-14
OpenJDK Runtime Environment (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1)
OpenJDK 64-Bit Server VM (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1, mixed mode, sharing)

使用以下命令安装Logstash:

sudo apt-get install logstash

示例:使用Logstash收集Apache访问日志

我们首先使用如下的命令来下载一个测试的文件:

wget https://github.com/liu-xiao-guo/logstash_multi-pipeline/blob/master/apache-daily-access.log

如果我们在我们的home里运行上面的命令,我们可以发现有一个叫做apache-daily-access.log的文件。

创建一个Logstash配置文件:

sudo vi/etc/logstash/conf.d/apache-01.conf

输入以下配置:

input {
  file {
    path => "/home/ubuntu/apache-daily-access.log"
  start_position => "beginning"
  sincedb_path => "/dev/null"
  }
}

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
  date {
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
  }
  geoip {
    source => "clientip"
  }
}

output {
  elasticsearch { 
  hosts => ["localhost:9200"] 
  }
}

该文件告诉Logstash收集本地/home/ubuntu/apache-daily-access.log文件,并将其发送到Elasticsearch进行索引。

输入部分指定要收集的文件(路径)以及期望的格式。 过滤器部分告诉Logstash如何使用grok,date和geoip过滤器处理数据。 输出部分定义Logstash将数据运送到的位置–在这种情况下,是本地Elasticsearch。

在此示例中,我们使用localhost作为Elasticsearch主机名。 但是,在实际生产设置中,Elasticsearch主机名会有所不同,因为Logstash和Elasticsearch应该托管在不同的计算机上。

最后,启动Logstash以读取配置:

sudo service logstash start

为了确保数据被索引,请使用:

sudo curl -XGET 'localhost:9200/_cat/indices?v&pretty'

您应该看到创建了新的Logstash索引

 sudo curl -XGET 'localhost:9200/_cat/indices?v&pretty'
health status index                      uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .kibana_task_manager_1     X5tnbl34QsyMyOvpDUM7lQ   1   0          2            1     29.7kb         29.7kb
green  open   .apm-agent-configuration   pNnvaxiHQomiPCuYIoEP7Q   1   0          0            0       283b           283b
green  open   ilm-history-1-000001       hWfdS8rvRDyc38zcva0KJg   1   0          6            0     15.6kb         15.6kb
yellow open   logstash-2020.02.20-000001 qbIz0PcKT7yC1NL7uQot9g   1   1        957            0    162.9kb        162.9kb
green  open   .kibana_1                  JUlEHYinSLCbfONHxarrZw   1   0          6            0     22.6kb         22.6kb

在上面,我们可以看到logstash-2020.02.20-000001的索引。

在实际的使用中,我们可能使用beats来收集数据并导入到Logstash之中,那么在这种情况下,我们需要打开额外的口地址来把数据导入到logstash中。

 

在AWS上安装Kibana

Kibana是Elasticsearch的开源数据可视化插件。 它在Elasticsearch集群上索引的内容之上提供可视化功能。 用户可以创建条形图,折线图和散点图。 饼状图; 并在大量数据之上进行映射。

除其他用途外,Kibana使使用日志变得超级轻松甚至有趣,其图形化Web界面使初学者可以执行功能强大的日志搜索。

要安装Kibana,请使用以下命令:

sudo apt-get install kibana

打开Kibana配置文件并输入以下配置:

server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]

启动Kibana:

sudo service kibana start

如果由于某种原因,我们修改上面的kibana.yml文件,我们可以使用如下的命令来重新启动kibana:

sudo systemctl restart kibana

测试:我们在我们的浏览器地址栏中打入如下链接:

如果你看到上面的输出,那么表明我们的Kibana的安装是成功的。

Kibana的下一步是定义Elasticsearch索引模式。

“index pattern”是什么意思,为什么我们必须对其进行配置? Logstash每天都会创建一个新的Elasticsearch索引(数据库)。 索引的名称如下所示:logstash-YYYY.MM.DD-例如,我们上面在2019年4月16日创建的索引的“logstash-2020.02.20-000001”。

Kibana在这些Elasticsearch索引之上工作,因此它需要知道您要使用哪个索引。 转到Management-> Kibana -> Index pattern。 Kibana会自动识别Logstash索引,因此您要做的就是使用'logstash-*对其进行定义:

在下一步中,我们将选择@timestamp时间戳字段,然后单击“Create index pattern”按钮以在Kibana中定义模式。

生产提示:在本教程中,我们将直接通过其端口5601上的应用程序服务器访问Kibana,但是在生产环境中,您可能希望在其前面放置一个反向代理服务器(如Nginx)。

要查看您的日志,请转到Kibana中的“Discover”页面:

如您所见,创建日志传送,存储和查看的整个管道并不是一项艰巨的任务。 过去,存储和分析日志是一种不可思议的技术,需要处理庞大的非结构化文本文件。 但是未来看起来更加光明和简单。

 

下一步

如果你想对Elastic有一个更加深入的了解,你可以参阅我之前的文章: