如何在Ubuntu 17.04上安装和配置Elastic Stack ElasticSearch Logstash和Kibana

・24 分钟阅读

随着IT基础设施向云端移动,物联网越来越流行,组织和IT专业人员在更大程度上使用公共云服务,随着服务器和服务的运行在增加,系统生成的日志数量也在增加,对这些日志的分析在基础结构中非常重要,原因如下,这包括遵守安全策略和规则,系统故障排除,响应安全相关事件或了解用户行为。

三个非常流行的开源应用程序ElasticSearch Logstash和Kibana结合在一起创建了ElasticStack或Elk Stack,Elastic Stack是用于搜索,分析和可视化日志和数据的非常强大的工具,ElasticSearch是一个分布式、实时可扩展且高度可用的应用程序,用于存储日志,并且通过日志进行搜索,Logstash收集Beats发送的日志对它进行增强,然后将它发送到ElasticSearch,Kibana是用于可视化日志和可操作的Web UI。

在本教程中我们会在Ubuntu 17.04上安装最新版本的ElasticSearch Logstash和Kibana以及Xpack。

前提条件

要遵循本教程你会需要一个 64位Ubuntu 17.04 服务器实例,最少4GB RAM,对于生产环境,硬件需求随用户和日志数量的增加而且增加。

本教程是由sudo用户编写的,若要设置sudo用户,请遵循如何在Debian上使用sudo指南。

你还需要一个指向你的服务器的域名来获取证书,让我们加密CA 。

步骤1:执行系统更新

在Ubuntu服务器实例上安装任何软件包之前,建议更新系统,使用sudo用户登录,并运行以下命令来更新系统。


sudo apt update
sudo apt -y upgrade

系统完成升级后,继续下一步。

步骤2安装Java

Elasticsearch要求Java 8工作 它同时支持Oracle Java和OpenJDK ,本节教程演示了Oracle Java和OpenJDK的安装。

请确保安装了以下任何一个Java版本,建议Elasticsearch安装Oracle Java。但是,你也可以根据你的偏好选择安装OpenJDK 。

安装Oracle Java

要在Ubuntu系统上安装Oracle Java,你需要通过运行来添加Oracle Java cer :


sudo add-apt-repository ppa:webupd8team/java

现在通过运行以下命令来更新存储库信息:

 
sudo apt update

 

现在你可以通过运行轻松安装最新的Java 8稳定版本:


sudo apt -y install oracle-java8-installer

提示时接受许可协议,安装完成后,你可以通过运行以下命令来验证Java版本:

 
java -version

 

你应该看到类似于以下内容的输出:


user@vultr:~$ java -version
java version"1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

你还可以通过安装oracle-java8-set-default来设置JAVA_HOME和其他缺省值,运行:


sudo apt -y install oracle-java8-set-default

现在可以通过运行以下命令来验证JAVA_HOME变量是否已设置:

 
echo"$JAVA_HOME"

 

输出应类似于:


user@vultr:~$ echo"$JAVA_HOME"
/usr/lib/jvm/java-8-oracle

如果没有得到上面显示的输出,你可能需要注销,并且再次登录到shell ,Oracle Java现在已安装在你的服务器上,现在你可以继续本教程的步骤3跳过OpenJDK的安装。

正在安装OpenJDK

OpenJDK的安装非常简单,只需运行以下命令即可安装OpenJDK 。


sudo apt -y install default-jdk

安装完成后,你可以通过运行以下命令来验证Java版本:

 
java -version

 

你应该看到类似于以下内容的输出:


user@vultr:~$ java -version
openjdk version"1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-2ubuntu1.17.04.2-b11)
OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)

若要设置JAVA_HOME变量,请运行以下命令:


sudo echo"JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" >> /etc/environment

运行以下命令重新加载环境文件:


sudo source /etc/environment

现在可以通过运行以下命令来验证JAVA_HOME变量是否已设置:

 
echo"$JAVA_HOME"

 

输出应类似于:


user@vultr:~$ echo"$JAVA_HOME"
/usr/lib/jvm/java-8-openjdk-amd64/

