如何在Ubuntu 17.04上安装和配置Elastic Stack ElasticSearch Logstash和Kibana
Xn_warm
・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
,在本教程中我们会nginx设置为Kibana的反向代理,我们还会用一个让我们加密免费SSL证书的Nginx实例来保护实例。at port
5601
上运行Kibana因此,建议使用Apache或nginx设置反向代理以从本地网络外部访问Kibana
通过运行以下命令安装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
,使用此选项可以确保不会自动安装证书,并且Nginx配置还未更改,验证将通过将质询文件放入指定的参数告诉Certbot客户机只生成证书,
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。