此过程是亲自实践过的,一步步下来可成功安装,如有问题可以联系我。
Elastic Stack(以前称为ELK Stack )是由Elastic生成的开源软件集合,允许您以任何格式搜索,分析和可视化从任何源生成的日志,这种做法称为集中式日志记录 。 在尝试识别服务器或应用程序的问题时,集中日志记录非常有用,因为它允许您在一个位置搜索所有日志。 它也很有用,因为它允许您通过在特定时间范围内关联其日志来识别跨多个服务器的问题。
我们将在Ubuntu 18.04服务器上重新安装Elastic Stack。您将学习如何安装Elastic Stack的所有组件(包括Filebeat,用于转发和集中日志和文件的Beat),并配置它们以收集和可视化系统日志。我们将在单个服务器上安装所有组件,我们将其称为Elastic Stack Server。
Elastic Stack有四个主要组件:
组件 | 说明 |
---|---|
Elasticsearch | 一个分布式RESTful搜索引擎,用于存储所有收集的数据 |
Logstash | Elastic Stack的数据处理组件,用于将传入数据发送到Elasticsearch |
Kibana | 用于搜索和可视化日志的Web界面 |
Beats | 轻量级,单一用途的数据发布者,可以将数百或数千台计算机中的数据发送到Logstash或Elasticsearch |
在本文中,您将在Ubuntu 18.04服务器上安装Elastic Stack 。 您将学习如何安装Elastic Stack的所有组件 - 包括Filebeat ,用于转发和集中日志和文件的Beat - 并配置它们以收集和可视化系统日志。 此外,由于Kibana通常只在localhost上可用,我们将使用Nginx代理它,以便可以通过Web浏览器访问它。 我们将在单个服务器上安装所有这些组件,我们将其称为Elastic Stack服务器 。
注意 :安装Elastic Stack时,必须在整个中使用相同的版本。在撰写本文时,它们是Elasticsearch 6.8.6,Kibana 6.8.6,Logstash 6.8.6和Filebeat 6.8.6。
按照Ubuntu 18.04的初始服务器设置指南设置Ubuntu 18.04服务器,包括具有sudo权限的非root用户和使用ufw配置的防火墙。 Elastic Stack服务器所需的CPU,RAM和存储量取决于您要收集的日志量。 在本教程中,我们将使用具有以下Elastic Stack服务器规范的VPS:
操作系统 | Ubuntu 18.04 |
内存 | 4GB |
CPU | 2 |
软件 | Java,Nginx |
为隐私考虑,文中用xx.xx.xx.xx 替代了安装Elastic Stack服务器的IP
Ubuntu的默认包存储库中不提供Elastic Stack组件。 但是,在添加Elastic的包源列表后,它们可以与APT一起安装。
所有Elastic Stack的软件包都使用Elasticsearch签名密钥进行签名,以保护您的系统免受软件包欺骗。 使用密钥进行身份验证的软件包将被包管理器视为信任。 在此步骤中,您将导入Elasticsearch公共GPG密钥并添加Elastic包源列表以安装Elasticsearch。
首先,运行以下命令将Elasticsearch公共GPG密钥导入APT:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
接下来,将Elastic源列表添加到sources.list.d目录,其中APT将查找新的源:
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
接下来,更新您的包列表,以便APT读取新的Elastic源:
sudo apt update
然后使用以下命令安装Elasticsearch:
sudo apt install elasticsearch
完成Elasticsearch安装后,使用首选文本编辑器编辑Elasticsearch的主配置文件elasticsearch.yml 。 在这里,我们将使用nano :
sudo nano /etc/elasticsearch/elasticsearch.yml
注意: Elasticsearch的配置文件采用YAML格式,这意味着缩进非常重要! 编辑此文件时,请确保不添加任何额外的空格。
Elasticsearch监听来自端口9200上各处的流量。 您需要限制对Elasticsearch实例的外部访问,以防止外人通过REST API读取您的数据或关闭您的Elasticsearch集群。 找到指定network.host的行,取消注释,并将其值替换为xx.xx.xx.xx ,如下所示:
/etc/elasticsearch/elasticsearch.yml
. . .
network.host: xx.xx.xx.xx
. . .
按CTRL+X保存并关闭elasticsearch.yml ,接着是Y ,然后如果你使用的是nano ,则ENTER 。 然后,使用systemctl启动Elasticsearch服务:
sudo systemctl start elasticsearch
接下来,运行以下命令以使Elasticsearch在每次服务器启动时启动:
sudo systemctl enable elasticsearch
您可以通过发送HTTP请求来测试您的Elasticsearch服务是否正在运行:
curl -X GET "xx.xx.xx.xx:9200"
您将看到一个响应,显示有关本地节点的一些基本信息,类似于:
{
"name" : "8eSrAWi",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "33qILJRuTKyTh8rDMlvS7g",
"version" : {
"number" : "6.8.6",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "3d9f765",
"build_date" : "2019-12-13T17:11:52.013738Z",
"build_snapshot" : false,
"lucene_version" : "7.7.2",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
现在Elasticsearch已经启动并运行,让我们安装Kibana,它是Elastic Stack的下一个组件。
根据官方文档 ,您应该在安装Elasticsearch之后安装Kibana。 按此顺序安装可确保每个产品所依赖的组件正确到位。
因为您已经在上一步中添加了Elastic包源,所以您可以使用apt安装Elastic Stack的其余组件:
sudo apt install kibana
更改kibana.yml,确保其他主机能够连接kibana主机
sudo nano /etc/kibana/kibana.yml
更改成如下所示
server.port: 5601
server.host: "xx.xx.xx.xx"
elasticsearch.hosts: ["http://xx.xx.xx.xx:9200"]
查看更改的kibana.yml配置文件内容
$ grep ^[a-Z] /etc/kibana/kibana.yml
更改后的配置文件内容
server.port: 5601
server.host: "xx.xx.xx.xx"
elasticsearch.hosts: ["http://xx.xx.xx.xx:9200"]
然后启用并启动Kibana服务:
sudo systemctl enable kibana
sudo systemctl start kibana
由于Kibana配置为仅监听xx.xx.xx.xx ,因此我们必须设置反向代理以允许对其进行外部访问。 我们将使用Nginx来实现此目的,它应该已经安装在您的服务器上。
首先,使用openssl命令创建一个管理Kibana用户,您将使用该用户访问Kibana Web界面。 例如,我们将此帐户kibanaadmin ,但为了确保更高的安全性,我们建议您为用户选择难以猜测的非标准名称。
以下命令将创建管理Kibana用户和密码,并将它们存储在htpasswd.users文件中。 您将配置Nginx以要求此用户名和密码并立即读取此文件:
echo "kibanaadmin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users
在提示符下输入并确认密码。 记住或记下此登录信息,因为您需要它来访问Kibana Web界面。
接下来,我们将创建一个Nginx服务器块文件。 例如,我们将此文件称为elk:
sudo nano /etc/nginx/sites-available/elk
如果您为此服务器设置了FQDN和DNS记录,则可以在FQDN之后命名此文件,:
sudo nano /etc/nginx/sites-available/example.com
将以下代码块添加到文件中,确保更新example.com以匹配服务器的FQDN或公共IP地址。 此代码将Nginx配置为将服务器的HTTP流量定向到Kibana应用程序,该应用程序正在监听xx.xx.xx.xx:5601 。 此外,它配置Nginx以读取htpasswd.users文件并需要基本身份验证。
请注意,如果您遵循先决条件Nginx教程直到最后,您可能已经创建了此文件并使用一些内容填充它。 在这种情况下,请在添加以下内容之前删除文件中的所有现有内容:
/etc/nginx/sites-available/elk
server {
listen 80;
server_name xx.xx.xx.xx;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/htpasswd.users;
location / {
proxy_pass http://xx.xx.xx.xx: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;
}
}
完成后,保存并关闭文件。
接下来,通过创建指向sites-enabled目录的符号链接来启用新配置。 如果您已在Nginx先决条件中创建了具有相同名称的服务器块文件,则无需运行此命令:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/elk
然后检查配置是否存在语法错误:
sudo nginx -t
如果输出中报告了任何错误,请返回并仔细检查您在配置文件中放置的内容是否已正确添加。 一旦看到输出中的syntax is ok ,请继续并重新启动Nginx服务:
sudo systemctl restart nginx
如果您按照初始服务器设置指南进行操作,则应启用UFW防火墙。 要允许连接到Nginx,我们可以通过键入以下内容来调整规则:
sudo ufw allow 'Nginx Full'
注意:如果您遵循先决条件Nginx教程,则可能已创建了允许Nginx HTTP配置文件通过防火墙的UFW规则。 由于Nginx Full配置文件允许通过防火墙的HTTP和HTTPS流量,因此您可以安全地删除在先决条件教程中创建的规则。 使用以下命令执行此操作:
sudo ufw delete allow 'Nginx HTTP'
现在可以通过您的FQDN或Elastic Stack服务器的公共IP地址访问Kibana。 您可以通过导航到以下地址并在出现提示时输入登录凭据来检查Kibana服务器的状态页面:
http://your_server_ip/status
此状态页面显示有关服务器资源使用情况的信息,并列出已安装的插件。
注意 :如前提条件部分所述,建议您在服务器上启用SSL / TLS。 您现在可以参照在Ubuntu
18.04上获取Nginx的免费SSL证书(如何保护Nginx,让我们在Ubuntu 18.04上加密)。
获得SSL / TLS证书后,您可以返回并完成本文。
现在配置了Kibana仪表板,让我们安装下一个组件:Logstash。
虽然Beats可以将数据直接发送到Elasticsearch数据库,但我们建议使用Logstash来处理数据。 这将允许您从不同的源收集数据,将其转换为通用格式,并将其导出到另一个数据库。
使用以下命令安装Logstash:
sudo apt install logstash
安装Logstash后,您可以继续进行配置。 Logstash的配置文件以JSON格式编写,并驻留在/etc/logstash/conf.d目录中。 在配置它时,将Logstash视为一个管道,将一端接收数据,以某种方式处理它,然后将其发送到目的地(在这种情况下,目标是Elasticsearch)是有帮助的。 Logstash管道有两个必需元素, input和output ,以及一个可选元素filter 。 输入插件使用来自源的数据,过滤器插件处理数据,输出插件将数据写入目标。
创建一个名为02-beats-input.conf的配置文件,您将在其中设置Filebeat输入:
sudo nano /etc/logstash/conf.d/02-beats-input.conf
插入以下input配置。 这指定将在TCP端口5044上监听的beats输入。
/etc/logstash/conf.d/02-beats-input.conf
input {
beats {
port => 5044
}
}
保存并关闭文件。
接下来,创建一个名为10-syslog-filter.conf的配置文件,我们将在其中添加系统日志过滤器,也称为syslogs :
sudo nano /etc/logstash/conf.d/10-syslog-filter.conf
插入以下syslog过滤器配置。 此示例系统日志配置取自官方Elastic文档 。 此过滤器用于解析传入的系统日志,使其由预定义的Kibana仪表板构建和使用:
/etc/logstash/conf.d/10-syslog-filter.conf
filter {
if [fileset][module] == "system" {
if [fileset][name] == "auth" {
grok {
match => { "message" => ["%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} %{DATA:[system][auth][ssh][method]} for (invalid user )?%{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]} port %{NUMBER:[system][auth][ssh][port]} ssh2(: %{GREEDYDATA:[system][auth][ssh][signature]})?",
"%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} user %{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]}",
"%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: Did not receive identification string from %{IPORHOST:[system][auth][ssh][dropped_ip]}",
"%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sudo(?:\[%{POSINT:[system][auth][pid]}\])?: \s*%{DATA:[system][auth][user]} :( %{DATA:[system][auth][sudo][error]} ;)? TTY=%{DATA:[system][auth][sudo][tty]} ; PWD=%{DATA:[system][auth][sudo][pwd]} ; USER=%{DATA:[system][auth][sudo][user]} ; COMMAND=%{GREEDYDATA:[system][auth][sudo][command]}",
"%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} groupadd(?:\[%{POSINT:[system][auth][pid]}\])?: new group: name=%{DATA:system.auth.groupadd.name}, GID=%{NUMBER:system.auth.groupadd.gid}",
"%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} useradd(?:\[%{POSINT:[system][auth][pid]}\])?: new user: name=%{DATA:[system][auth][user][add][name]}, UID=%{NUMBER:[system][auth][user][add][uid]}, GID=%{NUMBER:[system][auth][user][add][gid]}, home=%{DATA:[system][auth][user][add][home]}, shell=%{DATA:[system][auth][user][add][shell]}$",
"%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} %{DATA:[system][auth][program]}(?:\[%{POSINT:[system][auth][pid]}\])?: %{GREEDYMULTILINE:[system][auth][message]}"] }
pattern_definitions => {
"GREEDYMULTILINE"=> "(.|\n)*"
}
remove_field => "message"
}
date {
match => [ "[system][auth][timestamp]", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
geoip {
source => "[system][auth][ssh][ip]"
target => "[system][auth][ssh][geoip]"
}
}
else if [fileset][name] == "syslog" {
grok {
match => { "message" => ["%{SYSLOGTIMESTAMP:[system][syslog][timestamp]} %{SYSLOGHOST:[system][syslog][hostname]} %{DATA:[system][syslog][program]}(?:\[%{POSINT:[system][syslog][pid]}\])?: %{GREEDYMULTILINE:[system][syslog][message]}"] }
pattern_definitions => { "GREEDYMULTILINE" => "(.|\n)*" }
remove_field => "message"
}
date {
match => [ "[system][syslog][timestamp]", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
}
}
接下来,创建一个名为11-nginx-filter.conf的配置文件,我们将在其中添加nginx日志过滤器,也称为nginxlogs :
sudo nano /etc/logstash/conf.d/11-nginx-filter.conf
插入以下syslog过滤器配置。 此示例系统日志配置取自官方Elastic文档 。 此过滤器用于解析传入的系统日志,使其由预定义的Kibana仪表板构建和使用:
/etc/logstash/conf.d/11-nginx-filter.conf
filter {
if [fileset][module] == "nginx" {
if [fileset][name] == "access" {
grok {
match => { "message" => ["%{IPORHOST:[nginx][access][remote_ip]} - %{DATA:[nginx][access][user_name]} \[%{HTTPDATE:[nginx][access][time]}\] \"%{WORD:[nginx][access][method]} %{DATA:[nginx][access][url]} HTTP/%{NUMBER:[nginx][access][http_version]}\" %{NUMBER:[nginx][access][response_code]} %{NUMBER:[nginx][access][body_sent][bytes]} \"%{DATA:[nginx][access][referrer]}\" \"%{DATA:[nginx][access][agent]}\""] }
remove_field => "message"
}
mutate {
add_field => { "read_timestamp" => "%{@timestamp}" }
}
date {
match => [ "[nginx][access][time]", "dd/MMM/YYYY:H:m:s Z" ]
remove_field => "[nginx][access][time]"
}
useragent {
source => "[nginx][access][agent]"
target => "[nginx][access][user_agent]"
remove_field => "[nginx][access][agent]"
}
geoip {
source => "[nginx][access][remote_ip]"
target => "[nginx][access][geoip]"
}
}
else if [fileset][name] == "error" {
grok {
match => { "message" => ["%{DATA:[nginx][error][time]} \[%{DATA:[nginx][error][level]}\] %{NUMBER:[nginx][error][pid]}#%{NUMBER:[nginx][error][tid]}: (\*%{NUMBER:[nginx][error][connection_id]} )?%{GREEDYDATA:[nginx][error][message]}"] }
remove_field => "message"
}
mutate {
rename => { "@timestamp" => "read_timestamp" }
}
date {
match => [ "[nginx][error][time]", "YYYY/MM/dd H:m:s" ]
remove_field => "[nginx][error][time]"
}
}
}
}
完成后保存并关闭文件。
最后,创建一个名为30-elasticsearch-output.conf的配置文件:
sudo nano /etc/logstash/conf.d/30-elasticsearch-output.conf
插入以下output配置。 本质上,此输出将Logstash配置为将Beats数据存储在Elasticsearch中,该数据在xx.xx.xx.xx:9200运行,位于以Beat使用的名称命名的索引中。 本教程中使用的Beat是Filebeat:
/etc/logstash/conf.d/30-elasticsearch-output.conf
output {
elasticsearch {
hosts => ["xx.xx.xx.xx:9200"]
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
}
}
保存并关闭文件。
注意:如果要为使用Filebeat输入的其他应用程序添加过滤器,请确保将文件命名为在输入和输出配置之间进行排序,这意味着文件名应以02和30之间的两位数字开头。
使用以下命令测试Logstash配置:
sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t
如果没有语法错误,几秒钟后输出将显示Configruation OK 。 如果在输出中没有看到此信息,请检查输出中出现的任何错误并更新配置以更正它们。
如果配置测试成功,请启动并启用Logstash以使配置更改生效:
sudo systemctl start logstash
sudo systemctl enable logstash
现在Logstash正确运行并完全配置,让我们安装Filebeat。
Elastic Stack使用几个名为Beats的轻量级数据发送器来收集各种来源的数据,并将它们传输到Logstash或Elasticsearch。 以下是目前Elastic提供的Beats:
Filebeat | 收集并发送日志文件 |
Metricbeat | 从您的系统和服务中收集指标 |
Packetbeat | 收集和分析网络数据 |
Winlogbeat | 收集Windows事件日志 |
Auditbeat | 收集Linux审计框架数据并监视文件完整性 |
Heartbeat | 通过主动探测监控服务的可用性(心跳) |
在本教程中,我们将使用Filebeat将本地日志转发到我们的Elastic Stack。
使用apt安装Filebeat:
sudo apt install filebeat
接下来,配置Filebeat以连接到Logstash。 在这里,我们将修改Filebeat附带的示例配置文件。
打开Filebeat配置文件:
sudo nano /etc/filebeat/filebeat.yml
注意:与Elasticsearch一样,Filebeat的配置文件采用YAML格式。 这意味着正确的缩进至关重要,因此请务必使用这些说明中指示的相同数量的空格。
Filebeat支持多种输出,但您通常只将事件直接发送到Elasticsearch或Logstash以进行其他处理。 在本教程中,我们将使用Logstash对Filebeat收集的数据执行其他处理。 Filebeat不需要直接向Elasticsearch发送任何数据,所以让我们禁用该输出。 为此,找到output.elasticsearch部分,并在#前面注释掉以下行:
/etc/filebeat/filebeat.yml
...
#output.elasticsearch:
# Array of hosts to connect to.
#hosts: ["xx.xx.xx.xx:9200"]
...
然后,配置output.logstash部分。 取消注释行output.logstash:和hosts: [“xx.xx.xx.xx:5044”]删除# 。 这将配置Filebeat连接到Elastic Stack服务器上端口5044的Logstash,我们之前为其指定了Logstash输入的端口:
/etc/filebeat/filebeat.yml
output.logstash:
# The Logstash hosts
hosts: ["xx.xx.xx.xx:5044"]
保存并关闭文件。
Filebeat的功能可以使用Filebeat模块进行扩展。 在本教程中,我们将使用系统模块,nginx模块。
启用模块 | 说明 |
---|---|
system | 收集和解析由常见Linux发行版的系统日志记录服务创建的日志 |
nginx | 收集和解析由常见nginx日志记录 |
让我们启用它:
sudo filebeat modules enable system
sudo filebeat modules enable nginx
您可以通过运行以下命令查看已启用和已禁用模块的列表:
sudo filebeat modules list
您将看到类似于以下内容的列表:
Enabled:
system
nginx
Disabled:
apache2
auditd
elasticsearch
icinga
iis
kafka
kibana
logstash
mongodb
mysql
osquery
postgresql
redis
traefik
默认情况下,Filebeat配置为使用syslog和授权日志的默认路径。 对于本教程,您无需更改配置中的任何内容。 您可以在/etc/filebeat/modules.d/system.yml配置文件中查看模块的参数。
接下来,将索引模板加载到Elasticsearch中。 Elasticsearch索引是具有类似特征的文档集合。 索引用名称标识,用于在其中执行各种操作时引用索引。 创建新索引时,将自动应用索引模板。
要加载模板,请使用以下命令:
sudo filebeat setup --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["xx.xx.xx.xx:9200"]'
您将看到如下所示的输出:
Loaded index template
Filebeat附带了示例Kibana仪表板,允许您在Kibana中可视化Filebeat数据。 在使用仪表板之前,您需要创建索引模式并将仪表板加载到Kibana中。
在仪表板加载时,Filebeat连接到Elasticsearch以检查版本信息。 要在启用Logstash时加载仪表板,您需要禁用Logstash输出并启用Elasticsearch输出:
sudo filebeat setup -e -E output.logstash.enabled=false -E output.elasticsearch.hosts=['xx.xx.xx.xx:9200'] -E setup.kibana.host=xx.xx.xx.xx:5601
您将看到如下所示的输出:
2018-09-10T08:39:15.844Z INFO instance/beat.go:273 Setup Beat: filebeat; Version: 6.4.2
2018-09-10T08:39:15.845Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200
2018-09-10T08:39:15.845Z INFO pipeline/module.go:98 Beat name: elk
2018-09-10T08:39:15.845Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200
2018-09-10T08:39:15.849Z INFO elasticsearch/client.go:708 Connected to Elasticsearch version 6.4.2
2018-09-10T08:39:15.856Z INFO template/load.go:129 Template already exists and will not be overwritten.
Loaded index template
Loading dashboards (Kibana must be running and reachable)
2018-09-10T08:39:15.857Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200
2018-09-10T08:39:15.865Z INFO elasticsearch/client.go:708 Connected to Elasticsearch version 6.4.2
2018-09-10T08:39:15.865Z INFO kibana/client.go:113 Kibana url: http://localhost:5601
2018-09-10T08:39:45.357Z INFO instance/beat.go:659 Kibana dashboards successfully loaded.
Loaded dashboards
2018-09-10T08:39:45.358Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200
2018-09-10T08:39:45.361Z INFO elasticsearch/client.go:708 Connected to Elasticsearch version 6.4.2
2018-09-10T08:39:45.361Z INFO kibana/client.go:113 Kibana url: http://localhost:5601
2018-09-10T08:39:45.455Z WARN fileset/modules.go:388 X-Pack Machine Learning is not enabled
Loaded machine learning job configurations
现在您可以启动并启用Filebeat:
sudo systemctl start filebeat
sudo systemctl enable filebeat
如果您正确设置了Elastic Stack,Filebeat将开始将您的系统日志和授权日志发送到Logstash,Logstash会将该数据加载到Elasticsearch中。
要验证Elasticsearch是否确实正在接收此数据,请使用以下命令查询Filebeat索引:
curl -XGET 'http://xx.xx.xx.xx:9200/filebeat-*/_search?pretty'
您将看到与此类似的输出:
...
{
"took" : 32,
"timed_out" : false,
"_shards" : {
"total" : 3,
"successful" : 3,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 1641,
"max_score" : 1.0,
"hits" : [
{
"_index" : "filebeat-6.4.2-2018.10.10",
"_type" : "doc",
"_id" : "H_bZ62UBB4D0uxFRu_h3",
"_score" : 1.0,
"_source" : {
"@version" : "1",
"message" : "Oct 10 06:22:36 elk systemd[1]: Reached target Local File Systems (Pre).",
"@timestamp" : "2018-10-10T08:43:56.969Z",
"host" : {
"name" : "elk"
},
"source" : "/var/log/syslog",
"input" : {
"type" : "log"
},
"tags" : [
"beats_input_codec_plain_applied"
],
"offset" : 296,
"prospector" : {
"type" : "log"
},
"beat" : {
"version" : "6.4.2",
"hostname" : "elk",
"name" : "elk"
}
}
},
...
如果您的输出显示总命中数为0,则Elasticsearch不会在您搜索的索引下加载任何日志,您需要检查设置是否有错误。 如果您收到了预期的输出,请继续执行下一步,我们将在其中了解如何浏览Kibana的一些仪表板。
让我们看看我们之前安装的Web界面Kibana。
在Web浏览器中,转到Elastic Stack服务器的FQDN或公共IP地址。 输入您在第2步中定义的登录凭据后,您将看到Kibana主页:
单击左侧导航栏中的“ 发现”链接。 在“ 发现”页面上,选择预定义的filebeat- *索引模式以查看Filebeat数据。 默认情况下,这将显示过去15分钟内的所有日志数据。 您将看到包含日志事件的直方图,以及下面的一些日志消息:
在这里,您可以搜索和浏览日志,还可以自定义仪表板。 但是,此时不会有太多因为您只从Elastic Stack服务器收集系统日志。
使用左侧面板导航到Dashboard页面并搜索Filebeat System仪表板。 在那里,您可以搜索Filebeat system模块附带的示例仪表板。
Kibana还有许多其他功能,例如图形和过滤功能,因此您可以随意浏览。
在本文中,您学习了如何安装和配置Elastic Stack以收集和分析系统日志。 请记住,您可以使用Beats将任何类型的日志或索引数据发送到Logstash,但如果使用Logstash过滤器对数据进行解析和结构化,则数据变得更加有用,因为这会将数据转换为可读取的一致格式很容易通过Elasticsearch。
Elastic Stack and Product Documentation
如何在Ubuntu 18.04上安装Elasticsearch,Logstash和Kibana(弹性)
安装Elastic Stack组件(Elasticsearch,Logstash,Kibana,Filebeat)报错锦集