步骤3安装ElasticSearch

ElasticSearch是一个超快速、分布式、高可用性、宁静的搜索引擎。 通过运行以下命令添加ElasticSearch APT存储库


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

上面的命令为ElasticSearch创建一个新的存储库文件并会源条目添加到其中,现在导入用于签名软件包的PGP密钥。


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

通过运行以下命令更新APT存储库元数据:

 
sudo apt update

 

运行以下命令安装ElasticSearch


sudo apt -y install elasticsearch

上面的命令会在你的系统上安装最新版本的ElasticSearch,安装Elasticsearch后通过运行以下命令重新加载Systemd服务守护进程:


sudo systemctl daemon-reload

启动ElasticSearch,并且使它在启动时自动启动。


sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

要停止ElasticSearch可以运行:


sudo systemctl stop elasticsearch

要检查你可以运行的服务状态,请执行以下操作:


sudo systemctl status elasticsearch

ElasticSearch现在正在端口9200 上运行,,你可以通过运行以下命令验证它是否正常工作,并且生成结果。


curl -XGET 'localhost:9200/?pretty'

将打印类似以下内容的消息。


user@vultr:~$ curl -XGET 'localhost:9200/?pretty'
{
"name" :"wDaVa1K",
"cluster_name" :"elasticsearch",
"cluster_uuid" :"71drjJ8PTyCcbai33Esy3Q",
"version" : {
"number" :"5.5.1",
"build_hash" :"19c13d0",
"build_date" :"2017-07-18T20:44:24.823Z",
"build_snapshot" : false,
"lucene_version" :"6.6.0"
 },
"tagline" :"You Know, for Search"
}

安装X-Pack for Elasticsearch

X-Pack是一个Elastic Stack插件,提供许多特性,比如,安全性,警报,监视,报告和图形功能,Xpack还为ElasticSearch和Kibana提供用户身份验证,以及对Kibana中不同节点的监视,安装Xpack和ElasticSearch的版本必须相同。

你可以通过运行以下命令直接安装X-Pack for Elasticsearch :


cd /usr/share/elasticsearch
sudo bin/elasticsearch-plugin install x-pack

要继续安装,在提示时输入y ,此命令会在你的系统中安装X-Pack插件,安装后Xpack启用ElasticSearch的身份验证,默认用户名为elastic,密码为changeme ,你可以通过运行的相同命令来检查是否启用了身份验证,以检查Elasticsearch是否正常工作。


curl -XGET 'localhost:9200/?pretty'

现在,输出将表示身份验证失败。


user@vultr:~# curl -XGET 'localhost:9200/?pretty'
{
"error" : {
"root_cause" : [
 {
"type" :"security_exception",
"reason" :"missing authentication token for REST request [/?pretty]",
"header" : {
"WWW-Authenticate" :"Basic realm="security" charset="UTF-8""
 }
 }
 ],
"type" :"security_exception",
"reason" :"missing authentication token for REST request [/?pretty]",
"header" : {
"WWW-Authenticate" :"Basic realm="security" charset="UTF-8""
 }
 },
"status" : 401
}

通过运行以下命令更改默认密码changeme


curl -XPUT -u elastic:changeme 'localhost:9200/_xpack/security/user/elastic/_password?pretty' -H 'Content-Type: application/json' -d'
{
"password":"NewElasticPassword"
}
'

用你要使用的实际密码替换NewPassword ,你可以通过运行以下命令来检查是否设置了新密码以及ElasticSearch是否正常工作。


curl -XGET -u elastic:NewElasticPassword 'localhost:9200/?pretty' 

你将看到显示查询成功执行的输出。

此外,通过运行以下命令编辑ElasticSearch配置文件:


sudo nano /etc/elasticsearch/elasticsearch.yml

查找以下行,取消注释行,并且根据提供的说明更改它们。


#cluster.name: my-application #Provide the name of your cluster
#node.name: node-1 #Provide the name of your node
#network.host: 192.168.0.1

对于network.host,提供分配给系统的专用IP地址,通过运行以下命令重新启动ElasticSearch实例:


sudo systemctl restart elasticsearch

现在你会需要使用IP地址来运行查询而不是使用curl >code >,


curl -XGET -u elastic:NewElasticPassword '192.168.0.1:9200/?pretty'

192.168.0.1替换为服务器的实际专用IP地址,现在我们已经安装了ElasticSearch继续安装Kibana。

步骤4安装Kibana

Kibana用于使用Web界面可视化日志和可操作的见解。 它还可以用于管理ElasticSearch 建议安装与ElasticSearch相同版本的Kibana

由于我们已经添加了ElasticSearch存储库和PGP密钥,因此我们可以通过运行以下命令直接安装Kibana,


sudo apt -y install kibana

上一个命令会在你的系统上安装最新版本的Kibana,安装Kibana后通过运行以下命令重新加载Systemd服务守护进程:


sudo systemctl daemon-reload

你可以启动Kibana,并且通过运行以下命令使它在启动时自动启动:


sudo systemctl enable kibana
sudo systemctl start kibana

安装X-Pack for Kibana

你可以通过运行以下命令直接安装X-Pack for Kibana :


cd /usr/share/kibana
sudo bin/kibana-plugin install x-pack

X-Pack for Kibana有图形,机器学习和监控功能,默认情况下启用,Xpack还支持对Kibana的身份验证,默认用户名为kibana,密码为,更改Kibana用户的默认密码非常重要,运行以下命令更改密码。


curl -XPUT -u elastic '192.168.0.1:9200/_xpack/security/user/kibana/_password?pretty' -H 'Content-Type: application/json' -d'
{
"password":"NewKibanaPassword"
}
'

用服务器的实际专用IP地址替换192.168.0.1并用Kibana用户的新密码替换new Kibana password- >code >。

通过运行以下命令编辑Kibana配置文件:


sudo nano /etc/kibana/kibana.yml

查找以下行,并且根据提供的说明更改值。


#elasticsearch.url:"http://localhost:9200"
#elasticsearch.username:"user"
#elasticsearch.password:"password"

取消注释上面的行,并在elasticsearch.url中提供URL for Elasticsearch实例,IP地址必须与在elasticsearch.yml中使用的IP相同,进一步,会user设置为elastic,并提供你之前设置的弹性用户的密码。

通过运行以下命令重新启动Kibana实例:


sudo systemctl restart kibana

安装nginx作为Kibana的反向代理

由于我们在localhost at port 5601 上运行Kibana因此,建议使用Apache或nginx设置反向代理以从本地网络外部访问Kibana,在本教程中我们会nginx设置为Kibana的反向代理,我们还会用一个让我们加密免费SSL证书的Nginx实例来保护实例。

通过运行以下命令安装Nginx :


sudo apt -y install nginx

启动并启用Nginx以在引导时自动启动。


sudo systemctl start nginx
sudo systemctl enable nginx

现在nginx web服务器已经安装,并且运行,我们可以继续安装Certbot这是一个正式的自动加密证书客户端。 通过运行以下命令会Certbot PPA添加到你的系统中


sudo add-apt-repository ppa:certbot/certbot

更新存储库元信息。

 
sudo apt update

 

现在你可以通过运行以下命令轻松安装最新版本的Certbot


sudo apt -y install python-certbot-nginx 

上一个命令会解析,并且安装所需的依赖项以及Certbot包。

现在我们已经安装了Certbot请通过运行以下命令为你的域名生成证书:


sudo certbot certonly --webroot -w /var/www/html/ -d kibana.example.com

不要忘记用你的实际域名名更改kibana.example.com ,上一个命令将使用Certbot客户机,certonly 参数告诉Certbot客户机只生成证书,,使用此选项可以确保不会自动安装证书,并且Nginx配置还未更改,验证将通过将质询文件放入指定的webroot目录来完成。

Certbot将要求你提供电子邮件地址以发送续约通知,你还需要接受许可协议。

要从let'sEncrypt CA获取证书,必须确保要为它生成证书的域名指向服务器,如果不是,那么对域名的DNS记录进行必要的更改,然后等待DNS再次传播,然后再次进行证书请求,Certbot在提供证书之前检查域名颁发机构。

生成的证书很可能存储在 /etc/letsencrypt/live/kibana.example.com/ 目录会存储为fullchain.pem证书,私钥会存储为privkey.pem

让我们加密证书会在90天内到期,因此建议使用cronjobs为证书设置自动续订,Cron是一个用来运行周期性任务的系统服务。

通过运行以下命令打开cron作业文件:

 
sudo crontab -e

 

在文件的末尾添加以下行。


30 5 * * 1 /usr/bin/certbot renew -a nginx --quiet

上面的5:30作业会在的每个星期一运行,如果证书到期,它将自动续订。

运行以下命令编辑Nginx的默认虚拟主机文件。


sudo nano /etc/nginx/sites-available/default

用以下内容替换现有内容。


server {
 listen 80 default_server;
 server_name kibana.example.com
 return 301 https://$server_name$request_uri;
}

server {
 listen 443 default_server ssl http2;

 server_name kibana.example.com;

 ssl_certificate /etc/letsencrypt/live/kibana.example.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/kibana.example.com/privkey.pem;

 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_prefer_server_ciphers on;
 ssl_ciphers"EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
 ssl_ecdh_curve secp384r1;
 ssl_session_cache shared:SSL:10m;
 ssl_session_tickets off;
 ssl_stapling on;
 ssl_stapling_verify on;
 resolver 8.8.8.8 8.8.4.4 valid=300s;
 resolver_timeout 5s;
 add_header Strict-Transport-Security"max-age=63072000; includeSubdomains";
 add_header X-Frame-Options DENY;
 add_header X-Content-Type-Options nosniff;

 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;
 }
}

确保你使用实际的域名名更新kibana.example.com,也验证了SSL证书和私钥的路径。

运行以下命令重新启动Nginx web服务器:


sudo systemctl restart nginx

如果一切配置正确你会看到Kibana登录屏幕,使用用户名kibana和你已设置的密码登录,你应该能够成功登录,并且看到Kibana仪表板,现在离开仪表板,现在我们会在以后配置它。

安装Logstash

Logstash也可以通过我们之前添加的官方ElasticSearch存储库安装,通过运行安装Logstash :


sudo apt -y install logstash

上面的命令会在你的系统上安装最新版本的Logstash,安装Logstash后通过运行以下命令重新加载Systemd服务守护进程:


sudo systemctl daemon-reload

启动Logstash,并且使它在系统启动时自动启动。


sudo systemctl enable logstash
sudo systemctl start logstash

安装X-Pack for Logstash

你可以通过运行以下命令直接安装X-Pack for Logstash :


cd /usr/share/logstash
sudo bin/logstash-plugin install x-pack

X-Pack for Logstash带有默认用户logstash_system ,你可以通过运行以下命令重置密码:


curl -XPUT -u elastic '192.168.0.1:9200/_xpack/security/user/logstash_system/_password?pretty' -H 'Content-Type: application/json' -d'
{
"password":"NewLogstashPassword"
}
'

192.168.0.1替换为服务器的实际专用IP地址并将new Logstash password替换为Logstash user的新密码。

现在通过运行以下命令重新启动Logstash服务:


sudo systemctl restart logstash

通过运行以下命令编辑Logstash配置文件:


sudo nano /etc/logstash/logstash.yml

在文件末尾添加以下行以启用对Logstash实例的监视。


xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.url: http://192.168.0.1:9200
xpack.monitoring.elasticsearch.username: logstash_system
xpack.monitoring.elasticsearch.password: NewLogstashPassword

根据你的设置替换Elasticsearch URL和Logstash密码。

现在可以配置Logstash以便使用不同的节拍接收数据,有几种可用的Beat类型: Packetbeat metricbeat filebeat winlogbeat和Heartbeat,你需要单独安装每个Beat。

结束语

在本教程中,我们在Ubuntu 17.04上安装了带有X-Pack的Elastic Stack,服务器上已安装基本的ELK Stack。

Xn_warm profile image